CUDA的L2缓存

理解

当一个cuda kernel重复的获取一个global memory数据的时候,可以认为这种数据访问是持久的。如果一个数据只访问一次,那么这个数据被认为"过客"。
在cuda11.0后和算力8.0以后的设备,都有能力去影响L2cache中的可持续化数据,进而潜在提高访问全局内存的带宽和降低延迟。

L2 cache自留地

持久化访问优先使用这块自留地,而普通或过客访问只能在持久化访问不用的时候用一下。自留地的设置如下:

cudaGetDeviceProperties(&prop, device_id);                
size_t size = min(int(prop.l2CacheSize * 0.75), prop.persistingL2CacheMaxSize);
cudaDeviceSetLimit(cudaLimitPersistingL2CacheSize, size); /* set-aside 3/4 of L2 cache for persisting accesses or the max allowed*/
条件和限制

不过当GPU被配置处于Multi-Instance GPU (MIG不知道是个啥)模式下,自留地配置自动消失。此外,
当使用MPS的时候,L2的自留地不能用上面的函数设置了,只能在开启MPS的时候,设置环境变量CUDA_DEVICE_DEFAULT_PERSISTING_L2_CACHE_PERCENTAGE_LIMIT来实现。

你可能感兴趣的:(CUDA编程,缓存)