
Компиляция майнера xmrig-nvidia в Linux для видеокарт, поддерживающих старые версии CUDA
Относительно старые видеокарты Nvidia, например, GeForce GT770, имеют неплохую теоретическую производительность при проведении операций с плавающей запятой (у GT770 она равна 138.9 GFLOPS).
Это немного меньше, чем GeForce GTX 1660 SUPER (157.1 GFLOPS) и больше, чем у Nvidia GTX 1066 (136.7 GFLOPS).
В связи с этим видеокарты уровня GeForce GT770 теоретически должны демонстрировать схожий с GTX 1660S/ GTX 1060 хешрейт на алгоритмах, использующих до 2 GB VRAM.
Чтобы добиться высокой производительности на старых картах, нужно самостоятельно компилировать современные майнеры с включением поддержки технологии CUDA-вычислений старых версий.
Так как большинство майнеров выпускается с закрытыми исходными кодами, то выбор доступных программ не столь велик, но все же позволяет несколько расширить ассортимент доступных алгоритмов и «поиграться» с майнингом на старых видеокартах даже в современных условиях.
Постепенное отсеивание старых видеокарт производителями понятно и объясняется их стремлением продать побольше новой продукции. Отсутствие поддержки старых видеокарт в майнерах может быть связано с ленью разработчиков, а также получением «поощрения» от производителей компьютерного железа.
Ищущий обрящет…
При желании каждый может произвести нехитрые манипуляции и скомпилировать майнер с открытым исходным кодом под старую версию CUDA.
В настоящее время такая манипуляция возможна для майнера xmrig и его клонов.
В статье рассматривается процесс компиляции майнера xmrig-nvidia 2.14.5 с включением поддержки технологии CUDA 8.0 (compute capability 3.0).
Как скомпилировать майнер для видеокарт, поддерживающих устаревшую версию технологии CUDA?
Для сборки майнера xmrig-nvidia (а также любой другой программы для видеокарт Nvidia) нужно:
- установить нужную версию CUDA SDK на компьютер;
- скачать исходный код майнера;
- установить нужные пакеты в системе;
- сконфигурировать код программы нужным образом и собрать из него исполняемый файл майнера.
Некоторые особенности установки CUDA SDK
При выборе CUDA SDK нужно учитывать, что старые видеокарты требуют использования пакета SDK совместимого с установленными драйверами, а также учета их compute capability, например:
- версии CUDA 9 (включительно) и выше не поддерживают вычисления на видеокартах Nvidia с архитектурой Fermi. Для них нужно устанавливать восьмую версию CUDA, которая в Linux использует драйвера 375.26;
- видеокарты с архитектурой Kepler поддерживаются до версии CUDA SDK 10.2 включительно (Linux драйвера от 440.33 включительно до 450.36.06 исключительно);
- CUDA 7.5 и ниже не поддерживает видеокарты с архитектурой Pascal (GTX1000-й серии в Linux поддерживаются только начиная с драйверов 352.31).
Для компиляции и запуска майнинга на видеокартах типа Nvidia GeForce GT770 (архитектура Kepler) нужно использовать версию CUDA SDK не новее 10.2, а также драйвера до версии 450.36.06 исключительно, но новее 440.33.
Установка CUDA SDK 10.2 и патчей делается отсюда (Samples при установке ставить не обязательно).
Если планируется использование видеокарт с ядром Fermi, то нужно использовать CUDA SDK не новее CUDA SDK 8.0, а также драйвера версий от 375.26 (включительно) до 375.26 (исключительно).
Установка CUDA SDK 8.0 делается отсюда.
При инсталляции набора инструментов разработчика CUDA обычно производится и установка подходящих драйверов (они входят в состав SDK). Если используется установочный скрипт с официального сайта Nvidia, то установку драйвера нужно делать при отключенном x-сервере, из консоли TTY.
Если в системе уже установлены драйвера Nvidia, то при установке CUDA SDK нужно снять выделение, отвечающее за установку базовой версии драйвера.
В новой системе предварительно нужно отключить Nouveau kernel driver, иначе установка с помощью скрипта будет завершаться с ошибкой.
Отключение драйвера Nouveau делается следующими действиями:
создается файл blacklist-nouveau.conf, например, командой
sudo nano /etc/modprobe.d/blacklist-nouveau.conf
в него вносится текст:
blacklist nouveau options nouveau modeset=0
сохраняются изменения, обновляется ядро командой sudo update-initramfs -u
и выполняется перезагрузка
После установки набора инструментов разработчика CUDA нужной версии, необходимо инсталлировать патчи, исправляющие ошибки и улучшающие быстродействие SDK (они находятся на той же странице, где и основной пакет установки).
Сборка майнера xmrig-nvidia из исходного кода
Компиляция майнера xmrig-nvidia производится из исходного кода (скачивается с Github) путем последовательного выполнения команд по установке необходимых пакетов и сборке майнера.
Нужные пакеты устанавливаются командой:
sudo apt-get install git build-essential cmake libuv1-dev nvidia-cuda-dev nvidia-cuda-toolkit libmicrohttpd-dev libssl-dev
Скачивание кода майнера произвордится командой:
git clone https://github.com/xmrig/xmrig-nvidia.git
Затем производится переход в папку со скачанными исходниками, создается папка build:
cd xmrig-nvidia && mkdir build && cd build
После этого запускается генерация файлов управления сборкой на основе директив, прописанных в CmakeLists.txt:
cmake .. -DCUDA_ARCH="20;30;50;60" -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-8.0
Перед запуском команды cmake в строке параметров нужно прописать уточняющие опции для компиляции майнера.
В качестве числовых значений переменной DCUDA_ARCH= нужно указать версии архитектуры видеокарт, которые будут поддерживаться майнером в соответствии с compute capability видеокарт (подробнее о соответствии версий CUDA и драйверов в статье «О технологии многопотоковых вычислений CUDA в видеокартах компании Nvidia»).
Кроме того, для конфигурирования майнера под свои нужды можно использовать следующие параметры команды cmake:
- -DWITH_AEON=OFF (выключение поддержки CryptoNight-Lite);
- -DWITH_HTTPD=OFF (сборка майнера без встроенного http сервера и API);
- -DUV_LIBRARY=/usr/lib/x86_64-linux-gnu/libuv.a (использование статической версии libuv);
- -DCUDA_TOOLKIT_ROOT_DIR= (путь к CUDA SDK на компьютере, на котором производится сборка майнера, для CUDA SDK 8.0 это /usr/local/cuda-8.0).
При успешном выполнении команды cmake появятся строки:
-- Found CUDA: /usr/local/cuda-8.0 (found suitable version "8.0", minimum required is "8.0") -- Found NVML: /usr/local/cuda-8.0/include -- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libssl.so;/usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.0.2g") -- The ASM compiler identification is GNU -- Found assembler: /usr/bin/cc -- Looking for syslog.h -- Looking for syslog.h - found -- Found MHD: /usr/lib/x86_64-linux-gnu/libmicrohttpd.so -- Configuring done -- Generating done -- Build files have been written to: путь
После этого, для сборки манера нужно выполнить команду:
make
Сборка майнера может занять довольно продолжительное время, особенно в случае недостаточной мощности центрального процессора.
По окончанию сборки появится сообщение:
[100%] Linking CXX executable xmrig-nvidia [100%] Built target xmrig-nvidia

