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,有缓存。可