【问题标题】:C++ code in kernel CUDA?内核CUDA中的C++代码?
【发布时间】:2015-07-20 04:06:33
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • CUDA 实现了完整 C++ 的 子集

标签: c++ cuda


【解决方案1】:

来自 CUDA 7.5 nvidia 幻灯片:

C++11 支持的功能

  • 自动
  • lambdas
  • std::initializer_list
  • 可变参数模板
  • static_asserts
  • constexpr
  • 右值引用
  • 基于范围的 for 循环

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 将默认编译为 CC 2.0 启用 printf 支持。

更多信息herehere

【讨论】:

  • 感谢您的帮助^^
【解决方案2】:

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

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

要在 Compute Capability >= 2.0 的设备上启用普通 printf(),请务必针对 CC 至少为 CC 2.0 进行编译并禁用默认设置,其中包括针对 CC 1.0 的构建。

右击项目中的.cu文件,选择属性,选择配置属性| CUDA C/C++ |设备。单击代码生成行,单击三角形,选择编辑。在 Code Generation 对话框中,取消选中 Inherit from parent or project defaults,在顶部窗口中输入 compute_20,sm_20,点击 OK。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2011-07-04
    • 2012-04-21
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多