c++代码在CUDA内核
C++ code in kernel CUDA?
据我所知,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,单击"确定"。
相关文章:
- CUDA内核和数学函数的显式命名空间
- 将 2D 推力::d evice_vector 复矩阵传递给 CUDA 内核函数
- 如何将矢量的数据传递给 CUDA 内核?
- 无法在 cuda 内核中使用我的模板类
- CUDA非法访问内核内存
- CUDA内核printf()在终端中不产生输出,在探查器中工作
- 编译为 cuda 内核调用提供了"expression must have integral or unscoped enum type"
- 使用模板模式优化 CUDA 内核
- 带有大结构变量的 CUDA 内核函数给出了错误的结果
- CUDA 内核在第二次运行时运行得更快 - 为什么?
- 是否可以从 CUDA 10.1 内核调用 cuBLAS 或 cuBLASLt 函数?
- 在CUDA内核中传递一个常数整数
- 如何将函数作为CUDA内核参数传递
- 验证调用 cuda 内核的次数
- cuda 内核调用/传递参数中的编译错误
- 如何在 CUDA 中的内核函数中乘以两个 openCV 矩阵?
- 预期;在 CUDA 内核上
- CUDA 内核"Only a single pack parameter is allowed"解决方法?
- 内核代码中矩阵的CUDA多乘法
- 二维多维数组传递到内核CUDA