内核CUDA中的C ++代码?

时间:2015-07-20 04:06:33

标签: c++ cuda

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

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

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

那是错误。但如果我改为printf("abc");,那就是对了。

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

2 个答案:

答案 0 :(得分:2)

来自CUDA 7.5 nvidia幻灯片:

C ++ 11支持的功能

  • 自动
  • lambda表达式
  • 的std :: initializer_list
  • 可变参数模板
  • static_asserts
  • constexpr
  • 右值参考
  • 基于循环的范围

C ++不支持的功能

  • thread_local
  • 标准库:std :: *

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

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

更多信息herehere

答案 1 :(得分:0)

CUDA没有链接库和&amp;使用printf()函数所需的头文件。但是,您可以启用__eq__

此答案解释了启用此功能的过程: printing from cuda kernels 引用此处以便于访问:

  

要在Compute Capability&gt; = 2.0的设备上启用普通printf(),重要的是为至少CC 2.0的CC编译并禁用默认值,其中包括CC 1.0的构建。

     

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