为什么常量内存大小限制CUDA?(Why is the constant memory size l

2019-06-23 19:57发布

据“CUDA C编程指南” ,只有在多处理器常量缓存命中(第5.3.2.4)恒定的内存访问的好处1。 否则,就不可能有半warp比读合并的全局内存的情况下,甚至更多的内存请求。 那么,为什么不断的内存大小限制为64 KB?

为了不问两次一个问题。 据我明白,在Fermi架构纹理高速缓冲存储器与L2高速缓存相结合。 质地是否使用还有意义或全局存储器中读取以同样的方式被缓存?


1个 恒定存储器(节5.3.2.4)

常数存储器空间驻留在设备存储器,并且在第F.3.1和F.4.1提到的常数的高速缓存被缓存。

对于计算能力1.x的设备,用于经纱的恒定存储器请求首先被分为两个请求,一个用于每个半经,即独立地发出的。

然后请求被分成许多单独的请求,因为有在初始请求不同的存储器地址,并以等于单独的请求的数量的因子减小的吞吐量。

将得到的请求,然后在吞吐量恒定高速缓存在高速缓存命中的情况下提供服务,或者在可以通过设备存储器的其他方式。

Answer 1:

常数存储器大小为64KB为计算能力1.0-3.0设备。 工作集缓存只有8KB(见CUDA编程指南4.2版表F-2)。

恒内存由驱动程序,编译器使用,和变量声明__device__ __constant__ 。 驱动程序将使用恒定存储器通信参数,纹理绑定等编译器使用常数在许多的指示(参见拆卸)。

放置在恒定存储器变量可以读取和使用主机运行时函数写入cudaMemcpyToSymbol()cudaMemcpyFromSymbol()参见CUDA编程指南4.2版部分B.2.2)。 常数存储器在设备存储器中,但是通过恒定的高速缓存存取。

费米纹理,恒定,L1和I-高速缓存都为1级高速缓存中或围绕每个SM。 通过L2高速缓存的所有级别1的高速缓存访​​问设备存储器中。

64 KB常数限制是每个CUmodule其是CUDA的编译单元。 CUmodule的概念下CUDA运行时而是通过CUDA驱动API访问隐藏。



文章来源: Why is the constant memory size limited in CUDA?