CUDA编程-共享内存配置

Sam*_*n I 1 caching cuda gpu-shared-memory

您能否解释一下在 CUDA 编程中使用“16 KB 共享内存 + 48K L1 缓存”或“48 KB 共享内存 + 16 KB L1 缓存”之间的区别?在时间执行中我应该期待什么?我什么时候可以减少 GPU 运行时间?

Tom*_*Tom 5

在 Fermi 和 Kepler nVIDIA GPU 上,每个 SM 都有一个 64KB 的内存块,可以配置为 16/48 或 48/16 共享内存/L1 缓存。您使用哪种模式取决于内核对共享内存的使用量。如果您的内核使用大量共享内存,那么您可能会发现将其配置为 48KB 共享内存可以实现更高的占用率,从而获得更好的性能。

另一方面,如果您的内核根本不使用共享内存,或者每个线程只使用非常少量的共享内存,那么您可以将其配置为 48KB L1 缓存。

占用率计算器可能是 CUDA 工具包中包含的电子表格,可以最好地说明“非常少量”的数量。该电子表格允许您研究每个块的不同共享内存和不同块大小的影响。

更新:

最新版本的 CUDA 工具包不再分发占用计算器电子表格。它的功能已集成Nsight 计算分析器中,该分析器也是 CUDA 工具包的一部分。