Сага о конвейерах: не разгон ведь, а летает
Введение и немного истории
Я думаю, рассказывать о том, что такое пиксельные и вершинные конвейеры в чипах современных графических ускорителей, уже не надо – большей части нашей аудитории эти понятия хорошо знакомы. Также не будем говорить и о том, что количество оных прямо влияет на производительность графического чипа в целом. Остановимся мы на другом вопросе – каким же образом некоторым людям на некоторых платах удаётся активировать «дополнительные», ранее незадействованные конвейеры, из-за чего они вообще присутствуют в чипах, и, наконец, каким же образом можно, заплатив меньше денег, получить больше производительности.
Дабы лучше понимать суть дальнейшего изложения, давайте немного углубимся в историю – вспомним, когда же впервые люди узнали о существовании незадействованных пиксельных конвейеров, возможности и пути их активации? А произошло это в далёком 2001 году, когда в нашей стране появились первые видеокарты на базе тогдашнего флагманского чипа от ATI – R300. Видеокарты делились изначально на две базовые модели:
• Radeon 9700 – полноценное решение, имевшее 8 пиксельных конвейеров и ширину шины памяти 256-бит.
• Radeon 9500 – фактически тот же самый Radeon 9700, построенный на базе той же самой PCB с 256-битной шиной памяти, однако меньшими по сравнению с Radeon 9700 частотами и, что самое главное, вдвое меньшим количеством пиксельных конвейеров.
И всё бы ничего, если б не один интереснейший момент – обе модели были построены на базе одного и того же чипа, то есть графические процессоры и платы с различным количеством конвейеров были идентичными и представляли собой тот самый знаменитый R300. Ларчик, как вскоре выяснили дотошные экспериментаторы, открывался довольно просто – на подложке чипа находились резисторы, и расположение одного из резисторов отличалось в зависимости от модели платы. Казалось бы – достаточно лишь перепаять тот самый резистор, и младшая модификация R300 моментально заиграет недостающими конвейерами, но не всё оказалось так просто и безоблачно. А начинать надо с того, каким же образом полноценные чипы попадали и попадают на сокращённые версии видеокарт.
Отбраковка и дефицит: когда цель оправдывает средства
Казалось бы, всё элементарно – производитель изготавливает массу совершенно одинаковых графических процессоров, имеющих физически на месте все пиксельные конвейеры. Далее, после того, как ещё свежие пластины разрезаны и на мощностях производителя имеется партия готовых чипов, начинается их предварительное тестирование и отбраковка.
Чипы тестируются в различных условиях – на различных частотах и режимах работы конвейеров. Вариант номер один – берем R300, который в своей флагманской вариации имеет 8 пиксельных конвейеров и рабочую тактовую частоту 325 МГц. Производим тестирование на 8 конвейерах и пониженной частоте. Если никаких сбоев не обнаруживается, повышаем частоту до номинальных 325 МГц. Если чип успешно проходит все тесты, то он отмечается как полноценный Radeon 9700 Pro и откладывается в соответствующую партию.
Вариант номер два – чип проходит тестирование со всеми включенными конвейерами, однако не может стабильно работать на флагманской частоте. В таком случае частота сбавляется до отметки несколько меньшей, и тестирование проводится уже на пониженной частоте. Если тестирование проходит успешно, то такой наполовину отбракованный чип отмечается как Radeon 9700 и также откладывается в соответствующую партию.
А вот что делать, если чип оказался инвалидом с парочкой выбитых конвейеров? Канадская компания ATI слишком рациональна, чтобы просто отбраковывать и выбрасывать такие чипы. Производится несложный тест – отключается ровно половина пиксельных конвейеров, и проводится тестирование такого, уже обрезанного по характеристикам чипа. Не проходит – значит, совсем плох, можно выкинуть на свалку или повестить на стене в рамочке с подписью «667-й блин комом». А вот если чип отлично работает с половиной отключенных конвейеров – тогда уже другое дело, можно пойти по принципу безотходного производства и сделать из него младшую модель, в данном случае, если мы говорим о чипах R300, то это Radeon 9500.
И получилось у канадской компании ATI всё совсем уж идеально – продавались и полноценные Radeon 9700, и неплохие Radeon 9500. Однако спрос, как гласит старый рыночный закон, рождает предложение, и, разумеется, недорогие Radeon 9500 пользовались куда большей популярностью, нежели хай-эндовые Radeon 9700.
Вот здесь и возникает главная загвоздка – людям нужно куда больше недорогих Radeon 9500, которые пользуются просто бешеной популярностью в своем секторе. А технологический процесс-то на месте не стоит и постоянно отлаживается, а вместе с ним возрастает и процент выпуска годных чипов. Что же получается? Полноценных чипов выходит всё больше, а отбракованных по нерабочим конвейерам – всё меньше.
Что делать? Спрос на Radeon 9500 колоссален, отбракованных чипов выходит хотя и много, но всё же далеко не достаточно для полного заполнения ими Radeon 9500. Остаются два варианта – либо разработать новый чип с изначально отсутствующими «лишними» конвейерами, либо ставить на платы Radeon 9500 совершенно рабочие чипы и принудительно отключать в них конвейеры. Разработка нового чипа – вариант хороший, однако больно уж дорогой – придется перерабатывать сам чип, а вместе с ним и новую разводку PCB плат, что невыгодно. Себестоимость чипов вполне позволяла ATI прибегнуть к первому варианту и комплектовать младшие модели годными и хорошими чипами.
Продажи шли хорошо, владельцы Radeon 9500 до поры до времени довольствовались тем, что имеют, канадцы получали хорошие деньги и уже практически полностью вышли из сложившегося несколько лет назад кризиса. Но не будем забывать ещё о двух группах – энтузиастах и экспертах-исследователях. Так бы всё и продолжилось, если б не они, эти вредные российские спецы... :-)
Как это работает
Итак, взяли мы злосчастный Radeon 9500 и перепаяли нужный нам резистор на подложке чипа. Вставляем модифицированную карту, запускаем систему. Всё запустилось, вроде бы работает, однако не так, как надо, а именно, не задействовались полностью все 8 конвейеров. Странно, в чём же-таки проблема? Ах, BIOS забыли прошить новый – ведь для полностью корректной работы видеокарты в 8-конвейерном режиме необходимо, чтобы BIOS также нормально воспринимал все 8 конвейеров и мог с ними работать. Прошиваем BIOS от Radeon 9700 – и, вуаля, всё работает.
Первая переделанная видеокарта оказалась рабочей, и спустя некоторое время работы с паяльником мы получили Radeon 9700 за намного меньшие деньги. Повезло, хороший экземпляр попался. Однако, давайте не будем забывать, что далеко не все чипы вот так с ходу согласятся работать в полно-конвейерном режиме, ведь существует и большое количествочипов, отбракованных именно по этому критерию. Да и перепайка резистора – вещь своеобразная, надо и с паяльником «дружить», и руки иметь не трясущиеся, да и, опять-таки, не факт ведь, что плата нормально заработает!
Надо искать альтернативные варианты, чем наши энтузиасты и занялись. Но для того, чтобы искать варианты реализации чего-то, надо сначала понимать, а что именно мы хотим реализовать и что для этого надо сделать. В первую очередь, надо понимать, каким образом система определяет и задействует нужное количество конвейеров. Есть, конечно же, BIOS, однако решающую роль он не сыграет, и даже если мы прошьем BIOS от Radeon 9700 в обычную 9500, это ровным счёётом ничего не изменит. Карта как определялась «Radeon 9500», так и будет определяться, вне зависимости от того, какая прошивка будет у неё во Flash-памяти.
Проблема решается иным образом – у каждой видеокарты, да и не только видеокарты, а у любого компьютерного устройства вообще, имеется свой уникальный идентификатор, по которому система это устройство определяет и выбирает для него соответствующий драйвер. Драйверы под все видеокарты ATI/NVIDIA уже давно стали унифицированными, т.е. один и тот же драйвер используется для всей огромной линейки видеокарт данного производителя. И здесь идентификатор устройства играет огромную роль – только имея это число, драйвер сможет понять, что за видеокарта установлена и как с ней надо работать. Вот тут-то мы и подходим к самому интересному.
Что нам давала перепайка резистора на подложке чипа? Немного углубляемся в вопросе и выясняем, что как раз этот резистор отвечал за Device ID карточки и выставлял нужный идентификатор, соответствующий Radeon 9500 или 9700 в зависимости от своего положения. И как раз здесь мы приходим к интересной мысли – если вся операция сводится к обману драйвера и форсированию «чужого» Device ID, то почему бы не попытаться сделать это программно, не касаясь великомученика-резистора?
Всем кулхацкерам посвящается – патчинг драйвера и BIOS
Самый простой вариант – программный обман драйвера, реализовать который тоже несложно: достаточно лишь заставить драйвер форсировать чужой Device ID, и он будет воспринимать перепрошитый Radeon 9500 как полноценный 9700 и, соответственно, задействует все восемь конвейеров чипа. Возможно это теоретически двумя способами: либо подправить идентификатор непосредственно в памяти, в адресном пространстве драйвера, либо же изменить имеющийся код Radeon 9500 на соответствующий для Radeon 9700 в самом теле драйвера.
Практически же осуществим лишь второй способ, так как определение и последующая инициализация всех соответствующих параметров для нужного Device ID происходит на этапе ранней загрузки драйверов, что далеко до загрузки самой системы. Таким образом, остаётся лишь найти и заменить соответствующие куски в коде драйвера, а возможно это любым HEX-редактором. Однако времена, когда пользователи копались в HEX-редакторах, уже давным-давно канули в лету, гораздо проще один раз написать небольшую программку, которая и осуществляла бы замену.
Именно это и сделал российский программист, известный как Unwinder, в виде дополнительной утилиты к своему знаменитому пакету RivaTuner. Так называемые патч-скрипты, в которых прописываются исходный и результирующие идентификаторы и некоторые другие параметры, реализованы в виде отдельных текстовых файлов для большего удобства, а также чтобы не нарушать закон. Ведь в противном случае такая программка превращается в самый настоящий крэк, хотя таковым она по сути своей и является :-)
В случае компании NVIDIA, переделка продуктов которой стала возможна с появлением серии GeForce 6800, дело обстоит несколько иным образом – здесь мы обходимся одной лишь перепрошивкой нового BIOS, предварительно пропатченного тем же самым скриптом. Однако о реализации мы с Вами поговорим чуть ниже, а пока же давайте разберёмся, что можно переделать, и во что, и насколько это вероятно.
Однако переходим в наше время
Всё это, конечно, хорошо, если бы не было так поздно – заметит читатель, ознакомившись с вышеизложенным текстом. И совершенно верно, надо сказать, заметит! Radeon 9500/9700 уже морально и технологически устарели, и больше подходят для пребывания на бездонных прилавках магазинов, торгующих б/у комплектующими, нежели для установки в машины пользователей. С этим не поспоришь. С момента появления первых Radeon 9700 прошло уже достаточно много лет, однако принципы остались всё теми же прежними, и переделка новых GeForce 6800, как мы расскажем вам чуть ниже, происходит примерно тем же образом, что и раньше, с той лишь разницей, что патчим мы не драйвер, а саму прошивку BIOS.
Однако для того, чтобы лучше понимать, что и во что переделывается, давайте начнём с «разбора полётов», а именно, что переделывается, как, и что получается в итоге. Начнём с калифорнийской линейки GeForce 6800 AGP, построенной на базе чипа NV40 и представленной сейчас на рынке в виде следующих вариаций:
• GeForce 6800Ultra – 16 пиксельных конвейеров, частоты 450/1100 МГц;
• GeForce 6800GT – 16 пиксельных конвейеров, частоты 350/1000 МГц;
• GeForce 6800 – 12 пиксельных конвейеров, частоты 325/700 МГц;
• GeForce 6800LE – 8 пиксельных конвейеров, частоты плавающие МГц.
Как видите, младшая модель отличается от старшей как минимум вдвое меньшим количеством пиксельных конвейеров, в то время как средняя, или даже корректнее назвать её базовой, обделена лишь четырьмя пиксельными конвейерами. Такой существенный разброс можно легко обусловить проблемами с технологическим процессом и, соответственно, малым процентом выпуска абсолютно годных чипов, которые пошли бы на GeForce 6800 Ultra. Таким образом, две старшие модели, 6800Ultra и 6800GT, ни во что не переделываются, их мы можем считать полноценными и трогать не будем.
Переделочный интерес для нас представляют модели GeForce 6800, с надеждой на включение всех 16-и конвейеров и получения чего-то отдалённо похожего на GeForce 6800GT (точный аналог мы не получим из-за более медленной памяти DDR у GeForce 6800 против более быстрой GDDR-3 у 6800GT) и тёмная лошадка GeForce 6800LE. С последними дело обстоит вообще странно – ни о каком на 100% рабочем NV40 там, разумеется, и речи идти не может, так как вряд ли кто-то станет ставить и без того дефицитный чип на бюджетную модель, так что максимум, на что мы можем рассчитывать – так это на переделку GeForce 6800LE в обычный GeForce 6800 путём активации дополнительных четырёх конвейеров.
У канадцев ситуация обстоит примерно таким же образом – дабы держать свою продукцию на уровне калифорнийских конкурентов. После анонса базовых моделей Radeon X800Pro и Radeon X800XT, как мы знаем, последовали дополнительные модели типа X800XL, а главное, совсем уж обрезанного и перерезанного Radeon X800LE. В итоге получается точно такая же линейка, как и у NVIDIA, за исключением последней вышедшей Radeon X850, держащейся как бы особняком:
• Radeon X800XT – 16 пиксельных конвейеров, частоты 500/1000 МГц;
• Radeon X800XL – 16 пиксельных конвейеров, частоты 400/1000 МГц;
• Radeon X800Pro – 12 пиксельных конвейеров, частоты 475/900 МГц;
• Radeon X800SE – 8 пиксельных конвейеров, частоты 425/800 МГц.
Таким образом, помимо неинтересных в плане переделки X800XT и X800XL, мы имеем две младшие модели X800Pro и X800LE, построенные на базе чипа R420 и имеющие по 12/8 пиксельных конвейеров соответственно. Вот мы и разобрались с тем, какие карты можно переделать и во что, однако же, для полной ясности и наглядности, распишем возможные варианты:
• GeForce 6800LE 8PP -> GeForce 6800 12PP (+4 PP)
• GeForce 6800LE 8PP -> GeForce 6800 16PP аналог GT (+8PP)*
• GeForce 6800 12PP -> GeForce 6800 16PP аналог GT (+4PP)
У канадцев всё то же самое:
• Radeon X800SE 8PP -> Radeon X800 12PP (+4PP)
• Radeon X800SE 8PP -> Radeon X800 16PP (+8PP)*
• Radeon X800Pro 12PP -> Radeon X800 16PP (+4PP)
При этом ещё раз отметим, что переделка 8-конвейерных моделей в полноценные 16-конвейерные хотя и возможна, но крайне маловероятна. Включить-то конвейеры вы, конечно, сможете, но вряд ли карта сможет корректно заработать после такой переделки, хотя всякое бывает, и не исключено, что именно вам может попасться на 100% рабочий чип. Да и вообще – любая переделка – приличная лотерея, и никто не может гарантировать, что вам попадётся плата с «правильным» чипом, который без проблем заработает в режиме с дополнительными конвейерами. Однако, как показывает практика, годные чипы встречаются пока ещё достаточно часто, и шанс получить дополнительный прирост путём переделки тоже не низкий.
Наиболее сильным образом это касается продукции канадской компании, так как программных способов переделки Radeon X800 пока не найдено, а аппаратная может быть чревата последствиями – как минимум, вы потеряете гарантию на дорогую видеокарту, что-то в ней перепаивая. Как бы то ни было, аппаратная активация конвейеров – тоже весьма интересная тема, стоящая нашего внимания, однако она несколько выходит за рамки нашего сегодняшнего материала и заслуживает написания отдельной статьи, которой мы постараемся вас порадовать уже в ближайшее время.
А пока давайте поговорим о программных путях переделки и активации конвейеров. О теории и возможных путях мы уже поведали, а засим перейдём к матушке-практике.
Переделка на практике – RivaTuner PatchScripts и NVStrap
Итак, с общими вопросами переделки мы разобрались, давайте перейдем уже и к практическому аспекту. Для начала нам понадобится последняя версия программы RivaTuner, которая бесплатно доступна для скачивания с множества различных зеркал, например с западного сайта поддержки - www.guru3d.com. Далее нам понадобится дистрибутив драйвера, если мы хотим включить конвейеры на Radeon 9500/9700/9800, или же файл прошивки BIOS для GeForce 6800.
Переделка Radeon 9500/9800SE
Начнём с первого случая. Найти патч-скрипт для видеокарт ATI Radeon достаточно легко, он расположен в подкаталоге PatchScripts рабочей папки RivaTuner’а и носит незамысловатое название SoftR9x00:
Далее всё предельно просто – запускаем файл патч-скрипта, находящийся внутри, выбираем, во что мы хотим «переделать нашу» карту, и выбираем файл ati2mtag.sys либо ati2mtag.sy_ из дистрибутива драйвера:
Далее происходит сам процесс патчинга, лог работы которого будет выведен в окне патч-скрипта, и мы сможем сразу же понять, прошла ли переделка успешно или же произошла какая-либо ошибка, например, если версия драйвера, который вы хотите пропатчить, не поддерживается текущей версией патч-скрипта. К примеру, в случае успешного завершения патчинга мы получим вывод сходный следующему:
Browsing for file ati2mtag.sys... compressed file selectedDepacking ati2mtag.sy_... succeededBrowsing for file ati2mtag.sys... selected 6.14.10.6422, 669696 bytesUsing native patch installation mode 000064004> matched sequence has been replaced8b 56 10 c1 e2 10 25 ff ff 00 00 03 d0 8b 56 10 c1 e2 10 25 ff ff ff ff 89 c2 00064059> matched sequence has been replaced8b 56 10 c1 e2 10 25 ff ff 00 00 03 d0 8b 56 10 c1 e2 10 25 ff ff ff ff 89 c2 00096cd1> matched sequence has been replacedc1 e8 10 3b 46 10 74 c1 e8 10 3b 46 10 eb 00097004> matched sequence has been replaced68 c0 03 00 00 ff b0 a8 00 00 00 e8 0a 58 f5 ff c1 e8 10 66 8b 40 04 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 000974c4> matched sequence has been replaced83 f8 40 75 1d 66 81 bd 00 ff ff ff 02 10 75 12 0f b7 85 02 ff ff ff 0f b7 85 02 ff ff ff 66 25 f0 f0 66 0d 08 0e 66 89 85 02 ff ff ff 90 File has been successfully patched and saved as ati2mtag.sysBackup copy has been saved as ati2mtag.old |
Теперь остаётся лишь переустановить драйвер в системе и «наслаждаться» результатом, в хорошем или же плохом смысле этого слова – в зависимости от того, заработали ли свеже-включенные конвейеры так, как надо, или же чип оказался битым, и экран изобилует разными дефектами картинки.
Однако ещё раз подчеркнём, что приведённая схема работает в настоящий момент только для видеокарт ATI Radeon 9500/9700/9800 и позволяет включить дополнительные 4 конвейера для видеокарт на базе чипов R300/R350/R360. Для новых видеокарт линейки Radeon X800 на базе R420 в драйверах была введена дополнительная защита, обойти которую до сих пор не удалось, хотя попытки создания патч-скриптов для X800 предпринимались уже неоднократно.
Активация конвейеров на GeForce 6800 – метод NVStrap
Итак, для активации дополнительных возможностей видеокарты на низком уровне, таких как заблокированные пиксельные и вершинные конвейеры, в составе RivaTuner имеется мощное и удобное средство под названием NVStrap. Данное средство представляет собой специальный драйвер, который сначала должен быть проинсталлирован в системе. Осуществляется его инсталляция предельно просто и производится непосредственно из интерфейса RivaTuner в секции «Low-level system settings»:
После установки NVStrap мы можем переходить непосредственно к его настройке, нажав кнопку Customize, которая, в свою очередь, становится активной сразу же после установки драйвера NVStrap. В появившемся окне нам необходимо активировать два незадействованных конвейерных блока:
Активируются они, как несложно догадаться, посредством банальной установки галочек напротив соответствующих пунктов. После активации, для непосредственного задействования конвейеров, нам необходимо перезагрузить машину, что и предложит сделать RivaTuner, заботливо предупредив, что включение конвейеров может вызвать массу неприятных глюков:
После перезагрузки система или порадует нас обещанными возможными глюками, или же заработает с вновь активированными конвейерами. Если всё было сделано правильно, мы сразу же увидим изменение конфигурации пиксельных и вершинных конвейеров в RivaTuner:
В нашем случае всё прошло успешно и система отлично заработала, а карточка порадовала нас хорошим приростом производительности, о котором вы сможете прочитать чуть ниже. А пока что давайте зашьём изменения конфигурации конвейеров непосредственно в саму карточку, чтобы нам не приходилось каждый раз возиться с NVStrap.
Активация конвейеров на GeForce 6800 методом патчинга BIOS
Итак, мы включили дополнительные конвейеры через NVStrap на нашей GeForce, и всё нормально заработало. Что дальше? В принципе – ничего, можно всё так и оставить, однако при следующей же переустановке драйверов и/или системы карта перекинется обратно в свой штатный режим. Как избежать этой неприятности? Оказывается, выход есть, причём простой и кардинальный – пропатчить специальным образом BIOS видеокарты и обновить имеющуюся прошивку на модифицированную.
Однако перед тем, как патчить, нам необходимо её сначала получить. Самый простой вариант – загрузить дамп вашей текущей прошивки BIOS: таким образом, вы будете работать с вашей «родной» прошивкой, что снижает вероятность появления каких-либо глюков, которые могут проявиться если вы используете, например, аналогичную прошивку от другой видеокарты.
Сохранить дамп можно при помощи утилиты nvflash, благодаря которой в дальнейшем производится и прошивка нового BIOS. Работает утилита под чистым DOS, поэтому придётся предварительно запастись загрузочным диском или дискеткой. Утилита выделяется отсутствием какого-либо интерфейса и работает исключительно через параметры командной строки, хотя ничего сложного там нет. В основном используются две команды:
• nvflash.exe –-save bios.rom – сохраняет текущую проишвку из flash-памяти карты в файл bios.rom;
• nvflash.exe newbios.rom – заливает прошивку из файла newbios.rom во flash-память карты.
Запуск nvflash без параметров выдаст вам все возможные ключи и краткую справку по их использованию. Но давайте не будем заострять на данном моменте наше внимание, посчитаем, что прошивку мы уже сняли, и она находится в файле bios.rom у нас на диске.
Патчинг образа прошивки производится при помощи специального патч-скрипта к RivaTuner, который прочитает информацию о конфигурации конвейеров из NVStrap и активирует конвейеры соответствующим образом.
Также поспешим обратить ваше внимание на то, что в случае если конфигурация NVStrap не задана, будут задействованы ВСЕ конвейеры, и никто не даст стопроцентной гарантии, что ваша карта корректно заработает на такой конфигурации. Поэтому перед патчингом прошивки следует ещё раз убедиться в том, что конфигурация NVStrap задана корректным образом, а сам NVStrap установлен и работает. Предположим, убедились – всё задано верно и отлично работает.
Что делаем дальше? Запускаем патч-скрипт для NV40 из того же самого набора скриптов RivaTuner’а. Найти его также несложно:
В большинстве случаев проще использовать второй патч-скрипт. Его рабочее окно практически ничем не отличается от приведённого для ATI Radeon, и производится патчинг таким же точно образом:
Выбираем файл прошивки, патчим, получаем новый BIOS, который и надо будет прошить обратно при помощи вышеупомянутой nvflash. Вроде бы как всё – на этом процесс патчинга и переделки заканчивается, а вместе с ним подходит к концу и наше описание.
Пара слов в заключение
Сегодня мы постарались наиболее исчерпывающим образом рассказать о возможности активации изначально заблокированных конвейеров, о том, каким образом блокируются конвейеры, как активируются, да и вообще разобрали всю теоретическую часть данного аспекта, добавив немного практики.
Понимая весь вышеприведенный материал, любой мало-мальски грамотный пользователь, при удачном стечении обстоятельств (имеется в виду наличие небитой карточки), сможет без проблем, быстро и легко прибавить своему зверю дополнительных fps.
Остается лишь один интересный вопрос – насколько много fps прибавиться. И об этом читайте в нашей следующей статье – «Практическая переделка»: включаем конвейеры на GeForce 6800».