GPU缓存
GPU缓存种类
- 一级缓存(L1)
- 二级缓存(L2)
- 只读常量缓存
- 只读纹理缓存
GPU缓存的作用
- GPU缓存是不可编程的内存
- 每个SM都有一个一级缓存,所有SM共享一个二级缓存
- L1缓存和L2缓存用来存储本地内存(local memory)和全局内存(global memory)的数据,也包括寄存器溢出的部分
- 在GPU上只有内存加载可以被缓存,内存存储操作不能被缓存
- 每个SM有一个只读常量缓存和只读纹理缓存,它们用于在设备内存中提高来自各自内存空间内的读取性能
L1缓存查询与设置
- GPU全局内存是否支持L1缓存查询指令:
cudaDeviceProp::globalL1CacheSupported
- 默认情况下,数据不会缓存在统一的L1/纹理缓存中,但可以通过编译指令启用缓存:
- 开启:
-Xptxas -dlcm=ca
,除了带有禁用缓存修饰符的内联汇编修饰的数据外,所有读取都将被缓存; - 开启:
-Xptxas -fscm=ca
,所有数据读取都将被缓存;
- 开启:
L1缓存与共享内存
计算能力为8.9的显卡为例:
- 统一数据缓存大小为128KB,统一数据缓存包括共享内存、纹理缓存和L1缓存;
- 共享内存从统一的数据缓存中分区出来,并且可以配置为各种大小,共享内存容量和设置为0,8,16,32,64和100KB,剩下的数据缓存用作L1缓存,也可由纹理单元使用;
- L1缓存与共享内存大小是可以进行配置的,但不一定生效,GPU会自动选择最优的配置;