Как стать автором
Обновить

Привычка работать «из коробки» или как мы засунули CUDA в .vcxproj

Время на прочтение2 мин
Количество просмотров2.5K
image
CUDA

А зачем?


Пожалуй, сразу отвечу, для чего было придумано такое решение. Когда мы держали проект в виде OpenSource, то пытались сохранить политику «скачал код, собрал одной кнопкой», но с момента использования технологии CUDA ситуация стала сложнее… Большая часть комьюнити кричала, что ничего не собирается и устанавливать сторонние SDK они не хотят.

Интеграция CUDA прямо в .vcxproj


Решили мы проблему весьма просто: запихнули командную строку CUDA в «события перед сборкой», а тулсет в SDK/tools/CUDA.

События перед сборкой


События перед сборкой — это список команд, который будет выполнен на начальном этапе компиляции.

CMD для интеграции CUDA выглядит следующим образом"
nvcc.exe -gencode=arch=compute_30,code=\"sm_30,compute_30\" --use-local-env -x cu  -I..\..\engine.vc2008\xrCore\XMLCore -I../../sdk/include/dx/ -I../../sdk/include/ -I..\..\engine.vc2008\xrQSlim\src -I../../sdk/include/optix/ -I../../sdk/include/cuda/ -I$(xrIncl)  -G   --keep-dir $(Platform)\$(Configuration) -maxrregcount=0  --machine 64 --compile -cudart static  -g   -DFORCE_NO_EXCEPTIONS -D_USE_MATH_DEFINES -DWIN32 -DDEBUG -D_WINDOWS -D_USRDLL -DXRLC_LIGHT_EXPORTS -D_SECURE_SCL=0 -D_ITERATOR_DEBUG_LEVEL=0 -D_VC80_UPGRADE=0x0710 -DWIN32 -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_WINDLL -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /FS /Zi /RTC1 /MD " -o $(IntermediateOutputPath)LightPoint.cu.obj "$(ProjectDir)LightPoint.cu"

Данный код не требует пояснения, т.к. он просто копируется из CMD от CUDA вашего проекта

Вытаскиваем toolset


Ну, тут процесс весьма прост: пытаемся собрать, ловим ошибку, докидываем .exe/.dll -> check again. Для упрощения жизни:
  • nvcc.exe
  • nvcc.profile
  • nvlink.exe
  • nvvm64_32_0.dll
  • ptxas.exe
  • cudafe++.exe
  • fatbinary.exe
  • cicc.exe
  • bin2c.exe
  • gpu-library-advisor.exe


Компоновка


Ну и самое просто под конец — подключить скомпилированный .cu файл в компоновку: Свойства -> Компоновщик -> Командная строка и вписываем в дополнительные опции your_file_name.cu.obj.

Заключение


Таким образом у любого обладателя VS при сборке вашего проекта, не будет требоваться установленный CUDA SDK.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+6
Комментарии9

Публикации

Изменить настройки темы

Истории

Работа

Программист C++
128 вакансий
QT разработчик
7 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн