CUDA设备代码支持的真正的C语言结构是什么?

CUDA设备代码支持的真正的C语言结构是什么?,第1张

概述3.2版本CUDA文档的附录D是指CUDA设备代码中的C支持. 很明显,CUDA支持“计算能力2.x的设备类”.但是,我正在使用计算能力1.1和1.3的设备,我可以使用这个功能! 例如,此代码的作用是: // class definition voluntary simplifiedclass Foo { private: int x_; public: __devic 3.2版本CUDA文档的附录D是指CUDA设备代码中的C支持.
很明显,CUDA支持“计算能力2.x的设备类”.但是,我正在使用计算能力1.1和1.3的设备,我可以使用这个功能!

例如,此代码的作用是:

// class deFinition voluntary simplifIEdclass Foo {  private:    int x_;  public:    __device__ Foo() { x_ = 42; }    __device__ voID bar() { return x_; }};//kernel using the prevIoUs class__global__ voID testKernel(uint32_t* ddata) {    Foo f;    ddata[threadIDx.x] = f.bar(); }

我也可以使用广泛的库,如推力::随机生成类.
我唯一的猜测是,我可以这样做,因为__device__标记函数的自动内联,但这并不解释成员变量的处理.

您是否在相同条件下使用过这些功能,还是可以向我解释为什么我的CUDA代码行为如此?参考指南中有错误吗?

解决方法 从本质上说,CUDA在2.0之前的设备上不支持类.

实际上,根据我的经验,您可以在所有设备上使用所有C功能,只要在编译时可以解决该功能. 2.0之前的设备不支持函数调用(所有函数都是内联的),没有程序跳转到变量地址(只能在常量地址跳转).

这意味着,您可以使用以下C构造:

>可见性(公共/受保护/私有)
>非虚拟继承
>整个模板编程和元编程(直到你在nvcc错误中存在;有3.2个版本中有不少)
>构造函数(除非在__ shared __ memory中声明对象)
>命名空间

您不能使用以下内容:

>新&删除 *** 作符(我相信设备> = 2.0可以做到这一点)
>虚拟方法(需要在变量地址跳转)
>函数递归(需要函数调用)
>例外

实际上,“CUDA编程指南”第D.6章中的所有示例都可以针对设备< 2.0编译

总结

以上是内存溢出为你收集整理的CUDA设备代码支持的真正的C语言结构是什么?全部内容,希望文章能够帮你解决CUDA设备代码支持的真正的C语言结构是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存