Исследование возможностей программной переделки
RADEON 9x00 в FireGL Z1/X1

31.02.2003


Наши постоянные читатели наверняка помнят, что совсем недавно мы уже касались темы переделки игровых акселераторов в их профессиональные аналоги и пытались "вывести на чистую воду" не слишком честных производителей графических процессоров, продающих по баснословным ценам ускорители, ничем не отличающиеся от игровых. В прошлый раз объектом нашего пристального внимания были акселераторы на базе графических процессоров NV25 и NV25GL, производимых компанией NVIDIA. Напомним, что нам удалось выяснить, что c появлением линейки Quadro4 NVIDIA впервые отступила от используемых ранее принципов и выпустила на рынок профессиональных ускорителей графический процессор, действительно хоть чем-то отличающийся от своего игрового прообраза и обеспечивающий в некоторых задачах производительность, не достижимую игровыми платами даже после переделки. Справедливости ради стоит отметить, что большинство людей, использующих платы Quadro4 в профессиональных целях, скорее всего не заметит разницы между профессиональным процессором и его "клоном", полученным с помощью прилагавшихся к нашему предыдущему исследованию тестовых скриптов SoftQuadro4. Но хотя круг задач, в которых настоящим профессиональным ускорителям удаётся обогнать переделанные игровые, и узок, обойти стороной тот факт, что процессоры NV25 и NV25GL всё-таки не абсолютно идентичны, мы не можем. Остаётся только порадоваться за компанию NVIDIA, потихоньку встающую на "путь истинный", и прейти к теме нашего сегодняшнего разговора. Впрочем, сейчас может порадоваться и сама компания NVIDIA, поскольку достанется сегодня не ей, а её злейшему конкуренту - канадской компании ATI. Вы, наверное, помните, что в прошлом исследовании мы вскользь упомянули, что скорее всего последнее поколение профессиональных ускорителей, выпускаемых ATI, также архитектурно ничем не отличаются от игровых плат на базе процессора R300. Сегодня нам представилась возможность исследовать этот вопрос глубже. Итак, на нашем операционном столе RADEON 9500 64MB - младший представитель семейства игровых ускорителей на графическом процессоре R300. Именно на его основе мы и попытаемся получить профессиональный ускоритель, а также попробуем выяснить, есть ли хоть какие-то преимущества у настоящих плат FireGL Z1/X1 и оправдана ли их более чем нескромная цена.

Обозначив цель, давайте проанализируем, что именно мешает нам использовать рядовую игровую плату на процессоре R300 в качестве профессиональной. Дело в том, что в отличие от пропагандируемой NVIDIA унифицированной архитектуры драйверов, компания ATI использует другой подход и разделяет линейки драйверов для игровых и профессиональных ускорителей. Именно предназначенные для профессиональных плат драйверы, не устанавливающиеся на обыкновенные игровые карты, и являются главным препятствием на нашем пути. Однако означает ли это, что разделение линеек драйверов обусловлено серьёзными различиями в архитектуре плат RADEON 9500/9700 и FireGL Z1/X1? Это мы с Вами и попытаемся сегодня выяснить, попробовав "подружить" драйверы для профессиональных плат с обычной игровой картой. Результаты такого эксперимента будут лучшим ответом на вопрос, который мы перед собой поставили. Итак, для того, чтобы это сделать, нам понадобится выяснить, что же именно мешает установке этих драйверов на нашу карту. Это мы и попытаемся сделать.

