【发布时间】:2015-07-20 04:06:33
【问题描述】:
据我所知,CUDA 支持 C 和 C++。但我不能在我的内核中使用 C++。
我尝试这样一个简单的例子
__global__ void simple(){
cout<<"abc";
}
那是错误。但是如果我改成printf("abc");就对了。
你能给我解释一下吗?非常感谢!
【问题讨论】:
-
CUDA 实现了完整 C++ 的 子集。
据我所知,CUDA 支持 C 和 C++。但我不能在我的内核中使用 C++。
我尝试这样一个简单的例子
__global__ void simple(){
cout<<"abc";
}
那是错误。但是如果我改成printf("abc");就对了。
你能给我解释一下吗?非常感谢!
【问题讨论】:
来自 CUDA 7.5 nvidia 幻灯片:
C++11 支持的功能:
C++ 不支持的功能
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 支持。
【讨论】:
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。
【讨论】: