Будь моим первоначальным вопросом требования экзотическими или нет, оказывается, достаточно простой способ их удовлетворить, предусматривающий:
- нет зависимости от файла VS
.*proj
и его сложностей
- бинарная совместимость с библиотеками утилит
cutil
и shrutils
, собранными с настройкой SDK для вычислений по умолчанию на GPU (сборка их "вручную" (т.е. без файла .*proj
), я думаю, также не вызовет проблем)
- нет явной зависимости от настройки окружения (требуется только несколько явно указанных
PATH
компонентов (например, CUDA_PATH (или как там - CUDA_PATH_4_1?), И друзья могут уйти из вашей глобальной среды), см. Ниже)
- нет ограничений на то, где должен находиться каталог сборки (относительно инструментария CUDA или дистрибутивов GPU SDK или чего-либо еще)
- нет необходимости соответствующим образом развертывать (или даже исправлять) правила проекта VS или расширения MSBuild, а также нет зависимости от порядка установки VC10, NVIDA GPU SDK и инструментария CUDA (я полагаю, что одно из последних фактически развертывает правила проекта CUDA в VC10 с правила и расширения сборки CUDA для MSBUILD)
- (со всем вышеперечисленным) способность правильно (я полагаю) построить примеры вычислений на GPU SDK
Для начала предположим, что у нас есть набор исходных файлов проекта NVIDIA "шаблон", скомпилированных полностью с нуля, без каких-либо файлов VS .*proj
в:
- Win7 x86
- VS2010 SP1
- Инструментарий CUDA 4.1
- NVIDIA GPU SDK 4.1
По умолчанию исходные файлы находятся под "C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\C\src\template"
(есть другие, но они не понадобятся):
- template_gold.cpp
- template.cu
- template_kernel.cu
Пакетные команды для подготовки среды (исправьте первые три, чтобы соответствовать вашей настройке, если она не соответствует настройке по умолчанию):
set "vc10=C:\Program Files\Microsoft Visual Studio 10.0\vc"
set "cudatoolkit=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1"
set "gpusdk=C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1"
call "%vc10%\bin\vcvars32.bat"
set "path=%cudatoolkit%\bin\;%path%"
set "path=%gpusdk%\C\common\lib\win32;%path%"
Пакетный файл (я назвал мой cuda_build.bat
) для сборки (при условии, что вам понадобятся и cutil
, и shrutil
, которые интенсивно используются образцами SDK):
nvcc --verbose --keep --cl-version 2010 --use-local-env ^
-Xcompiler "/EHsc /nologo /Od /Zi /MT" ^
-DWIN32 -D_MBCS ^
-L"%cudatoolkit%\lib\win32" ^
-L"%gpusdk%\C\common\lib\win32" ^
-L"%gpusdk%\shared\lib\Win32" ^
-I"%cudatoolkit%\include" ^
-I"%gpusdk%\C\common\inc" -I"%gpusdk%\shared\inc" ^
-I. ^
-lcuda -lcudart -lcufft ^
-lcutil32 -lshrutils32 ^
-lopengl32 -lfreeglut -lglew32 ^
-lkernel32 -luser32 -lgdi32 ^
%*
Для сборки передайте список файлов .cpp
и .cu
в пакетный файл выше:
cuda_build.bat template_gold.cpp template.cu
Чтобы создать более-менее тихо и не сохранять промежуточные файлы, удалите ключи --verbose --keep
из cuda_build.bat
.
Полученный файл a.exe может быть запущен, если пути заданы первыми частями команд в этом посте (т. Е. Все необходимые .dll
уже будут в пути).
Обратите внимание (если вам интересно), что минимальная среда, с которой нужно начинать, - это просто (в командах оболочки, изменить соответственно в соответствии с вашими настройками) или даже меньше (я не пробовал, но компоновщик не работает, по крайней мере, в отсутствие временные каталоги):
set Path=C:\Windows\System32
set SystemDrive=C:
set SystemRoot=C:\Windows
set TEMP=C:\Users\A90B~1\AppData\Local\Temp
set TMP=C:\Users\A90B~1\AppData\Local\Temp
P.S. Чтобы создать более крупный пример, нужно выполнить шаги similair, но добавить (или скопировать) исходные файлы, такие как rendercheck_gl.cpp
, если они указаны в проекте, в список исходных файлов для сборки. Я протестировал его с примерами проектов nbody
, fluidsGL
, simpleGL
и oceanFFT
, и он работает. (particle
пример ломается при включении thrust
заголовка библиотеки - но компиляция с помощью. * Proj-файла происходит сбой таким же образом - выглядит (для меня), что некоторые шаблоны магии несовместимы с VC10).
Надеюсь, всем, кто интересуется этой темой и не любит конфигурацию MS IDE так же, как я, это понравится. :)