2015-07-20 88 views
0

据我所知,CUDA支持C和C++。但是我不能在我的内核中使用C++。内核CUDA中的C++代码?

我尝试一个简单的例子,像这样

__global__ void simple(){ 
    cout<<"abc"; 
} 

这就是错误。但是,如果我更改为printf("abc");这是正确的。

你能为我解释一下吗?非常感谢你!

+1

CUDA实现*子*完整的C++的。 – njuffa

回答

2

从CUDA 7.5 NVIDIA幻灯片:

C++ 11个支持的特征

  • 自动
  • lambda表达式
  • 的std :: initializer_list
  • 可变参数模板
  • static_as serts
  • constexpr
  • 右值引用基于对循环

C++不支持的功能

  • thread_local
  • 标准库
  • 范围:标准:: *

std::cout在C++标准库中定义,CUDA不支持。使用C printf

从CUDA 6.5开始,不推荐使用'compute_11','compute_12','compute_13','sm_11','sm_12'和'sm_13'体系结构。因此nvcc将默认编译为CC 2.0,支持printf

更多信息herehere

+0

感谢您的帮助^^ –

0

CUDA不链接库&使用cout函数所需的头文件。但是,您可以启用的printf()

这样的回答解释了启用该功能的过程: printing from cuda kernels 这里列出,方便使用:

为了能够使用普通的printf()上计算的设备Capability> = 2.0,编译至少CC 2.0的CC至关重要,并禁用默认值,其中包括CC 1.0的内部版本。

右键单击项目中的.cu文件,选择属性,选择配置属性| CUDA C/C++ |设备。点击代码生成线,点击三角形,选择编辑。在代码生成对话框中,取消选中从父项或项目默认值继承,在顶部窗口中键入compute_20,sm_20,单击确定。