Тюнинг "тыковок": модификация микрокода видеокарт поколения Maxwell

Видеокарты поколения Maxwell заканчивают свою эпоху, уступив право правления улучшенной архитектуре Pascal. Но от этого GM20x не перестали быть интересными в плане своего скрытого потенциала, выражаемого в МГц. Мы помним, что внедрение технологии Boost 2.0 вставило многим палки в колеса приразгоне видеокарт с помощью утилит (MSI Afterburner, EVGA Precision, Palit ThunderMaster и других), и смещение частоты приводило к тому, что вместе с частотой BOOST менялись базовая и промежуточные частоты, и рано или поздно это приводило к нестабильности при смене нагрузки на видеокарту. Как следствие - многие снижали разгон, а для дальнейшего разгона приходилось или использовать метод редактирования микрокода под название "отключения BOOST" (на самом деле сама технология Boost 2.0 никуда не исчезала, просто видеокарта работала на повышенных частотах даже при небольших нагрузках), или использовать сторонние программы для фиксации максимальных частот (например -Nvidia PowerMizer Manager). Минусы заключаются в повышенных частотах и напряжении в режиме простоя и небольшой нагрузке, как итог - излишние нагрев и потребление. В данном случае в роли ограничителей выступают возможностиMaxwell II BIOS Tweakerи драйверная часть видеокарт. Но что, если заглянуть в тонкий мир микрокода с помощью HEX-редактора и посмотреть, что же даст нам такой подход.

Подготовка к редактированию микрокода видеокарты

Для начала необходимо прошить крайнюю версию BIOS (без модификаций) для вашей видеокарты. Найти её можно как на сайте производителя, так и на сторонних сайтах, например -TechPowerUp. Для того, чтобы прошить BIOS, можно воспользоваться программой NVFlash. Рекомендую сразу скачатьверсию с обходом проверки сертификатов, так как именно она нам пригодится далее. Для прошивки создаем в корне диска C папку с названиеnvflashи в нее распаковываем содержимое скачанного ранее архива. так же в корень папки добавляем файл с микрокодом, который мы собираемся "прожечь".Затем запускаем командную строку от имени администратора и вводим следующие команды по очереди:

  1. cd c:\nvflash
  2. nvflash-6 namebios.rom

гдеnamebios - название файла BIOS.

Я для разгона использую в основномMSI Afterburner, поэтому в данном материале будет фигурировать именно она. Скачиваем крайнюю версиюи устанавливаем её. Так же скачиваем программу GPU-Zи производим установку.

Дальнейший этап - определениезначения максимальной частоты и рабочего напряжения при полной нагрузке на видеокарту без использования разгона. Это удобнее делать с помощью встроенного в GPU-Z рендера и мониторинга сенсоров

На данном примере частота в режиме Boost 2.0 составляет 1455.5 МГц при напряжении 1.199 В, вторая видеокарта (BIOS которой будет рассматриваться ниже)работала на частоте 1367 МГц при 1.193 В.Запоминаем данные параметры, они нам еще пригодятся.

Теперь же открываем версию BIOS, которую мы загрузили в нашу видеокарту, с помощьюMaxwell II BIOS Tweaker. Параллельно рассмотрим основные вкладки и значения, представленные в них.

Вкладка Common

TDP Base Entry/3D Base Entry/Boost Entry- эти параметры не трогаем, оставляем как есть.

TDP Base Clock/3D Base Clock/Boost Clock- значение базовых и BOOST частот. По факту, TDP Base Clock/3D Base Clock не зависят от asic видеокарты, и мы можем его выставить вручную, но выбирать частотыстоит из вкладки Boost table. На моем примере вы видите частоту с 34 ячейки таблицы.

