GeForce GTX 970 как средство для реализации GPGPU или майнинг эфира на GTX 970 :)

Сразу хочу оговориться, что на тандеме GTX 970 мы решаем именно GPGPU задачи общего назначения, такие как анализ безопасности WIFI сетей, проверка стойкости паролей и пр. Майнинг не является приоритетным и опыта в нём практически нет, но как показала практика, для решения некоторых проблем с производительностью в GPGPU нужно предпринять ровно те же самые действия, которые требуются для получения 20+ MHash при майнинге Ethereum.

Сразу хочется сделать несколько оговорок:

1. Я не знаю физики проблемы, которая требует наличия монитора или эмулятора монитора при майнинге. На моих задачах монитор не нужен и производительность от этого не страдает.
2. Всё описанное ниже справедливо для системы с одной картой, либо несколькими ИДЕНТИЧНЫМИ картами GTX 970. В моём случае это три карты Zotac ZT-90105-10P, установленные в одном ПК.
3. Картиночек будет мало, зато будут вставки кода 🙂

И так, поводом для написания данной заметки стал поголовный переход рабочей инфраструктуры на Windows Server 2016 и Windows 10 и соотвтетсвенно WDDM 2.x. С некоторых пор наличие прикладного софта для под Windows перестало быть нерешаемой проблемой, а поколение программистов на форте, которое писало только под никсы постепенно уходит, так что и цифромолы переезжают на Windows. С переходом на Win10 мы получили на машине, которая ранее демонстрировала производительность, эквивалентную 50 MHash (ETH), что-то типа 15-20 MHash. Причем, производительность плавала от приложения к приложению. Где-то всё было хорошо, а где-то падение было катастрофическим — от трех раз до десяти!

Как оказалось, всё дело было действительно в WDDM 2.x и усугублялось всё тем, что наши программисты не были готовы портировать свой софт под новые реалии, к тому же, на бытовых картах следующего поколения производительность была в норме. Ну а нам, админам-железячникам от сохи в очередной раз по результатам обновления пришлось городить легаси систему.

Программной основой легаси системы стала Windows 7 x64 Ent SP1. Это объяснялось наличием сервера активации в сети конторы и зеркалом WSUS, но, думаю, всё это заработает и на прошке… ну а теперь, собственно, решение проблемы:

Win7 + GeForce Driver 382.53 (это последний на данный момент драйвер, разницы с рекомендованным многими 350.12 мы не заметили). Производительность как раньше. Т.е. где-то 16-17 MHash на нос и под 50 на коробку. Не плохо, но хочется большего. Так как у нас теперь Windows, ставим MSI AB и пытаемся гнать, помятуя о том, что GTX 970 сам по себе гонится не очень, а у нас еще и бловерные версии от Zotac на печатке от GTX 760 🙂 В общем, +150 по чипу все карточки взяли легко, а вот с памятью каменный цветок не вышел. Хотя под Linux карточки разгонялись (вернее, переключались в режим максимальной производительности) легко и без проблем.

Небольшой поиск показал, что привычный по нниксам nvidia-smi присутствует и в Windows и работает совершенно так же. На этом хотелось бы остановиться чуть подробнее. Все дальнейшие действия описываются с учетом того, что они производятся из-под ллокального админа, UAC отключен, а консоль NTVDM запущена от имени и с правами администратора!

И так, консоль открыта, нужно перейти в директорию с необходимой нам оснасткой:

cd C:\Program Files\NVIDIA Corporation\NVSMI

На самом деле, nvidia-smi — это достаточно простой и одновременно мощный инструмент, если читатель имеет достаточные навыки, можно дать команду nvidia-smi -h и быть может, даже не читать ничего дальше…

И так, первым делом нужно убедиться что у нас все карточки в системе есть и всё будет работать так, как ожидается:

nvidia-smi.exe -L

Эта команда выведет список карт, которые доступны для управления. Нумеруется он с нуля. Т.е. если карт три, то они соответственно будут иметь номера 0, 1 и 2. Выше, я оговаривался что карты должны быть идентичными, но это не обязательно. В принципе, каждую карту можно настроить отдельно, но для наших задач нужны идентичные треды. Не знаю, может в майнинге всё иначе и лишние 5-10 мегагерц на какой-то из карт будут не лишними.

