NVidia CUDA. Настройка среды разработки на базе Arch Linux



Compute Unified Device Architecture, дословно – унифицированная вычислительная архитектура устройств – архитектура (совокупность программных и аппаратных средств), позволяющая производить на GPU вычисления общего назначения, при этом GPU фактически выступает в роли мощного сопроцессора.

Эта технология заинтересовала меня для применения при разработке вычислительного комплекса моделирования движения тяжелых грузовых поездов. Изначально проект развивался на базе OC Windows 7 Ultimate и MS Visual Studio 2010 в качестве средства разработки.

Однако желание избавить проект от использования проприетарного ПО (мало доступного в академической среде, и доставаемого сами знаете как…) подвигла меня на поиск путей создания бесплатной платформы разработки, благо NVidia предоставляет Toolkit и SDK безвозмездно. Кстати вышел резил-кандидат CUDA 5.0 со специализированной средой разработки, но доступный для Windows, Mac OS и популярных дистрибутивов Linux, к коим арч не совсем относится.

Тем не менее засучив рукава я приступил к настройке своего арча для работы с CUDA. И, о чудо, драйвера и тулкиты оказались доступны в официальных репозиториях арча! Радостно мяукнув приступил к…

1. Установка CUDA SDK и Toolkit

Если у Вас не установлены средства разработки на C/C++, то их надо установить

# pacman -S gcc glibc make

Ставим драйвера на видеокарту, если они у Вас ещё не установлены

# pacman -S nvidia

Затем

# pacman -S cuda-sdk cuda-toolkit

Собственно и всё, необходимый набор инструментария у вас уже имеется. Лежит все это богатство по адресу /opt/cuda-sdk/ и /opt/cuda-toolkit/. Мне лично было интересно проверить работоспособность CUDA под линуксом на моей видеокарте (GForce 580 GTX) поэтому я сначала собрал все примеры из SDK. Делаем это так

$ cd /opt/cuda-sdk/C

переходим в каталог с исходниками примеров. Собираем их командой

# make

Теперь переходим в /opt/cuda-sdk/C/bin/linux/release/ и любуемся примерами



Сразу предупреждаю, большинство примеров там чисто вычислительные без визуализации, так что не удивляйтесь если сразу не найдете именно этот - smokeParticles. Что ж, полюбовались, идем дальше

2. Выбор среды разработки. Настройка Netbeans 7.2 для работы с CUDA

Честно говоря сначала мой выбор пал на Eclipse IDE, поскольку именно в этой среде я занимался разработкой icq-клиента на Java, привык к ней основательно, да и официальная IDE, релиз коей не за горами основывается именно на эклипсе.

Однако тут меня ждало разочарование - найти толкового описания настройки Eclipse Juno для работы с CUDA я не нашел, предыдущие версии ставить не захотел, а разница в окнах настройки у разных версий эклипса очень ощутимая. Попрыгав с бубном я решил обратить свой взор к Netbeans от “кровавого” Oralce

# pacman -S netbeans

Запускаем Netbeans (Все приложения -> Разработка -> Netbeans - это в “кедах”).

Теперь необходимо настроить среду на сборку CUDA-проектов. Для их сборки модулей содержащих код работающий на GPU (файлы с расширением *.cu) используется компилятор nvcc, входящие в состав CUDA Toolkit. По сути он является оберткой над gcc - код GPU собирает сам, код CPU передает на съедение gcc.

Изначально Netbeans не настроен на работу с конкретным языком программирования, поэтому идем в пункт меню “Сервис -> Подключаемые модули -> Установленные”, в котором выбираем модуль C/C++ и жмем “Активировать”



Перезапускаем среду, идем в “Сервис -> Параметры”. В появившемся окне выбираем C/C++ и на нескольких вкладках последовательно задаем параметры.

В писке “Набор средств” жмем “Добавить”. Задаем базовый каталог - тот в котором будут хранится ваши проекты, семейство набора средств (я поставил GNU) имя набора средств CUDA (на скрине CUDA1, ибо у меня CUDA уже есть, а для иллюстрации удалять не хотелось)



Задаем пути к компилятору C/C++



Задаем дополнительные каталоги заголовочных файлов для компиляторов C и C++



Добавить расширение *.cu в список поддерживаемых расширений




В принципе всё готово для создания проектов с использованием CUDA. Однако опционально можно настроить подсветку синтаксиса в Netbeans, вернее отключить некоторые настройки “Сервис -> Параметры -> Редактор -> Выделение”. Выбираем язык “Исходные файлы на C/C++” и снимаем галочки “Выделить ошибки синтаксиса”, “Выделить неразрешенные файлы include” и “Выделить неразрешенные идентификаторы”.