А вот частота Boost Clock указывает нам минимальную частоту BOOST для видеокарты (1329Мгц - 59 ячейка таблицы), но фактическая частота будет определятьсяasic карты (можно посмотреть его в gpu-z) - чем выше asic, тем выше фактическая частота в режиме BOOST (на моей видеокарте с asic 73,5% буст из коробки до 1392.5Мгц - 64 позиция таблицы частот). С помощью изменения Boost Clock на значения из таблицы выше стоковых мы переносим частоту BOOST. Изменение частоты 1329 МГц (59 позиция таблицы) до 1354.5 МГц (61 позиция) в моем случаеприведет к изменению фактической частоты в режиме BOOST с 1392 МГц (64 ячейка) до 1418 МГц (66 ячейка). Это позволит менять максимальную частоту буста без использования АБ. Это метод для ленивых.Так же кнопочка Gpu Clock Offset +13MHz сделает то же самое, но еще и изменит TDP Base Clock/3D Base Clock (но их можно вернуть вручную на желаемые).

Temp Target/Max Temp Target- температурные лимиты, те же ползунки есть в MSI Afterburner. Ставим значение 89/91 при условии, что видеокарта не греется 80+ градусов.

Fan Control- управление оборотами вентиляторов системы охлаждения видеокарты.

RPM1x/TMP1x/PER1x- это желаемые границы оборотов (при использовании вентиляторов, регулируемых ШИМ)/ температуры/ процентов оборотов (при использовании вентиляторов, регулируемых напряжением) для регулировки вентилей. Желательно проценты подгонять методом вычисления (2600/3200=81%, а не 70, как у меня, но у меня ШИМ-регулировка).

Как это работает.

RPM13/TMP13/PER13- максимальные значения оборотов, оставляем RPM13/PER13 без изменения, а TMP13 ставим в то значение, которое считаете нужным (на моём примере 3200 оборотов в минуту(максимальное паспортное значение) при 90 градусах).

RPM11/TMP11/PER11- до этих значений вентили с нуля будут раскручиваться или же начальные значения. На картинке вышедо 35 Совентиляторы крутятся с технически минимально возможного значения до 1000об, после 35 и до 70 Со(TMP12) раскручиваются плавно до 2600 оборотов в минуту(RPM12).

Чтобы остановить вентили RPM11/TMP11/PER11 записываем как 0/0/ХХ, где ХХ - температура, до которой вентили будут стоять.

Memory Clock- частота видеопамяти. Ставим стабильное по вашему мнению значение и отнимаем 100Мгц. Для большей стабильности и уверенности.

Вкладка Voltage Table

Данная вкладка отображает напряжение для каждой частоты из таблицы частот.

Если у Вас GM200 и данная вкладка выглядит следующим образом:

то необходимо открыть вторую и третью строчки в таблице напряжений. Для этого открываем BIOS в Kepler BIOS Tweaker и двигаем выделенные ползунки в произвольное положение:

Получается примерно так:

Теперь BIOS выглядит так вMaxwell II BIOS Tweaker:

1 строка:максимально возможное напряжение (зависит от регулятора напряжения вашей видеокарты, может максимально стоять и 1281, и 1250, тут как повезет). Ставим 1281.3.

2 строка:это наше базовое напряжение для Boost Clock.

Если желаете на шаг снизить напряжение- меняете максимальное напряжение в этой строке на шаг вниз стрелками клавиатуры и зашиваете BIOS с этим напряжениеми выполняете манипуляции с рендером в GPU-Z. Полученное напряжение (это будет минус шаг от вашего стокового напряжения) пишем первым значением во вторую и третью строку.

Если не желаете на шаг снизить напряжение- ставите напряжение, найденное на этапе подготовки при помощи рендера GPU-Z в минимум и плюс один шаг в максимум. При такой настройке частоты сбрасываться под температурой НЕ БУДУТ. Максимальное напряжение в этой строке ставим на шаг больше от минимального.

3 строка:Минимальное значение, как и во второй строке, максимум - как в первой. Это как раз то напряжение, которое через MSI Afterburner мы можем регулировать с помощью ползунков.