После того как мы увидели список карт и он нас удовлетворил, можно еще поиграть в разглядывание списков через опрос GPU, но мы от этого воздержимся и перейдём непосредственно к увеличению производительности за счет переключения режима процесса COMPUTING и формального разгона памяти.
Имеющиеся карты из коробки показывают частоту памяти около 6 ГГц и не дают разогнать память через MSI AB ни на мегагерц. При попытке применить изменения, ползунок смещается на стандартное положение. Ну что, раз MSI AB не смог, будем гнать как в Linux:

nvidia-smi -q -d SUPPORTED_CLOCKS

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

nvidia-smi -q -d SUPPORTED_CLOCKS | more

Что покажет нам ровно столько, сколько войдёт на экран, а большего и не нужно. Если первые две строки частот выглядят так:

Memory: 3505
Graphics: 1392

Значит всё верно. Можно жать Ctrl+C, дальнейший вывод команды не нужен. На подавляющем большинстве рефов и большинстве не рефов цифры будут именно такие. Собственно, частота 3505 MHz — это та частота, с которой память сможет работать штатно. 1392 MHz — частота GPU (SM!). В общем, не плохо для GTX 970.

Для установки частоты на все адаптеры в системе нужно дать команду:

nvidia-smi -ac 3505,1392

Мониторить изменения можно в том же MSI AB, он покажет изменение частот, а можно в приложении, которым решается какая-то GPGPU задача. Данная команда применит указанные частоты ко всем адаптерам в системе! Такую команду можно вписать куда-нибудь в автозагрузку, а майнеры могут засунуть её прямо в «батник», предварительно дав команду cd C:\Program Files\NVIDIA Corporation\NVSMI или прописав этот путь в %PATH%.

Если карточек в системе несколько и они сильно разные, то помятуя о результатах вызова программы с ключом -L необходимо последовательно дать команды для каждой карточки. Если какая-то из карт не нуждается в таком разгоне, либо не поддерживается оснасткой, её можно игнорировать. И так, для первой в списке карты команда будет выглядеть так:

nvidia-smi -i 0 -ac 3505,1392

Для третьей так:

nvidia-smi -i 2 -ac 3505,1392

После этого нехитрого вмешательства система прирастает кефирными мегахэшами с 15-17 до 20, а коробка в целом до 60. Аналогичную производительность показывает машина с двумя картами GTX 1070 с легким разгоном.

Параметр -c хотелось бы оставить на самостоятельное изучение. У нас он установлен в значение «1», но для большинства читателей это не имеет значения (проверяется командой nvidia-smi.exe -q -d COMPUTE).

В заключении хотелось бы еще раз сказать о том, что игрища со старыми драйврами и старым системным ПО PhysX в Windows 10/Server 2016 не дают эффекта, а ключ -dm оснастки nvidia-smi не даёт возможности перевести драйвер в WDDM 1.x.

ну и несколько полезных команд:

nvidia-smi.exe -q -d TEMPERATURE

или даже так:

nvidia-smi.exe -q -d TEMPERATURE | findstr Current
nvidia-smi.exe -q -d POWER

И еще раз:

nvidia-smi -h

 

P.S. Система с двумя GTX 1070 у нас решает ту же задачу что и с тремя GTX 970. Просто звезды встали так что одну и ту же задачу должны синхронно решать две разные сущности для того, чтобы была возможность формально сверить результат. Система с тремя GTX970 греется и шумит сильнее, хотя, дело быть может в различии систем охлаждения. Помещение одно, кондиционер один, но 1070 показывают около 40 градусов, а 970 около 60 градусов. Кондиционер давит +16. Источник питания и там и там на 700W. Так же рискну предположить что 1455 по чипу на воздухе в 24/7 даст далеко не каждая GTX 970. У нас же, напомню, воздух холодный.

[UPD]

Попробовали эфир на одной карте. С «холодным воздухом» достаточно легко удалось взять 1500 MHz по ядру и 4000 MHz по памяти, только вот скорость в MHash перестала расти при 1400 MHz по ядру и 3700 MHz по памяти. Что стало тому причиной, программная обвязка, скорость оперативной памяти или процессора, или что-то еще — не понятно. Но, картинка красивая…


 
А прыгнуть выше 23 Mhash не удаётся даже при таких частотах. Дальше разгонять уже не интересно.

Результат на картинке выше в общем стабилен (для одной карты). Разгон по чипу на треть и по памяти на четверть (до 1600 MHz по ядру и 4300 MHz по памяти) находится уже на грани стабильности системы, а разница в производительности между такими частотами и базовыми — менее 10%. Так что, nvidia-smi — наше всё, а MSI AB и GPU-Z — от лукавого 😉

Запись опубликована в рубрике Железки с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *