Nvidia Optimus + Ubuntu 16.04 + CUDA
Наконец-то удалось запустить на ноутбуке с гибридной графикой (Intel+Nvidia) аппаратное ускорение и CUDA. Причём без неудобств типа optirun — просто Unity и все приложения изначально используют аппаратное ускорение графики.
Установленная видеокарта — GeForce 540M.
Начнём с драйвера и Prime. Т. к. ранее был установлен bumblebee — для начала его нужно удалить. Bumblebee и Prime между собой несовместимы.
Принудительно включаем видеокарту
sudo tee /proc/acpi/bbswitch <<<ON
Удаляем bumblebee
sudo apt-get purge bumblebee* bbswitch-dkms
sudo apt-get autoremove
sudo apt-add-repository -r ppa:bumblebee/stable
sudo apt-get update
Ранее был протестирован и работал драйвер nvidia-340 из официального репозитория. CUDA 8.0 требует минимум nvidia-367, поэтому пришлось обновить его. Это меня сильно напрягло, т. к. ранее (только не помню, до или после обновления с 14.04 до 16.04) 361 драйвер у меня полностью положил gui, т. к. отказался инициализировать видюху, сообщив в лог, что она не поддерживается. Я, по аналогии с Windows, предположил, что поддержка моей видеокарты уже канула в лету и откатывал до 340 в консоли. Но это было раньше. То ли помогло обновление до 16.04, то ли в 367 драйвере исправлены какие-то ошибки, но на этот раз всё сразу заработало как надо.
sudo apt-get install nvidia-367 nvidia-settings nvidia-prime
На этом установка выполнена. Перезагружаем ПК и картинка на экране начинает расплываться так, что тексты, в т.ч. в консоли, становятся почти нечитаемыми... Запускаем nvidia-settings и в разделе Antialiasing Settings снимаем галку Enable FXAA. После релогина в систему картинка пришла в норму.
Проверить работу 3D-ускорения можно с помощью приложений glxgears, glxspheres, glxspheres64 — в зависимости от установленного дистрибутива. Советую сравнить fps до и после установки Prime.
Итак, Prime установлен, очередь CUDA. Кто не знает — это технология использования шейдеров видеокарты для рутинных тяжёлых рассчётов, занимающих много процессорного времени. Достоинство метода — огромное (по сравнению с CPU) количество процессоров, недостатки — относительно медленная инициализация и одинаковые алгоритмы работы каждого из них. Технология с успехом применяется, например, для обработки фотографий и видео, где распараллеливается обработка пикселей изображения или аналогичных пакетов данных, обрабатываемых по одному алгоритму.
Команда
lspci -vnn | grep VGA
у меня показала только графику Intel. Nvidia увиделась по другой маске:
lspci -vnn | grep 3D
Устройство найдено, можно продолжать.
Скачиваем дистрибутив CUDA. Установил версию 8.0 (последнюю) с оф.сайта
chmod +x ./cuda_8.0.44_linux.run
sudo ./cuda_8.0.44_linux.run
Ответы на вопросы:
Do you accept the previously read EULA?
accept/decline/quit: accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 367.48?
(y)es/(n)o/(q)uit: n
Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: y
Enter Toolkit Location
[ default is /usr/local/cuda-8.0 ]:
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y
Install the CUDA 8.0 Samples?
(y)es/(n)o/(q)uit: y
Enter CUDA Samples Location
[ default is /home/les ]: /usr/local/cuda-8.0/samples
Прописываем CUDA в системные переменные:
/etc/ld.so.conf.d/cuda.conf
export PATH=$PATH:/usr/local/cuda/bin
/etc/profile.d/cuda.sh
/usr/local/cuda/lib64
Сообщаем системе о новых библиотеках:
sudo ldconfig
CUDA 8.0 по умолчанию предполагает использование компилятора gcc 5 версии, поэтому правка /usr/local/cuda/include/host_config.h не требуется. В 8 версии это строка 119, при использовании компиляторов других версий (6 и выше, когда выйдет :-) ) её нужно закомментировать.
#error -- unsupported GNU version! gcc versions later than 5 are not supported!
На этом ПО CUDA установлено. Протестируем, скомпилировав какой-нибудь из приложенных примеров:
rsync -av /usr/local/cuda/samples .
cd ./samples/2_Graphics/simpleTexture3D/
make
cd ../../bin/x86_64/linux/release/
./simpleTexture3D
У меня компиляция с первого раза не прошла — получил сообщение об ошибке
/usr/bin/ld: cannot find -lglut
Решено командой:
sudo apt-get install freeglut3-dev
Теперь CUDA нормально работает безо всякого optirun-подобного шаманства в Darktable, Blender и, возможно, где-то ещё :-)
В blender для использования технологии CUDA нужно включить её в File — User Preferences — System — Compute Device (нужно переключить с None на CUDA) и всё работает.
Источники:
Алгоритм установки Nvidia Prime: http://help.ubuntu.ru/wiki/nvidia-prime
Алгоритм установки CUDA: http://techcave.ru/posts/63-ustanovka-cuda-7-5-na-ubuntu-16-04.html
Дополнение: https://ubuntuforums.org/showthread.php?t=1620635