Итак, первыми бросающимися в глаза отличиями, безусловно, являются PCI DeviceID и PCI SubsystemID, уникально идентифицирующие любое PCI устройство. К счастью, эти отличия достаточно легко устранимы с помощью правки BIOS видеоадаптера. C изменением PCI SubsystemID не возникает вообще никаких проблем, поскольку это значение легко подправить как вручную, так и с помощью специализированных редакторов BIOS. Собственно, не возникает проблем и с подменой PCI DeviceID, однако знают об этом очень немногие. Дело в том, что PCI DeviceID на платах на базе графического процессора R300 также частично программируем и изменяется с помощью битовой маски, находящейся по определённому смещению в BIOS видеоадаптера и считывающейся чипом при POST. Младшие биты PCI DeviceID на платах на базе R300 программируемы на любых платах, а вот программируемость старшего байта PCI DeviceID определяется положением того самого знаменитого резистора на графическом процессоре, обнаруженного нашими коллегами с сайта Overclockers.ru и положившего начало буму аппаратной переделки RADEON 9500 в RADEON 9700. Однако, как мы уже отметили, положение этого резистора контролирует лишь возможность программируемости старшего байта PCI DeviceID, что в нашем случае неактуально. Нам повезло гораздо больше, поскольку PCI DeviceID профессиональных плат отличается от PCI DeviceID игровых плат лишь значением двух младших бит. Поэтому, установив в единицу два младших бита в байте по смещению 0x74 в BIOS, мы автоматически изменяем и PCI DeviceID любого видеоадаптера на базе R300 и получаем идентификатор нужного нам профессионального адаптера. После этого нам потребуется подправить и контрольную сумму BIOS, однако с этим проблем также не возникает - нужно лишь уменьшить её настолько, насколько мы увеличили программирующий PCI DeviceID байт. Таким образом, проделав все вышеописанные операции, можно полностью устранить различия в идентификации игрового и профессионального адаптера, что позволит операционной системе распознать наш видеоадаптер как полноценный FireGL Z1/X1 и даст возможность установки драйвера для профессиональной линейки ускорителей. Что же, приступим к делу - выполнив соответствующие модификации BIOS нашего R9500 64MB, мы заставили операционную систему распознавать его как FireGL Z1. Тем не менее, после установки драйвера для FireGL Z1 и перезагрузки системы мы обнаружили, что система загрузилась в VGA режиме, а протоколы загрузки гласят о том, что драйвер видеоадаптера не смог инициализироваться и вернул ошибку с кодом 10 (Device cannot start). Впрочем, результат этот был вполне прогнозируем - глупо было бы надеяться на то, что компания ATI могла оставить нам столь простой путь переделки игрового ускорителя в профессиональный. Опытные пользователи уже наверняка поняли, о чём может говорить ошибка с кодом 10, поскольку её довольно часто можно встретить при попытке установки на какое-либо устройство неподходящего для него драйвера. Итак, наличие такой ошибки при установке драйвера почти со стопроцентной гарантией означает следующую вещь: помимо PCI DeviceID и PCI SubsytemID драйвер использует ещё какие-то критерии для распознания видеоадаптера и просто не признаёт наш доморощенный FireGL Z1 за "свой". Вооружившись необходимыми инструментами, мы подтвердили свои догадки и выяснили, что внутренняя процедура распознавания устройства в минипорте драйвера действительно "браковала" наш самодельный FireGL Z1 и прекращала работу с кодом ошибки ERROR_DEV_NOT_EXIST. Изучение кода минипорта расставило все точки над "i": в качестве дополнительного критерия распознавания, не позволявшего установить драйвер на наш видеоадаптер, используется проверка ревизии PCI устройства. Таким образом, последнее различие, блокирующее возможность установки профессиональных драйверов на игровой ускоритель, найдено. Отметим, что за время подготовки данного материала к публикации, энтузиастам с сайта DarkCrow удалось обнаружить ещё один резистор на чипе, перепайка которого позволяет разблокировать профессиональные возможности на платах RADEON 9500/9700. Проведённые нами исследования показали, что этот резистор отвечает именно за значение старшего бита ревизии PCI устройства, что лишний раз подтвердило правомерность наших предположений. Логично, что следующим шагом в нашем исследовании будет попытка программного блокирования обнаруженных нами различий между игровыми и профессиональными платами.

Для того чтобы проверить, действительно ли различаются чипы на платах RADEON 9500/9700 и FireGL Z1/X1 или изменённая ревизия предназначена лишь для блокирования возможности инсталляции "профессиональных" драйверов, мы разработали специальный тестовый скрипт SoftFireGL. Данный скрипт вносит изменения в процедуру распознавания видеоадаптеров в минипорте драйвера и форсирует установку старшего бита ревизии видеоадаптера после чтения соответствующего значения из конфигурационного пространства PCI. Учитывая также, что сопряжённая со сменой PCI DeviceID процедура редактирования BIOS может оказаться слишком сложной (порой даже фатальной) для некоторых неопытных пользователей, мы включили в скрипт и код для форсирования PCI DeviceID. Результатом работы SoftFireGL является немного изменённый дистрибутив драйвера для FireGL Z1/X1, позволяющий без проблем установить его на любой видеоадаптер на базе процессора R300. Результаты тестирования игрового ускорителя после установки драйверов для FireGL Z1/X1 позволят нам получить ответ на вопрос, который мы перед собой поставили, а именно выяснить, есть ли различия между графическими процессорами, используемыми на платах RADEON 9500/9700 и FireFL Z1/X1.