Программный мониторинг (GPU-Z, MSI Afterburner, HWiNFO) не всегда является истиной, и отображаемое напряжение на графическом процессореможет быть больше/меньше действительного. Убедиться в этом можно с помощью мультиметра.

А теперь о том, что отображаемые шаги напряжения в том же gpu-z не являются единственно возможными. Изменение проведем на примере моей видеокарты,VID которойна стоковом BIOS - 1.150, 1.175, 1.193, 1.218 и т.д.

Для начала фиксируем напряжение 1.175 В, чтобы определить номер ячейки для этого напряжения. Для этого в первые три строки таблицы напряжений ставим следующие значения:

  1. 1.281-1.281
  2. 1.175-1.181
  3. 1.175-1.281

В итоге, получаем частоту BOOST, соответствующую59 ячейке.

Далее, переходим на 59 ячейку в таблице напряжений и сдвигаем значения таким образом, чтобы сдвинуть диапазон напряжений на нужное нам значение. Сделав таблицу, как на скриншоте, я получил VID карты, которых ранее не было. Он становится одним из диапазона для каждой ячейки, и, как видно на видео ниже, можно более точно регулировать шаг напряжения.

Стоит учесть, что на смещение напряжения на 6-10 мВ мы переходим на следующую ячейку таблицы буста и получаем +13 МГц. Можно менять шаг напряжений, делать его больше или меньше.

Вкладка Power Table

Это лимиты мощности. Нас интересуют первые 6 групп (каждая группа состоит из Min|Def|Max значений).

Перваягруппа - это TDP карты. По сути, это расчётное значение тепла, которое производитель учитывает при проектировании системы охлаждения, к лимиту мощности отношения не имеет. Ставим его таким же, как и значения 6 группы.

Вторая группа - пропускаем ее.

Третья группа - мощность слота PCI-E, ставим данную группу при учете 75 Вт максимальных.

Четвертая группа - разрешенная мощность первого разъема дополнительного питания. Ставим 75000 для 6-pin и 150000 для 8-pinPCI-E.

Пятая группа - разрешенная мощность второгоразъема дополнительного питания. Ставим 75000 для 6-pinи 150000 для 8-pinPCI-E.

Шестая группа - лимит мощности. Это то, что больше всего интересует нас. Значения ставятся в расчёте из суммы значений всех питаний видеокарты, которые мы выставляли в таблице. Эти же значения пишем в 1 группу (не обязательно).

Вкладка Boost Table

Здесь мы видим ту самую таблицу частот, из-за которой мы здесь собрались. Каждая частота здесь сопряжена с напряжением из соответствующей таблицы, привязка идет по номеру ячейки. С помощью ползунка Max Table Clock мы может сдвигать частоты с 35 по 74 ячейку как в сторону увеличения, так и в сторону уменьшения. Это аналогично действиям вMSI Afterburner. Так же здесь мы наглядно можем увидеть, что при увеличении максимальной частоты BOOST меняются и все промежуточные частоты.

Вкладка Boost States

Меняем лишь Max GPC в Р00 и Р02 на значение из 74 ячейки таблицы частот, остальное нас не касается.

Вкладка Clock States

В DDR профиля P00 ставим частоту памяти из первой вкладки (точнее - она сама тут изменится при изменении частоты там), а вот DDR в Р02 или оставляем как есть, или меняем на значение как в P00. Если оставим как есть - при использовании CUDA будет скидывать частоту до этого значения.

Редактирование таблицы частот с помощью НЕХ-редактора

Для начала выставляем нужное нам напряжение буста во второй и третьей строчках таким образом (в данном примеренапряжение для BOOST я понизил до1.175 В, но стоит помнить, что в начале статьи с помощью GPU-Z мы уже определили рабочее напряжение и частоту, поэтому устанавливаете необходимое Вам напряжение).

