c++代码在CUDA内核

C++ code in kernel CUDA?

本文关键字:内核 CUDA 代码 c++      更新时间:2023-10-16

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

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

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

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

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

来自CUDA 7.5 nvidia幻灯片:

c++ 11支持的特性:

    汽车
  • λ
  • std:: initializer_list
  • 可变参数模板
  • static_assert
  • 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将默认编译为cc2.0,从而启用printf支持。

更多信息在这里和这里

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

这个答案解释了启用这个特性的过程:从cuda内核打印此处引用以方便访问:

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

右键单击项目中的.cu文件,选择Properties,选择Configuration Properties | CUDA C/c++ | Device。单击代码生成行,单击三角形,选择编辑。在"代码生成"对话框中,取消选中"继承自父级或项目默认值",在顶部窗口中键入compute_20,sm_20,单击"确定"。