Итак, давайте перейдём от теории к практике и непосредственно к тестированию. Для того, чтобы повторить результаты наших экспериментов, Вам понадобятся:

  • свежая версия нашей утилиты RivaTuner, включающая в себя тестовые скрипты SoftFireGL для Windows 2000/XP;
  • поддерживаемые скриптами драйвера для FireGL Z1/X1 (на момент написания статьи скрипты полноценно работают с драйверами версий 1021 - 1026 под операционными системами Windows 2000/XP);
  • видеоадаптер на базе графического процессора R300 (ATI RADEON 9500/9500PRO/9700/9700PRO).

Скачав все необходимые файлы, прочитайте внимательно следующие инструкции и выполните их шаг за шагом. Эти инструкции рассчитаны на человека со средним уровнем компьютерной грамотности, поэтому если они слишком сложны для Вас, не стоит посылать нам письма с просьбами объяснить процедуру установки поподробнее. Просто попытайтесь найти среди своих знакомых человека поопытнее и попросите его помочь. Этим Вы сэкономите и своё, и наше время.
 

Инсталлируйте RivaTuner и запустите программу хотя бы один раз, если вы никогда не пользовались этой утилитой ранее. Это необходимо для того, чтобы зарегистрировать в системе RivaTuner Script (*.rts) файлы и позволить Вам запускать их прямо из проводника операционной системы.

 

Распакуйте дистрибутив драйвера для FireGL Z1/X1 в отдельную папку. Сделать это можно, как запустив программу инсталляции драйвера и отменив установку после распаковки всех файлов, так и с помощью внешнего архиватора, например, WinZip.

 

Запустите входящий в дистрибутив RivaTuner скрипт SoftFireGL (файл SoftFireGL w2k.rts). Сделать это можно, кликнув по пиктограмме соответствующего файла в проводнике операционной системы (скрипт для драйвера 1021 находится в подпапке PatchScripts\ATI\SoftFireGL\1021 в папке RivaTuner, скрипт для версии 1024 и старше - в подпапке PatchScripts\ATI\SoftFireGL\1024+) либо запустив RivaTuner и нажав кнопку Open patch script в закладке PowerUser:

Исследование возможностей программной переделки RADEON 9x00 в FireGL Z1/X1
   

После запуска скрипта выберите в выпадающем списке профессиональный видеоадаптер, свойства которого вы хотите форсировать (force FireGL Z1 capabilities либо force FireGL X1 capabilities). Напомним, что разница между FireGL X1 и FireGL Z1 абсолютно такая же, как и между RADEON 9700PRO и 256-битным RADEON 9500 128MB - у последнего программно заблокированы четыре пиксельных конвейера и иерархический Z-буфер, отвечающий за технологию удаления невидимых поверхностей. К сожалению, для производства таких карт используются как полноценные процессоры R300, так и их отбраковка (согласно нашей статистике, примерно 30% плат RADEON 9500 используют отбраковку процессоров R300), поэтому при форсировании свойств FireGL X1 на RADEON 9500 есть шанс напороться на бракованный чип и получить визуальные артефакты в виде печально знаменитой "шахматной доски" или даже полное зависание операционной системы. Владельцам же RADEON 9500PRO/9700/9700PRO можно смело выбирать FireGL X1:

Исследование возможностей программной переделки RADEON 9x00 в FireGL Z1/X1
   

Выбрав адаптер, нажмите кнопку Continue и укажите путь к папке, в которую Вы распаковали дистрибутив драйвера. Программа автоматически откроет нужный файл и внесёт в него изменения.

Важно отметить, что встроенный в RivaTuner интерпретатор скриптов использует средства операционной системы для регенерации контрольной суммы системных файлов, поэтому не пытайтесь запустить скрипт для Windows 2000/XP из-под Windows 9x во избежание генерации неправильной контрольной суммы.

Удостоверьтесь, что отчёт выполнения скрипта не содержит сообщений о фатальных ошибках. Отметим, что предупреждение WARNING: Certified patch script not found таковым не является и говорит только о том, что мы не тестировали скрипт с данной версией драйверов.

 

