在CUDA C for VS2010中编译Compute Capability 2.x
我是这样说的: 但它仍然无法编译在CUDA C for VS2010中编译Compute Capability 2.x,c,cuda,gpu,C,Cuda,Gpu,我是这样说的: 但它仍然无法编译 error : calling a host function("_malloc_dbg") from a __device__/__global__ function("kernel") is not allowed error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA \v4.1\bin\nvcc.exe" -gencode=arch=comp
error : calling a host function("_malloc_dbg") from a __device__/__global__
function("kernel") is not allowed
error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA
\v4.1\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\"
--use-local-env --cl-version 2010 -ccbin "c:\Program Files (x86)\Microsoft Visual
Studio 10.0\VC\bin\x86_amd64" -I"..\..\..\Source\Include" -G0 --keep-dir
"x64\Debug" -maxrregcount=0 --machine 64 --compile -g -Xcompiler "/EHsc /nologo
/Od /Zi /MDd " -o "x64\Debug\move.cu.obj" "C:\Source\scene\move.cu"" exited with
code 2. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA
4.1.targets 361 10
正如建议的那样,我添加了#if uu CUDA_ARCH_uu>=200
,它返回false
还有什么问题?我用的是GTX480
编辑:我也有这个警告:
#警告C4005:'u malloca':宏重新定义
我知道您解决了主要问题,但还有一个问题:
我添加了#if uuu CUDA_ARCH_uuu>=200
,它返回false
CUDA代码至少编译两次。在一个编译过程中生成CPU代码,在另一个编译过程中生成设备代码<代码>\uuuu CUDA\u ARCH\uuuuu仅为设备代码生成而定义。
可以进行更多的编译过程,并为几种体系结构生成GPU代码。CPU的代码不会改变,但GPU会改变
我怀疑您在生成CPU代码时正在测试
#if uuu CUDA_ARCH_uuu>=200
。在不调试设置的情况下尝试编译,看看是否有任何区别。@Talonmes,我仍然有错误。警告(请参见编辑)可能是一个问题源吗?该错误消息中有一个可疑的v4.0和v4.1混合版本。您确定没有安装多个版本的CUDA工具包吗?(很抱歉,我不使用VS,因此我无法真正帮助处理它的内部结构)。这两个错误都是由宏重新定义引起的,一旦我删除了导致警告的头文件,程序就完全遵守并运行了#如果uuu CUDA_ARCH_uuu>=200
仍返回false。不知道为什么,但现在没关系了。是的,4.0和4.1的混合非常可疑,但我肯定只安装了4.1。谢谢你的帮助。