CUDA常量内存库
当我们通过使用xptxas检查注册使用情况时,我们看到如下所示:
ptxas info : Used 63 registers, 244 bytes cmem[0], 51220 bytes cmem[2], 24 bytes cmem[14], 20 bytes cmem[16]
我想知道目前是否有任何明确解释cmem [x]的文档。 将不变内存分成多个银行,总共有多少家银行,以及除0,2,14,16以外的其他银行用于什么?
作为一个附注,@njuffa(特别感谢你)之前在nvidia论坛上解释过什么是银行0,2,14,16:
使用的常量内存分区在常量程序“变量”(库1)中,加上编译器生成的常量(库14)。
cmem [0]:内核参数
cmem [2]:用户定义的常量对象
cmem [16]:编译器生成的常量(其中一些可能对应于源代码中的文字常量)
据我所知,CUDA使用GPU常量库没有正式记录。 恒定银行的数量和使用情况在不同代GPU之间有所不同。 这些是程序员不必担心的低级实现细节。
如果需要,可以通过查看为给定平台生成的机器码(SASS)来反转常量库的使用。 事实上,这就是我如何提出原始问题中引用的信息(这些信息来自我的NVIDIA开发人员论坛帖子)。 据我所知,我在那里给出的信息是基于专门应用于费米级设备的adhoc逆向工程,但由于目前论坛无法访问,因此目前无法验证这一点。
拥有多个恒定银行的一个原因是为CUDA程序员的使用保留用户可见的常量内存,同时在额外的常量银行中存储由硬件或工具提供的附加只读信息。
请注意,CUDA数学库作为源文件提供,并且函数会内联到用户代码中,因此,用户可见常量内存的统计信息中将包含CUDA数学库函数的常量内存使用量。
请参阅“其他NVCC用法”。 他们提到,恒定的银行分配是特定于个人资料的。
在PTX指南中,他们说除了64KB的常量内存之外,他们还有10个更多的内存库。 驱动程序可以在这些区域中分配和初始化常量缓冲区,并将指向缓冲区的指针作为内核函数参数传递。
我想,为nvcc提供的配置文件将处理常量进入哪些内存。 无论如何,我们不必担心每个常量内存cmem [n]是否小于64KB,因为每个bank的大小都是64KB,并且对于网格中的所有线程都是通用的。
链接地址: http://www.djcxy.com/p/63303.html