[Из песочницы] Управление частотами и разгон ноутбучных видеокарт AMD Radeon в Windows

В отношении вещей я человек довольно таки консервативный, поэтому использую все «до конца», пока вещи выполняют свои функции и пытаюсь получить от них все, на что они способны. Так и с компьютерной техникой, поэтому тема «разгона» мне всегда была интересна и практиковалась на всем, что использовалось. Одним из последних приобретенных гаджетов стал ноутбук HP ProBook 4530s в комплектации Intel Core i3/AMD Radeon HD 6490M. Этот рассказ о том, что и как я сделал, чтобы видеокарта от AMD потребляла меньше и работала быстрее.imageКак известно, в ноутбуках почти все скрыто и залочено, минимум настроек железа, специфические конфигурации и т.п., то есть сделано все, чтобы пользователь не смог «покрутить» ничего лишнего. Собственно поэтому и заинтересовался сообщением в профильной теме конференции по поводу возможности разгона видеокарты. Быстро докопавшись до сути изменений системы было определено, что закладка «OverDrive» появляется от внесения в реестр бинарных данных с именем «PP_PhmSoftPowerPlayTable» Запись эта находится в настройках драйверов аппаратуры HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325–11CE-BFC1–08002BE10318}\00xx» (в зависимости от порядка нахождения и установки видеокарт xx может меняться, но там не сложно понять, присутствует текстовое обозначение видеокарт). После этого в Catalyst Control Center появилась возможность менять максимальные частоты ядра и памяти. Все работало, все разгонялось, на этом на то время и остановился.

Так сложилось, что пользуясь ноутбуком, несмотря на наличие в нем «переключаемой графики» (Switchable Graphics), предпочитаю ручное переключение видеокарт и практически всегда использую AMD. Так оно и работает «ровнее», и низкое потребление не в приоритете, поскольку ноутбук большую часть времени работы проводит подключенным к розетке. Но все равно хотелось, чтобы в экономном профиле ноутбук потреблял (и грелся) меньше. Однажды мне случайно встретилась программа редактирования бисов видеокарт Radeon — RBE — Radeon BIOS editor. Одной из ее возможностей была настройка частот для профилей PowerPlay. Однако редактирование непосредственно bios не представлялось возможным. Несмотря на то, что биос ноутбука можно «расковырять», поправить что-то и «заковырять» обратно, прошить это в мой ноутбук не представляется возможным. И тут меня осенило, а не будет ли запись «PP_PhmSoftPowerPlayTable» эквивалентной тем же таблицам, только в биосе видеокарты? И, как оказалось потом — будет!

Итак, приступим. Нам нужен биос видеокарты Radeon. Распаковываем образ обновления прошивки биос ноутбука (я делаю это при помощи Total Commander) и ищем строку «ATOMBIOSBK-ATI» в файлах, я так понимаю это торговая марка их биосов. И тут первый сюрприз: находим аж 6 разных файлов, половина из которых (судя по строкам в них попадающимся) предназначена для платформы «HP_IEC_Roxette_SeymourXT_GDDR5» (не мое), половина для «HP_IEC_Ramones_SeymourXT_GDDR5» (Ramones — название платформы ноута, SeymourXT — коденейм GPU Radeon HD 6490M).

image

Оставался вопрос, как выбрать из 3-х нужный мне файл (изначально я не знал, будут ли данные из записи «PP_PhmSoftPowerPlayTable» совпадать с данными в файле). Тестировщик AIDA64 предоставляла следующую информацию о видеокарте.

[ AMD Radeon HD6490M ]

Свойства видеоадаптера: Описание устройства — AMD Radeon HD6490MСтрока адаптера — AMD Radeon HD6490MСтрока BIOS — BR41262.S02

