一个弱弱的问题,关于thread私有的register和local memory

看过一些pdf文档,关于这两个thread私有的内存,一直不知道是怎么用上它的?两种内存有什么区别吗?如何使用?跪求大神们给菜鸟解答解答。

你在kernel函数里面写的临时变量如果没有超过最大寄存器限制的话,一般都是在寄存器上的,当超过最大寄存器限制时,多出来的一部分临时变量会存到local memory里面。寄存器的访问是最快的,local memory相比之下会慢很多(好像与global memory的访存特性接近)

谢谢你,明白一点了。
你有相关的文档吗?想仔细看看这部分。

这部分内容在《GPU高性能计算之cuda》中第二章,存储器模型部分有介绍的。

这个帖子里面有些可能有用:
http://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=6684&extra=page%3D3

LZ您好,register和local memory的区别和联系如下:

1:两者都是线程私有的存储单元。

2:register是GPU片上高速存储单元,GPU上最快的存储单元,但是单个线程可用的数量较为有限。
local memory是显存DRAM上划分出来的,和global memory的存储单元一致,但是为每个线程私有访问的。local memory受到L1 cache的缓冲。

3:您直接在kernel里面使用的变量(又称auto变量)默认是使用register的,无需您手工指定。并且编译器会尽最大可能优先使用register。但是在两种情况下,会使用local memory:a),寄存器不够用的时候;b)当kernel内使用数组,但是下标访问方式在编译的时候无法确定,因为N卡的寄存器是不支持寻址的,此时会使用local memory。

大致回答如上,祝您编码顺利~

了解了!
谢谢ice!
:slight_smile:

不客气的,欢迎您常来论坛~

祝您编码顺利~