Как я писал в прошлый раз, решил попробовать считать белки с помощью видеокарты сервера. Всё равно ему видюха бес толку.
А видюха там Nvidia GeForce 9400, поддерживает технологию CUDA.
Сейчас на сервере запущен расчёт на CPU: две штуки, расчёт на GPU: одна штука.
Кроме этого сервер скачивает и раздаёт торренты через rtorrent на максимальной скорости соединения и можно смотреть 2 фильма по NFS. Всё без тормозов.
Под ”катом” инструкция, как настроить обсчёт заданий на GPU. Поехали.
К сожалению клиента для расчёта на видеокарте под linux нет, есть только для windows. Поэтому придётся задействовать wine.
Делал по статье NVIDIA GPU2 Linux/WINE Headless Install Guide() с поправкой на то, что у меня debian x32.
Начну с пятого пункта статьи, т.к. установленный debian уже есть.
Необходимо поставить wine.
Можно как в статье
sudo apt-get install wine
Мне не понравилось, что с wine автоматически ставится куча мусора вроде поддержки печати, сканера и т.п.
Поэтому ставим wine-bin и libwine-gl:
sudo apt-get install wine-bin libwine-gl
Далее качаем драйвера для видеокарты и cuda с сайта nvidia.
Можно взять последние стабильные и думаю, что скоро это будет наиболее правильный путь. Но пока у меня с ними не заработало. Пришлось качать CUDA Toolkit 3.0 Beta.
На всякий случай вот прямые ссылки на скачивание:
Видеодрайвер Linux 32 195.17
CUDA Toolkit for Ubuntu 9.04 32-bit
Для компиляции драйверов необходимо поставить пакеты kernel-headers и build-essential.
sudo apt-get install build-essential linux-headers-`uname -r`
Затем ставим собственно драйвера:
sudo sh cudadriver_3.0-beta1_linux_32_195.17-beta.run
sudo sh cudatoolkit_3.0-beta1_linux_32_ubuntu9.04.run
Надеюсь этот этап пройдёт без запинки. У меня здесь вечно проблемы. То версия gcc не та, то в kernel-headers файлика не хватает. То симлинки где-нибудь прописать придётся.
Создаём ссылки на библиотеки cuda:
sudo sh -c “echo ’/usr/local/cuda/lib’ > /etc/ld.so.conf.d/cuda.conf”
sudo ldconfig
Инициализируем wine:
wine notepad
Создастся каталог ~/.wine
Скачиваем обёртку для работы libcuda в wine:
wget http://www.gpu2.twomurs.com/wrapper2ndgen/2.1/cudart.dll.so -O ~/.wine/drive_c/windows/system32/cudart.dll
ln -s ~/.wine/drive_c/windows/system32/cudart.dll ~/.wine/drive_c/windows/system32/nvcuda.dll
Проверяем, что все нужные зависимости у нас есть:
ldd ~/.wine/drive_c/windows/system32/cudart.dll
Вывод будет похож на такой:
linux-gate.so.1 => (0xb78c3000)
libcudart.so.2 => /usr/local/cuda/lib/libcudart.so.2 (0xb7866000)
libwine.so.1 => /usr/lib/libwine.so.1 (0xb772a000)
libm.so.6 => /lib/libm.so.6 (0xb7703000)
libc.so.6 => /lib/libc.so.6 (0xb75bc000)
libdl.so.2 => /lib/libdl.so.2 (0xb75b8000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb75a0000)
librt.so.1 => /lib/librt.so.1 (0xb7597000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb74a6000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7488000)
/lib/ld-linux.so.2 (0xb78c4000)
Если рядом с какой-нибудь библиотекой будет стоять “not found”, значить либо какой-то из шагов пропущен, либо поможет следующий экспорт:
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH
Не помню где я это взял, но мне помог именно он.
Теперь надо создать скрипт для инициализации CUDA без запуска X-сервера:
nano -w cudaini
Вот сам скрипт:
#!/bin/bash
PATH=$PATH:/usr/local/cuda/bin
modprobe nvidia
if [ ”$?” -eq 0 ]; then
# Count the number of NVIDIA controllers found.
N3D=`/usr/bin/lspci | grep -i NVIDIA | grep “3D controller” | wc -l`
NVGA=`/usr/bin/lspci | grep -i NVIDIA | grep “VGA compatible controller” | wc -l`
N=`expr $N3D + $NVGA – 1`
for i in `seq 0 $N`; do
mknod -m 666 /dev/nvidia$i c 195 $i;
done
mknod -m 666 /dev/nvidiactl c 195 255
else
exit 1
fi
Даём скрипту права на исполнение:
chmod u+x cudainit
И запускаем:
sudo ./cudainit
Проверяем, что всё хорошо:
ls /dev/nv*
Должно вывестись следующее(для одной видеокарты):
/dev/nvidia0 /dev/nvidiactl
Можно вставить запуск cudainit в /etc/rc.local для автостарта при перезагрузке.
Пора, наконец, скачать клиент для windows:
wget Folding@home-Win32-GPU_XP-623.zip">http://www.stanford.edu/group/pandegroup/folding/release/Folding@home-Win32-GPU_XP-623.zip
И распаковать его
sudo apt-get install unzip
mkdir ~/fahgpu2
unzip Folding@home-Win32-GPU_XP-623.zip -d fahgpu2
И вот он момент истины! Запускаем!
cd ~/fahgpu2
nice wine Folding@home-Win32-GPU.exe -verbosity 9 -forcegpu nvidia_g80
Должен побежать текст по экрану.
Вывод программы останавливается и если не видно ошибок в последних строках типа
Folding@home Core Shutdown: UNSTABLE_MACHINE
то скорее всего всё хорошо.
Можно подождать минут 10–20 появится вывод
Completed 1%
Completed 2%
На GeForce 9400 один процент делается минут за 7–8 в среднем.
Итог мучений
На Atom N330 на одном ядре на 1% выполнения задания затрачивается около часа времени, на GeForce 9400 чуть менее восьми минут.
При использовании расчёта на видеокарте нагрузка на процессор не превышает 15% (htop показывает 4 процессора = 2 ядра * HyperThreading, нагрузка только на один).