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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
image
CUDA

А зачем?


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

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


Решили мы проблему весьма просто: запихнули командную строку куда в «события перед сборкой», а тулсет в 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.
Источник: https://habr.com/ru/post/555802/


Интересные статьи

Интересные статьи

Герой нового выпуска «Где работать в ИТ» — платформа автоматизации маркетинга Майндбокс. На наши каверзные вопросы ответили технический директор Никита Прудников и директ...
Каждый из нас хотя бы раз в жизни видел программиста (сами себя они предпочитают называть разработчиками). Как правило, программисты довольно замкнутые, очень пугливые и любят подолг...
Один из самых популярных вопросов, интересующих нынешних выпускников: «Легко ли быть технологом, конструктором или инженером на производстве печатных плат?» Казалось бы, все расскаж...
Каждый лишний элемент на сайте — это кнопка «Не купить», каждая непонятность или трудность, с которой сталкивается клиент — это крестик, закрывающий в браузере вкладку с вашим интернет-магазином.
В 1С Битрикс есть специальные сущности под названием “Информационные блоки, сокращенно (инфоблоки)“, я думаю каждый с ними знаком, но не каждый понимает, что это такое и для чего они нужны