Установите модифицированный драйвер вручную через менеджер устройств. Важно отметить, что если Вы не выполняли сопряжённую с редактированием BIOS процедуру по изменению PCI DeviceID и PCI SubsystemID, Вам придётся вручную выбрать тип видеоадаптера при установке, поскольку информационный файл драйвера для FireGL Z1/X1 не содержит идентификаторов игровых акселераторов. Находящаяся в папке драйвера программа инсталляции также не будет работать по этой же причине.

В качестве альтернативы ручной установке драйвера Вы можете дополнить секцию [ATI.Mfg] информационного файла драйвера идентификатором своего видеоадаптера, а затем установить драйвер в автоматическом режиме, запустив программу инсталляции. Далее приведён пример соответствующей модификации информационного файла fglry.inf (версия драйвера 1021) для видеоадаптера RADEON 9700PRO:
  [ATI.Mfg]
  ...
  ...
  ...
  ATI Soft Fire GL X1 SECONDARY=FGLRY,PCI\VEN_1002&DEV_4E64
  ATI Soft Fire GL X1=FGLRY,PCI\VEN_1002&DEV_4E44

 

Последнее, что Вам остаётся сделать после выполнения всех этих шагов, - это проверить корректность установки драйвера и скрипта SoftFireGL. Если после установки драйвера Ваша система не загрузится в VGA режиме, то, скорее всего, Вы всё сделали правильно. Окончательно в этом убедиться можно, проверив имя OpenGL рендерера с помощью специализированных программ, например GLInfo. Если Ваш RADEON распознаётся как FireGL, то можно смело переходить к тестированию.

Итак, разобравшись с установкой, давайте, наконец, посмотрим на производительность нашего доморощенного FireGL и сравним его с производительностью оригинального RADEON 9500 64MB. Конфигурация нашего тестового стенда представлена ниже:

Процессор

AMD AthlonXP 1800+

Материнская плата

ASUS A7V8X на чипсете VIA KT400

Оперативная память

512 MB Samsung PC2700 DDRAM, CAS2.5

Видеокарта

ATI RADEON 9500 64MB

Тестовый стенд работал под управлением операционной системы Windows XP и драйверов 1021 для FireGL Z1/X1. Поскольку скрипт SoftFireGL позволяет форсировать на RADEON 9500 как свойства FireGL Z1, так и свойства FireGL X1 (само собой, при условии того, что на плате установлен полностью работоспособный процессор R300), мы приводим результаты тестов RADEON 9500 в двух режимах. Для сравнения также приведены и результаты этого видеоадаптера с "игровыми" драйверами Catalyst 6200.

Следует отметить, что настоящие FireGL Z1/X1 имеют 256-битную шину памяти, в то время как наш RADEON 9500 общается с памятью по "узкой" 128-битной шине. Поэтому не следует напрямую соотносить наши результаты с результатами реальных плат FireGL Z1 и FireGL X1, поскольку такое сравнение будет не слишком правомерным вследствие указанного выше отличия. Тем не менее, результатов этих тестов более чем достаточно, чтобы получить представление о примерной разнице в производительности между настоящими FireGL Z1 и FireGL X1. К тому же и сравнению производительности SoftFireGL и реальной FireGL мы уделим внимание немного позже. Впрочем, не будем забегать вперёд - давайте вернёмся к конфигурации нашего тестового стенда.

Итак, для сравнения производительности использовались тестовые пакеты SPECViewPerf 6.1.2 и SPECViewPerf 7.0, являющиеся стандартом в оценке производительности профессиональных OpenGL ускорителей. Все тесты запускались при установленном на рабочем столе разрешении 1024x768x32 на стандартных настройках драйвера при отключенной вертикальной синхронизации монитора.

Для упрощения процесса тестирования мы использовали нашу разработку AutoBench3D, позволяющую автоматизировать сбор результатов наиболее популярных бенчмарков и поддерживающую обе версии SPECViewPerf.

Мы не будем тратить много времени на знакомство с SPECViewPerf и детально изучать особенности каждого из подтестов, поскольку мы уделили этому очень много внимания в нашем предыдущем исследовании, посвящённом SoftQuadro4. Поэтому если Вас интересуют детали, очень рекомендуем Вам ознакомиться с ним. Мы же, подразумевая, что SPECViewPerf и специфика каждого из его подтестов (модулей визуализации в терминологии SPECViewPerf) хорошо знакомы нашим читателям, просто посмотрим на результаты, останавливаясь только на особенно интересных местах.

