Pull to refresh

Настройка Ubuntu 8.10 для кодинга под NVIDIA CUDA

Reading time 4 min
Views 9.1K
image

Решил я всерьез заняться программированием распределенных вычислений с использованием этой технологии. Не буду подробно рассказывать, что она из себя представляет, скажу только, что CUDA предназначена для проведения распределенных вычислений не на процессоре, а на чипе видеокарты, что позволяет производить неграфические вычисления с феноменальной скоростью (производительность чипа GeForce 8800 GTX при математических расчетах примерно равна производительности 180(!)-ядерного Pentium 4 1,5 ГГц). В основном это используется для решения научных задач, вроде моделирования различных сложных систем. Кстати, данную технологию использует последняя версия Adobe Photoshop (CS4) — рендеринг картинок и многие эффекты обрабатываются именно с помощью CUDA. Технология поддерживается видеокартами на чипах NVIDIA начиная с 8 серии и новее, включая, само собой, Quadro и Tesla.

Сказано — сделано. Буду настраивать свою убунту под это дело, а заодно и о своем опыте расскажу ;)

Примечание:
1. Примеры для CUDA можно благополучно писать и компилировать даже на компьютере без поддерживаемой видеокарты, однако работать они будут раз в сто медленнее, чем при ее наличии.
2. Есть известная проблема — CUDA состоит в плохих отношениях с компилятором gcc-4.3, который по умолчанию установлен в Ubuntu 8.10, поэтому приходится откатываться на gcc-4.1. Подробности ниже :)

Начнем!


Для начала установим необходимые библиотеки.
$ sudo apt-get install linux-headers-`uname -r` binutils pkg-config build-essential xserver-xorg-dev libc-dev

Самое важное здесь — libc-dev, без ее наличия ничего работать не будет.

Отлично, продолжаем! Теперь настроим компилятор. Для начала скачаем gcc и g++ нужной нам версии (это важно — их версия должна быть одинаковой). Проще всего это сделать через Synaptic, отыскав там gcc-4.1 и g++-4.1, а можно и прописать в консоли:
$ sudo apt-get install gcc-4.1 g++-4.1

Нужно настроить систему на использование нужного нам компилятора (см АПД в конце!). Делается это до смешного просто:
$ sudo rm -d /usr/bin/gcc
$ sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc
$ sudo rm -d /usr/bin/g++
$ sudo ln -s /usr/bin/g++-4.1 /usr/bin/g++


Кстати, вернуть на место «старый» компилятор легко — достаточно заменить в приведенных командах 4.1 на 4.3.
Ну и, само собой, нам нужны сами компоненты CUDA — видеодрайвер, тулкит и SDK. Берем их с родного сайта. Систему указываем 8.04, все будет прекрасно работать и так.

Поскольку мы собираемся использовать последнюю версию — выбираем пакеты для 2.1:
1. CUDA Driver — NVIDIA-Linux-x86-180.06-pkg1.run
(Спасибо товарищу Frosty — недавно вышел драйвер версии 180.22, скачать его можно, естественно, с официального сайта. Процедура установки не отличается)
2. CUDA Toolkit — cuda-linux-rel-nightly-2.1.1635-3065709.run
3. CUDA SDK code samples — cuda-sdk-linux-2.10.1126.1520-3141441.run

Сохраняем их куда-нибудь на диск (желательно, чтобы путь к ним не содержал пробелов и символов кириллицы) и устанавливаем для всех трех пакетов chmod +x. Предварительный этап завершен!

Собственно установка.


Для начала надо поставить видеодрайвер. Ставится он стандартно:
$ sudo -s -H
# /etc/init.d/gdm stop


Жмем Ctrl+Alt+F1 и логинимся. Затем:
# sh NVIDIA-Linux-x86-180.06-pkg1.run
Нам предлагают скачать precompiled headers с сервера NVIDIA. Отказываемся.
Тогда нам предлагают скомпилировать их под наше ядро. Соглашаемся.
Ждем несколько секунд — и вуаля! Драйвер установлен.
Теперь можно снова запустить X-Server:
# /etc/init.d/gdm start

Теперь нужно немного подправить один файл:
$ sudo gedit /etc/default/linux-restricted-modules-common

там нужно исправить строчку на вот такую
DISABLED_MODULES=«nvidia nvidia_legacy nvidia_new»

Сохраняемся и ребутимся. Если же X-сервер не запустился, то можно просто восстановить конфигурационный файл:
$ sudo cp /etc/X11/xorg.conf.backup /etc/X11/xorg.conf

и пересмотреть свои действия на предмет ошибки.

Отлично! Теперь установим оставшиеся два компонента:
$ sudo ./cuda-linux-rel-nightly-2.1.1635-3065709.run
$ sudo ./cuda-sdk-linux-2.10.1126.1520-3141441.run


Пути (в первом случае /usr/local/cuda и $HOME/NVIDIA_CUDA_SDK во втором) лучше оставить по умолчанию, во избежание.

Теперь немного поковыряем переменные окружения. Они в Ubuntu хранятся в /etc/environment. Нужно добавить в PATH:"/usr/local/cuda:/usr/local/cuda/bin". А потом осталось отредактировать один файл:
$ sudo gedit /etc/ld.so.conf

Добавляем в конец
# NVIDIA CUDA v2.1 support
/usr/local/cuda/lib

и набираем ldconfig:
$ sudo ldconfig

Все, можно начинать радоваться! Теперь идем в каталог SDK и пробуем собрать примеры.
$ cd ~/NVIDIA_CUDA_SDK
$ make


Кстати, не стоит забывать про параметры команды make. При компилировании кода под CUDA они могут быть такие:
— release configuration — make
— debug configuration — make dbg=1
— emurelease configuration — make emu=1
— emudebug configuration — make emu=1 dbg=1

Не забывайте, что если на вашем компьютере нету совместимой видеокарты — обязательно ставим параметр emu=1.

Вот, собственно, и все! Теперь, если все правильно собралось(если нет — перепроверьте, нужной ли версии gcc и g++), можно идти в каталог ~/NVIDIA_CUDA_SDK/bin/linux/release/ и наслаждаться примерами. Лично мне больше всего понравился fluidsGL.

Если есть какие-то недочеты — постараюсь исправить. Удачи!

АПД: Меня попросили сразу два товарища (3dm и timyr_lan) поправить способ смены дефолтного компилятора. Спасибо за поправку.
Корректнее делать вот так:
export CC=«gcc-4.1»
export CPP=«cpp-4.1»
export CXX=«g++-4.1»

Прописать в ~/.bashrc или просто выставлять эти переменные перед компиляцией CUDA кода.


АПД2: Вариант нумбер 2, даже проще:
$ gedit ~/NVIDIA_CUDA_SDK/common/common.mk
# Compilers
NVCC := $(CUDA_INSTALL_PATH)/bin/nvcc.
CXX := g++-4.1
CC := gcc-4.1
LINK := g++-4.1 -fPIC
Tags:
Hubs:
+53
Comments 66
Comments Comments 66

Articles