CUDA, Visual Studio 2010 и Visual Assist X — настройка
Всем привет. С недавних пор я увлёкся программированием с использованием CUDA. Скажу сразу: программист я пока далеко не профессиональный, поэтому чего-то супер-пупер крутого от меня ожидать не стоит. Недавно, как, думаю, известно интересующимся данной темой людям, вышла новая версия CUDA Toolkit – 4.0. В ней, среди всего прочего, добавлена поддержка Visual Studio 2010. Я, будучи яростным фанатиком, решил сразу перейти на новую версию. Однако у меня возникли некоторые трудности, и, честно говоря, всё настроить получилось далеко не сразу. Так вот. Эта статья посвящена новичкам, желающим начать изучение данной технологии, или же просто тем, у кого возникли проблемы с настройкой. Если Вы в первый раз слышите слово CUDA, то лучше поищите сначала по нету, а так же на ixbt.com. Большую часть информации я брал из статей и мануалов по CUDA. На «чистое» авторство не претендую, но материал я перевёл (с моим то знанием английского ;)), скомпилировал и что-то добавил. Приступим.
Подготовка
Ну для начала проверьте есть ли у Вас нужная видеокарта. Вот тут есть список: http://www.nvidia.com/object/cuda_gpus.html Если не знаете какая видеокарта у Вас установлена, то… кхм… я думаю дальше читать не стоит. Если же такой видеокарты у вас нет, то можете порыться в шкафу. А вдруг найдёте парочку Tesla c2070 =)
Теперь всё скачаем и соберём в кучу. Нам понадобится:
1) CUDA Developer Drivers for WinVista and Win7 (я рассматривал настройку под семёрку, т.к. имхо XP уже не актуальна). Конечно, Вам придётся выбрать разрядность своей системы. Если же у вас ноутбук с технологией Optimus, желательно качать драйвер для ноутбуков. Думаю с этим проблем возникнуть не должно. Вот ссылка на страницу с этим, а также многим другим добром, которое нам пригодится: http://developer.nvidia.com/cuda-toolkit-40. Скачали дрова, поставили, идём дальше.
2) CUDA Toolkit 4.0. Непосредственно компилятор, необходимые библиотеки, Visual Profiler и некоторые другие плюшки. Скачали (ссылка выше), запустили установщик. В процессе установки Вам будет предложено выбрать папку, куда всё это добро будет свалено (я ничего не менял), а так же зарегистрироваться свой продукт. Для этого введите реальный email-адрес. По умолчанию вас подпишут на рассылку (что точно рассылать будут, я не интересовался). Лично я отказался от этой затеи (кто знает что из-за бугра придёт). Подтверждаем наше желание продолжить и ждём. Тут всё тоже должно пойти без проблем.
3) GPU Computing SDK code samples. Примеры кода. Честно говоря, этот шаг можно пропустить, особенно если Вы спешите на просмотр своего любимого сериала.
4) CUDA Tools SDK. Я только что заметил эту маленькую ссылку, скачал и не нашёл ничего интересного (пока). Опять же по желанию.
5) Parallel Nsight. Для 3.2 я не пользовался (не знаю почему…), а для 4.0 дяденьки из Nvidia не соизволили выложить в открытый доступ. Ждём их милости, ибо это очень полезная штука. Пока пропустим.
6) Visual Studio 2010. Моя любимая среда разработки, хотя уж очень она тяжёлая. Тут всё просто.
7) Visual Assist X 10.6. Очень полезная штука. После её установки и настройки умный VA будет читать ваши мысли и сам записывать ваш код, который будет переливаться всеми цветами радуги под стать вашим мыслям. Хотя это я малость приукрасил. Программка не бесплатная и обойдётся Вам этак в штук 50 убитых енотов. Но если «вырезано цензурой»… Скачиваем, ставим. С установкой не должно возникнуть проблем. Ах да, вот ссылка на официальный сайт: http://www.wholetomato.com/
Настройка
Ну вот, собственно и весь наш список. Теперь приступим непосредственно к настройке. Мануал от Nvidia настойчиво рекомендует проверить работоспособность компилятора nvcc и вашей видеокарты. Зайдите в командную строку (Пуск -> стандартные -> выполнить -> вводим cmd) и впишите «nvcc –V». Должна высветиться версия компилятора. Теперь проверим вашу видюшку. Для этого направимся по адресу C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK\C\bin\win32\Release. Нет такого адреса? Меня чур не пинать – так написали разрабы. У меня адрес такой: C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\bin\win64\Release. В этой замечательной папке лежит не менее замечательная программка bandwidthTest, которую мы с радостью и запустим. Должна появиться консоль, а в ней много буковок и циферок. Главное, чтобы в конце была надпись PASSED. Есть? Успех! Теперь мы можем рассчитывать на нашего железного коня.
Вот примерно такая картина маслом должна появиться у вас после запуска bandwidthTest.
В этой же папке лежит множество других программ, запустив которые, Вы сможете лицезреть возможности технологии CUDA.
Перейдём к настройке нашей среды разработки. Допустим Вы установили VS и VA. Сейчас мы настроим их для совместной работы с CUDA. Идём в папку, которая у меня называется C:\Documents and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\doc\syntax_highlighting\visual_studio_8, и читаем readme.txt. Нихрена не понятно? Правильно! В топку этот английский. В таком случае берём файлик usertype.dat и тащим его (конечно, лучше скопировать) в папку C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE. Затем запускаем Visual Studio. Идём в «Сервис -> Параметры» (Tools > Options), выбираем «Проекты и решения -> параметры проекта VC++» (Solutions > VC++ Project Settings), ищем строчку «включаемые расширения» и добавляем туда расширения .cu и .cu.h. Как нетрудно догадаться, это расширения файлов с кодом. Должно получиться что-то вроде этого:
Сейчас лучше VS закрыть.
Visual Assist
Теперь идём в святую святых – реестр (Пуск -> стандартные -> выполнить -> вводим regedit). Идём по адресу HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet10 и видим чудо! Хотя опять и привираю… Дописываем в строки ExtHeader и ExtSource расширения .cu.h и .cu соответственно. Должна получиться следующая картина:
Пока regedit лучше не закрывать. Он нам может ещё пригодиться.
Опять запускаем VS, но на сей раз настраиваем наш VA (VAssistX > Visual Assist X Options). Идём в «Projects -> C/C++» Directories. Меняем «Platform» с текущей на «custom» и настраиваем директории. Нажимаем «New» (папочка со звёздочкой =)) и вписываем туда следующие папки:
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\common\inc
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\CUDALibraries\common\inc
Это прописано у меня. Ваш случай может отличаться, в зависимости от того, куда вы установили SDK. Так. Это у нас были «Stable include files». Теперь меняем в верхнем правом углу окна на «Source files» и добавляем туда следующие строки:
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\common\src
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\src
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\CUDALibraries\src
Скорее всего так много может не понадобиться, но на всякий случай…
Теперь идём в «Performance» (видно на картинке выше) и нажимаем Rebuild Symbol Databases. Не забываем нажать «Применить» и «ОК». Сейчас нужно всё это счастье перезапустить.
Потом, когда Вы откроете файл с расширение .cu, текст должен быть раскрашен, а ошибки должны подсвечиваться. Если этого нет, то, скорее всего, Вы сделали что-то не так. Вероятно, нужно просто проверить реестр. У меня записи стирались несколько раз, и приходилось прописывать опять.
Финал
Создадим новый проект в VS. Файл -> создать -> проект. Выбираем «консольное приложение Win32, называем наш проект, например «SKYNET» или «TRON». В опциях («Дополнительные параметры») убираем галку с «Предварительно скомпилированный заголовок» и ставим галку на «Пустой проект». Больше у вас галок быть не должно. Нажимаем «готово» и… Ничего не взорвалось? Вам повезло… Ну что ж, продолжим.
Тут вы можете создать файл blabla.cu и проверить работоспособность VA.
Создали? Отлично. Он нам сейчас и понадобится. Нажимаем на него в обозревателе решений правой кнопкой и идём в «свойства». «Свойства конфигурации -> общие -> тип элемента» и выбираем CUDA C/C++. Применяем и идём в свойства проекта («проект -> cвойства» — внезапно, не правда ли? =)). Не забудьте снять выделение с вашего blabla файла. Свойства конфигурации -> Каталоги VC++ -> Каталоги включения (Configuration Properties > CUDA C/C++ > Common). Добавляем папку inc, которая у меня находится по адресу:
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\CUDALibraries\common\inc\
Затем «Компоновщик -> Ввод» в тех же «Свойствах конфигурации» (Linker > Input). Ищем «дополнительные зависимости» (Additional Dependencies). Только не долго. Добавляем cudart.lib.
Итак, если Вы дочитали эти 1000 с лишним слов, значит Вы достигли успеха! Да есть же! Осталось проверить работоспособность нашей радости. Для этого можно взять какую-нибудь написать что-то вроде:
#include #include
#include
#include
#include
#includeusing namespace std;
__device__ int Summa(float *Massiv, unsigned int KolvElem) {
float Summa = 0;
int i=0;
while(i {
Summa+=Massiv[i];
i++;
}
return Summa;
}
__global__ void Podschet(float *c, float *Massiv)
{
*c = Summa(Massiv, 20);
}
__host__ int main( void ) {
float Arr[20];
float c;
float *dev_c;
cudaMalloc((void**)&dev_c, sizeof(float));
float *dev_c2;
cudaMalloc((void**)&dev_c2, sizeof(float) * 20);
cudaMemcpy(dev_c2, Arr, sizeof(float)*20, cudaMemcpyHostToDevice) ;
Podschet<<<1,1>>>(dev_c, dev_c2);
cudaEvent_t syncEvent;
cudaEventCreate(&syncEvent);
cudaEventRecord(syncEvent, 0);
cudaEventSynchronize(syncEvent);
cudaMemcpy(&c, dev_c, sizeof(float), cudaMemcpyDeviceToHost) ;
cout << "Result = " << c << endl;
cudaFree( dev_c );
cudaFree( dev_c2 );
_getch();
return 0;
}
Ну вот. Запускаем. Должно скомпилироваться и запуститься без ошибок. Если Вы сделали ЭТО, Вы равны Успеху! Если же нет… То возможно я где-то накосячил — задавайте вопросы.
Вот, собственно, и всё. Здравая критика и исправления орфографии и пунктуации принимаются. А я пошёл пить чай.
Материал брал из мануалов Nvidia и вот этой статьи:http://sigttou.com/cuda-dev-windows