6.1 CUDA的内存组织
内存存在一种层级结构,大容量的一般latency高,小容量的一般latency低。这一点在计算机组成原理中学到过。

这里有个疑问,表中的局部内存是放在芯片外部的,这里怎么画在了内部?还是我没有理解清楚?
答:局部变量属于全局变量的一部分所以在芯片外。当寄存器放不下了,就会放在局部变量中,由寄存器做判断。
6.2 集中不同类型的内存:
(1)全局内存,核函数所有线程都能访问,就是显卡的显存,低速高延迟(速度慢是相对于数据处理而言的)。负责host->device, device->device的数据传递,用cudaMalloc,cudaMemcpy进行操作,可读可写。生命周期由主机端决定(之前分配内存时,使用的是**指针,存储在host上),用cudaFree()进行释放。之前讨论的一直是动态分配内存,也可以静态分配内存,所占用内存大小在动态分配时就确定,必须在主机和设备函数外部定义。__device__ T x[N]。在核函数中可以直接访问,在主机函数中要做移动,用cudaMemcpyFromSymbol, cudaMemcpyToSymbol()(很自然,因为这是定义在device上的)
(2) 常量内存, 仅64KB,有缓存。可见范围生命周期同全局内存,read only,访存速度快。在核函数外使用__constant__定义变量,用cudaMemcpyToSymbol()复制,给核函数传递参数最多只能在核函数内使用4KB(注意理解常量内存有缓存的含义)常量内存。
(3) 纹理内存和表面内存。名字蛮有趣。

本文介绍了CUDA编程中的内存层次结构,包括全局内存、常量内存、纹理内存、寄存器、局部内存、共享内存和缓存。重点讨论了SM(Streaming Multiprocessor)的占有率对性能的影响,并指出线程块数量应为32的整倍数以达到高利用率。文章适合初学者,帮助理解GPU内部结构。
最低0.47元/天 解锁文章
953

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