Для чего это делаеть? Дело в том, что разработка для CUDA ведется не на С/С++ а на его расширении CUDA C, содержащем ключевые слова и идентификаторы не входящие в стандарт. Редактор безбожно покрывается красными волнистыми линиями подчеркивания “неправильных слов” и пестрит иконками восклицательных знаков ошибок, хотя проект отлично собирается и выполняется. Такая настройка избавит Вас от такого раздражителя, а ошибки компиляции всё равно будут подсвечиваться в исходном коде при щелчке по сообщению об ошибке в логе компиляции.

Теперь все готово для создания первого проекта. Идем в меню “Файл -> Создать проект”. В категориях выбираем C/C++, в проектах “Приложение С/С++”. Жмем “Далее”.



Мы будем создавать пустой проект, поэтому в настройках снимаем галку “Создать главный файл проекта”, задаем имя проекта hello_CUDA, выбираем набор средств “CUDA (Набор компиляторв GNU)”



Жмем готово, и видим появившееся слева дерево проекта, которое пока ничего не содержит.



Щелкаем правой клавишей по папке “Исходные файлы” и в меню выбираем “Новый -> Исходный файл на языке C++”. В появившемся окне задаем имя и расширение файла *.cu. Жмем “Готово” и переходим в редактор кода, в котором набираем такой текст

#include  <cuda.h>
#include  <stdio.h>
__host__ int main(void)
{
    printf("Hello! I can work with NVidia CUDA :)\n");   
    return 0;
}


Далее щелкаем правой кнопкой по имени проекта в дереве и в меню выбираем “Свойства”. В открывшемся окне выбираем вкладку “Собрать” и снимаем галочку “Включить проверку зависимостей”



После этого жмем F11 - собираем проект. Сообщение

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Вход в каталог `/home/maisvendoo/netbeans/hello_CUDA'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/CUDA-Linux-x86/hello_cuda
make[2]: Вход в каталог `/home/maisvendoo/netbeans/hello_CUDA'
mkdir -p build/Debug/CUDA-Linux-x86/_ext/1706347718
nvcc    -c -g -o build/Debug/CUDA-Linux-x86/_ext/1706347718/hello.o /home/maisvendoo/netbeans/hello_CUDA/hello.cu
mkdir -p dist/Debug/CUDA-Linux-x86
nvcc     -o dist/Debug/CUDA-Linux-x86/hello_cuda build/Debug/CUDA-Linux-x86/_ext/1706347718/hello.o  
make[2]: Выход из каталога `/home/maisvendoo/netbeans/hello_CUDA'
make[1]: Выход из каталога `/home/maisvendoo/netbeans/hello_CUDA'
СОБРАТЬ SUCCESSFUL (общее время: 2s)

означает что проект успешно собран. Жмем F6 для запуска.

Hello! I can work with NVidia CUDA :)
ВЫПОЛНЕНИЕ SUCCESSFUL (общее время: 45ms)

Данный код выполнялся конечно на CPU, о чем говорит директива __host__ в описании функции main(). Так что данный пример иллюстрирует лишь пригодность Netbeans в качестве IDE для разработки для NVidia CUDA. Дальнейшее впереди… :)

Удачного cud-инга! ;)
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
спасибо скопировал, одно но , в описании идет аналогия с мощным процессором, тут мягко говоря притянуто за уши. Да эта фабрика с китайцами быстро пошьет тебе кеды, но вот сбока пылесоса или ракетного двигателя от увеличения “массы” китайцев быстрее не пойдет, но это все к теме не шибко. Давно хотел посмотреть на реализацию на линуксах, но все руки не доходят. благодарен за расшаривание опыта, (еще и на арче сразу) .
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
sleepycat, Я наивно полагал что все знают присказку “одна женщина может выносить ребенка в течении девяти месяцев, но это не означает что девять женщин справятся с этим за один месяц”
Да пребудет с вами знание ip адреса
я просто когда прочел на свою голову текста на вопрос “о, что это за новый лейбл на коробке гр. карт ”cuda“” подумал по наивности, что это все равно, что поставить на мать второй процессор. И вроде в игре есть видео , а в жизни вторая голова у моего капутера. Слаба богу я не успел собрать сумму на хорошую видюху как в очередной статье один добрый человек расставил точки над И. Оттуда я и взял себе на вооружения пример с китайской фабрикой(не мои перлы), но теперь у меня будет две словесной аналогии. Как говорил один из моих шефов “я как бы знал, но как бы не смог вспомнить” )))
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
В задачах которые хорошо распараллеливаются (например решение СЛАУ) CUDA реально дает прирост производительности. Проверял на той же задаче с поездом расчет ускорений для 2 и 200 вагонов занимает одинаковое время… Только там возникли другие проблемы с реализацией, которые надо решать…

Приятно удивило наличие всего необходимого ПО в репозиториях арча. В той же винде с установкой куды и настройкой среды надо повозится
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
 
Зарегистрироваться или войдите чтобы оставить сообщение.