Во второй строчке к правому значению прибавляем один шаг, в третьей ставим максимальное значение, до которого через MSI Afterburner можно будет поднять напряжение. Стоит учесть, что при увеличении напряжения с помощьюMSI Afterburner напряжение при нагреве будет уменьшаться до минимального, прописанного во второй строчке.

Запоминаем, в какой ячейке расположена частота 3D Base Clock:

На позицию BOOST (На моем экземпляре видеокарты при 1.174 В это 59 ячейка,) ставим частоту, которая при этом напряжении стабильна (рекомендую ставить на 2-3 шага ниже, остальное регулировать в MSI Afterburner).

Далее открываем BIOS в любом HEX-редакторе (я использовал HxD)и ищем ячейку BOOST следующим образом: к номеру ячейки прибавляем 12 (на моём примере59+12=71) и переводим в hex (71d = 47h). Далее берем частоту на этой ячейке (1455.5 у меня), умножаем на 2 (1455.5*2=2911) и переводим так же в hex (2911d = 0B5Fh). Ноль не теряем. Далее ищем в НЕХ коде биоса следующую шестнадцатеричную последовательность:47 5F 0B 00 01

Где 47 - hex-код ячейки BOOST, 5F 0B - удвоенная частота младшими разрядами вперед (0B_5F), 00 01 - код команды. Влево (с 46 позиции) идут ячейки с 58 до 1 группами по 5. Берем значение частоты, которое у нас будет между базовой и частотой BOOST (я выбрал 1405 МГц), переводим в знакомый формат (1405 * 2 = 2810d= 0AFAh) и вставляем их с ячейки перед бустовой (58 в моём случае) по ту, на которой стояла базовая частота + 1 (43+1=44) и меняем их на нужное нам значение (FA 0A). После редактирования таблицы частот соотносим значения в таблице напряжений (для всех ячеек с одинаковой частотой можно ставить один диапазон напряжений), сохраняем BIOS (обязательно затем открываем его в Maxwell II BIOS Tweaker и сохраняем, чтобы переписать контрольную сумму)и прошиваем.

Можно писать любые частоты, выбирать любой шаг, но твикер может перечеркивать частоты, которые в него не забиты. Ничего страшного, это недоработка программы, Kepler BIOS Tweaker так же показывает BIOS от Maxwell.

Заключение

Разгон видеокарт имеет несколько причин. Здесь и спортивный интерес, и необходимость в нескольких дополнительных кадрах в секунду, или же просто погоня за красивыми цифрами. В данной статье мы рассмотрели небольшой пример того, как избавиться от вставляемых нам палках в колеса при разгоне. Технология Boost 2.0, на мой взгляд, ничем не отличается от программной последовательности причин и следствий, поэтому изменение условий приводит к изменению рабочего режима. С помощью HEX-редактора и изменения таблиц напряжений и частот я добивался на GTX 980 TI (с использованием воздушного охлаждения)небывалых для нее результатов - при частоте ядра в 1592 МГц и эффективной частоте видеопамяти в 8500МГц при напряжении 1.27 В в программном приложении Firestrike из пакета 3DMark достигался результат22666 графических баллов, в Firestrike Extreme при том же напряжении и 1596/8400 МГц соответственно результат был10641 графический балл.

Для игр использование данной методики тоже оказалось достаточно полезным. Например, абсолютной стабильности на частоте ядра в 1558 МГц (частота памяти при этом составляла 8400 МГц)при любых нагрузках удалось добиться на 1.199 В.

С помощью понижения рабочего напряжения видеокарту получилось сделать холодной и практически бесшумной. На напряжении 1.143 В видеокарта работала на частоте 1503 МГц.

При этом частота устанавливалась с некоторым запасом

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

Творите, подстраивайте BIOS под себя и свои нужды, но помните, что все манипуляции Вы делаете на свой страх и риск. Удачного и стабильного разгона!