针对VS2010在CUDA C中编译计算能力2.x.

我是这样的: 在__device / global__ CUDA内核中动态分配内存

但它仍然无法编译。

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 __CUDA_ARCH__ >= 200并返回false。

还有什么可以解决的问题? 我正在使用GTX480。

编辑:我也有这个警告: #warning C4005: '_malloca' : macro redefinition

我知道你解决了你的主要问题,但还有其他问题:

我添加了#if __CUDA_ARCH__ >= 200并返回false。

CUDA代码至少编译两次 。 在一次编译过程中,CPU代码在另一次传递中生成设备代码。 __CUDA_ARCH__ 仅为设备代码生成定义。 可以进行更多的编译过程并为多个体系结构生成GPU代码。 CPU的代码不会改变,但GPU会改变。

我怀疑你在生成CPU代码时测试#if __CUDA_ARCH__ >= 200