Готовый файл майнера будет находиться в каталоге build:

При использовании старых видеокарт Nvidia особый интерес вызывает майнинг на алгоритме CN_GPU, так как GPU с поддержкой многопотоковых вычислений CUDA обычно неплохо себя показывают на этом algo и некоторых других разновидностях Cryptonight.
Пример скрипта для запуска майнера xmrig-nvidia в Linux для майнинга на алгоритме cn_haven на видеокарте Nvidia:
#!/bin/sh export GPU_FORCE_64BIT_PTR=0 export GPU_MAX_HEAP_SIZE=100 export GPU_USE_SYNC_OBJECTS=1 export GPU_MAX_ALLOC_PERCENT=100 export GPU_SINGLE_ALLOC_PERCENT=100 sudo ./xmrig-nvidia -a cryptonight-heavy/xhv -o cryptonight_haven.eu.mine.zergpool.com:4452 -u wallet -p c=BTC,worker,refcode=81de238596774683dd427a9d57bae6af -k --donate-level=0 --keepalive --cuda-bfactor=8 sleep 10
Успешная работа видеокарты Nvidia GT770 в самостоятельно скомпилированном майнере xmrig-nvidia с поддержкой CUDA 8.0 в xubuntu 16.04, драйвер 384.130 (майнинг на алгоритме cn_haven):

На алгоритме CN_GPU майнер xmrig-nvidia с поддержкой CUDA 8.0 на Nvidia GT770 выдает 270 h/s (к видеокарте подключен монитор):

Хотя достигнутые результаты не столь впечатляющи, но все же доставляют удовлетворение благодаря успешной сборке майнера, способного работать с древними GPU.
Благодаря установке CUDA SDK 8.0 на компьютере можно самостоятельно компилировать и другие майнеры с открытым исходным кодом, например, verthashminer, ethminer, xmrig, XMR-Stack, ccminer и другие.


