cuda和结构体

来源:互联网 发布:nginx allow 编辑:程序博客网 时间:2024/05/22 13:47

        在CUDA中使用结构体,比如这种形式:

       

struct saxpy_functor {     const float a;     saxpy_functor(float _a) : a(_a) {}    __host__ __device__ float operator()(const float& x, const float& y) const { return a * x + y; } }; 

        这样,结构体里就具有了cuda的存储类型的成员。

        cuda中还经常出现reduce操作。搜了一下,还是浙大的一个学姐写得详细:

        http://blog.csdn.net/abcjennifer/article/details/43528407

        下面还有一个cuda结构体分配存储空间的例子:

        http://blog.csdn.net/wang11234514/article/details/18664139

        ********

        如果涉及链表,则网上给出的解答是:

        每一个tick数据构成链表的一个node,node中有两列数组,把每个node加上这个偏移量的int,变成一个大node,所有的大node做一个数组传进去就行了。

        另外一篇海洋大学的文章则称,CUDA6的统一寻址提供了很好的解决办法。http://www.ouccloud.com/356.html

        下面是一个用到统一寻址功能的排序:http://bbs.csdn.net/topics/310264284

        相关的各种排序:http://blog.sina.com.cn/s/blog_a1243c1901014w9h.html

        对于cuda,还涉及运算符重载。下面有一个牛人的总结:https://wuyuans.com/2012/09/cpp-operator-overload/

        忽然想到java和python。java不支持运算符重载,而phthon支持。


(1) 一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。

(2) 以下一些双目运算符不能重载为类的友元函数:=、()、[]、->。

(3) 类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。

(4) 若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好。

(5) 若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数。

(6) 当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用)。如果左边的操作数必须是一个不同类的对象,或者是一个内部 类型的对象,该运算符函数必须作为一个友元函数来实现。

0 0
原创粉丝点击