cuda和结构体

这篇博客探讨了在CUDA中如何使用结构体,包括结构体在CUDA中的存储分配和reduce操作。同时,文章提到了CUDA6的统一寻址在处理链表问题上的应用,并分享了几个关于CUDA排序的实例。此外,还讨论了C++中的运算符重载,给出了何时选择成员函数和友元函数的指导原则。
部署运行你感兴趣的模型镜像

        在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.youkuaiyun.com/abcjennifer/article/details/43528407

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

        http://blog.youkuaiyun.com/wang11234514/article/details/18664139

        ********

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

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

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

        下面是一个用到统一寻址功能的排序:http://bbs.youkuaiyun.com/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) 当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用)。如果左边的操作数必须是一个不同类的对象,或者是一个内部 类型的对象,该运算符函数必须作为一个友元函数来实现。

您可能感兴趣的与本文相关的镜像

PyTorch 2.9

PyTorch 2.9

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值