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

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

Время на прочтение2 мин
Количество просмотров2.6K
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: ↑6 и ↓0+6
Комментарии9

Публикации

Истории

Работа

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

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