看CUDA 方面的资料也有些时日了,关于CUDA的环境配置网上也有很多比如:Visual Studio 2008 + Visual Assist X的CUDA2.3编译环境设置 开勇哥的CUDA VS2005 Wizard 等等,主要是针对VS集成开发环境的配置,而关于命令行方式的很少。我想也有很多人跟我一样也尝试过,但在其间遇到了很大的困难,不得不终止。
我用的机子是其他牌子的集成显卡,不支持CUDA构架。当时安装了CUDA的3.1版的Toolkit和SDK,驱动是没法安半装的。只好模拟方式运行了,试了很久才发现3.1版或之后的版本不再支持模拟了。嗯,又下了个2.3版的,这下支持了。在集成开发环境VS下设置成模拟方式运行没问题。觉得不过隐,想着能不能用命令行批处理之类的实现编译呢?这个想法不打紧,可花了不少时间才有所收获,细说起来主要有以下障碍:
1.fatal error C1083:Cannot open compiler generated file:'Debug/sample.obj':No such file or directory
环境变量设置好了,运行下面的命令:
nvcc.exe -ccbin "D:/Visual Studio 2005/VC/bin" -deviceemu -c -DWIN32 -D_DEBUG -D_CONSOLE -Xcompiler "/EHsc /W3 /nologo /Wp64 /Od /Zi /RTC1 /MTd " -IC:/CUDA/include -o Debug/sample.obj sample.cu
出现了1中的问题,说找不到文件sample.obj,在网上搜了下,有说什么什么BUG,其实是路径问题,直接将Debug/sample.obj 改为sample.obj 当前目录下,就不怕找不到了。
2. 无法启动此程序,因为计算机中丢失mspdb80.dll。尝试重新安装该程序以解决此问题。
前面一句是主要的,后面一句是误导。既然找不到,我们就帮它找啦,发现在VS/Common7/IDE目录下有mspdb80.dll,把它复制到VS/VC/bin目录中即可。
3.fatal error C1902: Program database manager mismatch; please check your installation
VS有时很奇怪,明明运行好好的,过一些时日却出现问题了,当时就出现了这问题。nvcc.exe的时候没问题(因为bin目录下有mspdb80.dll),可在link 的时候却出现了问题3(也不一定都出现),没办法在链接的时候又把bin目录下的mspdb80.dll删了,才成功。
sample.cu如下:
/******************************************************************** * [!output PROJECT_NAME].cu * This is a example of the CUDA program. *********************************************************************/ #include
命令行批处理形式如下(保存为**.bat即可):
@echo off set myFun=sample set VS=D:/Visual Studio 2005 set CU=C:/CUDA set include=%CU%/include;%VS%/VC/include;%VS%/VC/PlatformSDK/include set lib=%CU%/lib;%VS%/VC/lib;%VS%/VC/PlatformSDK/lib set path=%CU%/bin;%VS%/VC/bin;%VS%/VC/PlatformSDK/bin;%path% echo ------------------===By GoldenSpider 2010-7-9===------------------ echo on nvcc.exe -ccbin "%VS%/VC/bin" -deviceemu -c -DWIN32 -D_DEBUG -D_CONSOLE -Xcompiler "/EHsc /W3 /nologo /Wp64 /Od /Zi /MTd " -I%CU%/include -o "%myFun%.obj" %myFun%.cu @echo off copy "%VS%/Common7/IDE/mspdb80.dll" "%VS%/VC/bin" echo on link /OUT:"mycuda.exe" /LIBPATH:"%CU%/lib" /SUBSYSTEM:CONSOLE /MACHINE:X86 %myFun%.obj cudart.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib bufferoverflowU.lib @echo off del vc80.pdb del %myFun%.obj del "%VS%/VC/bin/mspdb80.dll" echo Good Job, Compiler Success!! Run EXE(Y/?) pause mycuda.exe pause
运行情况如下: