CUDA 4.1 printf()错误

CUDA 4.1 printf()错误,cuda,Cuda,即使我有一张费米卡(gtx 560),我在VS2010上也会遇到以下错误: error : calling a host function("printf") from a __device__/__global__ function("kernel") is not allowed 代码: #包括“cuda_runtime.h” #包括“设备启动参数.h” #包括 __全局无效内核() { printf(“你好”); } int main() { 内核(); 返回0; } 我在这里遗漏了什

即使我有一张费米卡(gtx 560),我在VS2010上也会遇到以下错误:

error : calling a host function("printf") from a __device__/__global__ function("kernel") is not allowed
代码:

#包括“cuda_runtime.h”
#包括“设备启动参数.h”
#包括
__全局无效内核()
{
printf(“你好”);
}
int main()
{
内核();
返回0;
}

我在这里遗漏了什么吗?

您需要确保编译的是正确的体系结构。只有费米和开普勒卡(因此计算能力2.0、2.1、3.0和3.5设备)支持内核中的
printf
。如果您像这样编译代码:

nvcc -arch=sm_21 [other options] .....

代码应该正确构建。默认的体系结构是Compute1.0,这就是为什么会出现错误。如果您使用Visual studio,应该有一个项目选项来选择目标体系结构,尽管我不能确切地告诉您在哪里可以找到它,因为我没有在CUDA中使用它。

非常感谢!在VS2010中,我将Project->{Project Name}Properties->CUDA C/C++->Device->[代码生成]:compute_10,sm_10改为compute_20,sm_20,它起了作用。对于您的卡,您可能应该使用sm_21,但我不知道它是否对编译器发出的代码有很大影响。
nvcc -arch=sm_21 [other options] .....