Итак, начнём с SPECViewPerf 6.1.2:

Исследование возможностей программной переделки RADEON 9x00 в FireGL Z1/X1

Общий результат SPECViewPerf 6.1.2 ярко демонстрирует, что производительность игровых карт с лёгкостью может увеличиваться в несколько раз при установке "профессиональных" драйверов, оптимизированных под другие задачи, а именно под работу в CAD приложениях. Впрочем, удивляться этому не приходится - наши постоянные читатели наверняка помнят, что аналогичная ситуация наблюдается и с профессиональными ускорителями Quadro4 компании NVIDIA, большая часть производительности которых обусловлена не аппаратными отличиями, а альтернативными оптимизациями драйвера. По-видимому, такой подход понравился и компании ATI.

Итак, оптимизированный под другие задачи код драйверов для FireGL Z1/X1 позволил получить почти двукратный прирост в каждом из подтестов SPECViewPerf 6.1.2. В AWadvs-04 преимущество SoftFireGL Z1 над RADEON 9500 составило 69%, в DRV-07 - 87%, в DX-06 - 75%, в MedMCAD-01 -76%, и в ProCDRS-03 - 148%. Как и следовало ожидать, преимущество SoftFireGL X1 над SoftFireGL Z1 сильнее всего заметно в наиболее зависимых от скорости закраски подтестах AWadvs-04 (11%) и ProCDRS-03 (20%).

Давайте посмотрим на результаты каждого из подтестов и поговорим о наиболее интересных из них:

Исследование возможностей программной переделки RADEON 9x00 в FireGL Z1/X1

В ориентированном на оценку производительности DCC приложений модуле визуализации AWadvs-04 разрыв между RADEON 9500 и SoftFireGL одинаков во всех тестах и составляет примерно 60%. Поскольку большинство из тестов использует solid-рендеринг и комбинации различных режимов текстурирования в совокупности с достаточно простой геометрией, SoftFireGL X1 везде опережает SoftFireGL Z1 вследствие использования всех восьми пиксельных конвейеров против только четырёх у последнего. Интересно отметить, что разблокирование восьми пиксельных конвейеров самым благотворным образом сказывается на тестах №3 и №4, использующих каркасный рендеринг. В них SoftFireGL X1 опережает SoftFireGL Z1 с внушительным разрывом, составляющим 37%.

Исследование возможностей программной переделки RADEON 9x00 в FireGL Z1/X1

В нашем прошлом исследовании мы уже останавливались на крайне сильной процессорозависимости модуля визуализации DRV-07. Это подтверждается и результатами SoftFireGL X1, не имеющими никаких преимуществ по сравнению с результатами более слабого с точки зрения скорости закраски SoftFireGL Z1. Тем не менее, даже сильная процессорозависимость данной группы тестов не помешала SoftFireGL Z1/X1 обогнать RADEON 9500 почти с двукратным разрывом. Скорее всего, драйвер для FireGL имеет серьёзные оптимизации в коде, ответственном за обработку геометрии.

Исследование возможностей программной переделки RADEON 9x00 в FireGL Z1/X1

Достаточно интересны результаты модуля визуализации DX-06. Напомним, что в нём при рендеринге используются как непосредственные вызовы команд OpenGL (так называемый непосредственный режим или immediate mode), так и списки команд (display lists в терминологии этого API). Списки используются в тестах №3, №5 и №10, остальные тесты работают в непосредственном режиме рендеринга. Читатели, знакомые с нашим предыдущим исследованием, наверняка помнят, что платы SoftQuadro4 демонстрировали максимальное превосходство над GeForce4 в тестах №3, №5 и №10, что позволило нам сделать вывод о том, что "профессиональная" часть OpenGL ICD драйвера Detonator использует списки команд гораздо эффективнее, чем "игровая". Схожую картину мы наблюдаем и сейчас - максимальный разрыв в производительности между RADEON 9500 и SoftFireGL, достигающий в пике более чем 200%, заметен именно в тестах, использующих списки. Впрочем, и в остальных тестах разрыв значителен и составляет примерно 70%.

Переход на страницу:

 1 

 2