GPU(CUDA)学习日记(十)------ Kernal 内核函数 参数的传递

之前做了一个项目,内核函数什么的编写都没有问题,但是处理完的图片就是会产生条纹,这个问题困扰了我很长时间(真的很长时间。。。),我的内核函数传入的参数有很多,我做过实验,在host函数中给所有的参数都cudamalloc显卡空间(当初以为这样处理会更省显存一些,毕竟是开辟的线性存储器globle memory空间),但是实验结果是每一个参数都开辟cudamalloc的话,速度会降低,显卡的显存也没有实质性的节省(反而感觉少了~)。不明白其中的道理,后来查了一下,看了许多大家的看法,最后得出的结论是:

1、在fermi架构之前的参数都是在shared mem中的,而fermi这代则全都放在了constant memory里,内核参数在global memory里没有副本。

2、反复对constant memory中的数值进行赋值与调用会发生意外错误,因为你不知道内部具体的线程的执行顺序,尤其是一个线程中for循环的时候。

3、内核函数中申请的变量都会存储在寄存器中,所以参数如果过多的话,会大大降低寄存器的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值