Меня заинтересовала «Строка BIOS» и, как оказалось, она была уникальна для каждого файла. Файл найден, ищем в нем вхождение бинарных данных из записи «PP_PhmSoftPowerPlayTable» и находим! Получается в драйвере предусмотрен режим подмены таблиц PowerPlay из биоса на запись из реестра. Теперь наша задача поправить таблицы в биосе и внести эквивалентные изменения в реестр.

image

Здесь хочу обратить внимание, откуда же берется этот самый «OverDrive». При открытии оригинального файла биос видеокарты RBE предупреждает об отсутствии записи настроек OverDrive. Сравнивая таблицы оригинальную и из реестра видим:

image

Вместо нолей появились записи максимальных допустимых частот для ядра и памяти (тут они записываются в x10kHz). После внесения соответствующих изменений в файл образа биос видим наши частоты на вкладке редактирования OverDrive в RBE, что подтверждает изыскания.

image

Немного о «PowerPlay». Это технология управления энергопотреблением видеокарты. В мобильном варианте организовано два профиля — экономичный и производительный. Они переключаются в настройках Catalyst Control Center и заданы в биосе различными сценариями.

image

imageimage

Сценарий »1» включает в себя набор из 3 состояний и используется в режиме производительность, сценарий »3» — для режима «экономия энергии». Так же есть отдельный сценарий (»2») предназначенный для режима аппаратного декодирования видео.

Собственно дальше, думаю, все понятно, меняем как душе угодно частоты сценариев, берем измененную таблицу PowerPlay и вносим ее в реестр. С частотами вроде проще, тактовый генератор встроен в чип, частоты наверняка генерируются единообразно и с этим проблем быть не должно, но раз мы опустили частоту работы GPU в некоторых состояниях, становится интересным уменьшить и его напряжение питания. Но тут, как мы понимаем, все очень вендор-специфик. Смотрим как это сделано:

image

Собственно, сам шим-контроллер TPS51511. Задумывался как 2-х уровневый, но немного доработали схему получив 4 переключаемых уровня напряжения. Управление ведется сигналами POW_SW1 и POW_SW0. А вот откуда они берутся:

image

Это чип GPU, как видим, используются линии ввода-вывода произвольного назначения (GPIO). Разбираясь в вопросе узнал, что биос видеокарты предоставляет функции установки частот GPU, памяти и вольтажа, то есть вроде как ведор-специфик аппаратная часть подкреплена программной, значит можно пробовать. Думаю, в биос есть какие-то пороги, в зависимости от которых и заданного для установки напряжения будут соответствующим образом меняться состояния выводов POW_SW1 и POW_SW0. Чтобы не разбирать и не мерить, изменилось ли напряжение на самом деле, решил оценить это по нагреву GPU в тесте в режиме экономии энергии. Оценка показала снижение температуры на 5–7 гр при тех же частотах, то есть сработало!

Вот, собственно, и весь краткий рассказ. Что касается конкретно моей видеокарты, изначально максимальные частоты GPU/память были 750/900. Архитектура ее такова, что производительность ограничивается именно GPU. При тестах прирост на 15% частоты GPU дает около 11% прироста производительности, тогда как прирост частоты памяти на те же 15% давал лишь 1% производительности. Остановился на настройках как на последних скриншотах RBE. Сам механизм OverDrive лучше не использовать, потому что при его активации промежуточные состояния частот берутся не из таблицы реестра, а из биос. Поэтому максимальные желаемые частоты были внесены в стандартные состояния. Так же в режиме высокой производительности среднее состояние сделал без переключения частоты памяти и вольтажа. Насколько я понял, переключение частоты памяти сопровождается сбросом контроллера памяти и дополнительными «телодвижениями», что ни к чему при желании максимальной производительности, ну и вольтажом лучше не клацать, дабы минимизировать всякие переходные процессы. Так же были уменьшены частоты режима декодирования видео.

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

Думаю, такая методика будет работать и на других конфигурациях, но у меня нет возможно протестировать это. Буду рад, если это кому-то интересно и кто-то попробует и поделится результатами.

© Habrahabr.ru