CUDA设备代码支持的真正的C语言结构是什么?
发布时间:2020-12-16 06:00:40 所属栏目:百科 来源:网络整理
导读:3.2版本CUDA文档的附录D是指CUDA设备代码中的C支持. 很明显,CUDA支持“计算能力2.x的设备类”.但是,我正在使用计算能力1.1和1.3的设备,我可以使用这个功能! 例如,此代码的作用是: // class definition voluntary simplifiedclass Foo { private: int x_; p
3.2版本CUDA文档的附录D是指CUDA设备代码中的C支持.
很明显,CUDA支持“计算能力2.x的设备类”.但是,我正在使用计算能力1.1和1.3的设备,我可以使用这个功能! 例如,此代码的作用是: // class definition voluntary simplified class 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(); } 我也可以使用广泛的库,如推力::随机生成类. 您是否在相同条件下使用过这些功能,还是可以向我解释为什么我的CUDA代码行为如此?参考指南中有错误吗? 解决方法
从本质上说,CUDA在2.0之前的设备上不支持类.
实际上,根据我的经验,您可以在所有设备上使用所有C功能,只要在编译时可以解决该功能. 2.0之前的设备不支持函数调用(所有函数都是内联的),没有程序跳转到变量地址(只能在常量地址跳转). 这意味着,您可以使用以下C构造: >可见性(公共/受保护/私有) 您不能使用以下内容: >新&删除操作符(我相信设备> = 2.0可以做到这一点) 实际上,“CUDA编程指南”第D.6章中的所有示例都可以针对设备< 2.0编译 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |