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

在CUDA编程中,遇到图片处理后出现条纹问题,发现参数通过cudamalloc在全局内存分配导致性能下降。了解到在Fermi架构前,参数存于共享内存,而Fermi以后则存储在常量内存中。频繁修改常量内存可能导致错误,因线程执行顺序不确定。内核函数中过多参数会影响寄存器效率。
最低0.47元/天 解锁文章
2278

被折叠的 条评论
为什么被折叠?



