GPU中的L1缓存

mah*_*ood 0 caching cuda gpu

在读取GPU的存储层次时,我会看到一些类似的术语,并且由于在过去的版本中进行了一些体系结构修改,因此我不知道它们可以一起使用还是具有不同的含义。设备是M2000,计算兼容性为5.2。

顶层(最接近管道)是统一的L1 /纹理缓存,每个SM为24KB。难道是统一的指令和数据呢?

在此之下,是L2缓存,也称为共享内存,由所有SM共享。根据./deviceQuery,L2大小为768KB。如果这是合计值,则每个SM具有768KB / 6 = 128KB。但是,根据编程指南,共享内存为96KB。

那么什么是恒定内存,它驻留在哪里?在deviceQuery和nvprof指标中都没有有关其大小的信息。编程指南说:

所有线程还可以访问两个附加的只读存储空间:常量存储空间和纹理存储空间。全局,常量和纹理内存空间针对不同的内存使用进行了优化(请参阅设备内存访问)。纹理存储器还为某些特定的数据格式提供了不同的寻址模式以及数据过滤(请参见纹理和表面存储器)。

全局,常量和纹理存储空间在同一应用程序的内核启动之间是持久的。

L2下面是全局内存,称为设备内存,可以是2GB,4GB和...

Gre*_*ith 6

NVIDIA GPU架构具有以下访问路径。GPU可能会在下面显示的层次结构中具有其他缓存。

  • 全局,本地内存的路径
    • (CC3。*)L1-> L2
    • (CC5。- 6。)L1TEX-> L2
    • (CC7。*)L1TEX(LSU)-> L2
  • 表面,纹理的路径(CC5./6
    • (CC <5)TEX
    • (CC5。- 6。)L1TEX-> L2
    • (CC7。*)L1TEX(TEX)-> L2
  • 共享路径
    • (CC3。*)L1
    • (CC5。-6。)共享内存
    • (CC7。*)L1TEX(LSU)
  • 立即常数的路径
    • ... c [bank] [offset]-> IMC-立即常量缓存-> L2缓存
  • 索引常量的路径
    • LDC Rd,c [bank] [offset]-> IDC-索引常量缓存-> L2缓存
  • 教学路径
    • ICC-指令缓存-> L2

NVIDIA CUDA Profiler(Nsight Compute,Nvidia Visual Profiler和Nsight VSE CUDA Profiler)具有内存层次结构的高级示意图,以帮助您了解逻辑请求如何映射到硬件。

CC3。*内存层次结构 在此处输入图片说明

对于CC5。/ 6。每个SM有两个统一的L1TEX缓存。每个L1 / TEX单元服务1个SM分区。每个SM分区都有两个子分区(2个warp调度程序)。SM包含单独的RAM和共享存储器的数据路径。L1TEX单元既不提供指令提取功能也不提供常量数据加载(通过c [bank] [offset])。指令获取和恒定负载通过单独的缓存层次结构处理(请参见上文)。CUDA编程模型还支持通过L1TEX通过全局内存地址空间进行只读(const)数据访问。

L2缓存由GPU中的所有引擎共享,包括但不限于SM,复制引擎,视频解码器,视频编码器和显示控制器。L2缓存未按客户端分区。L2不称为共享内存。在NVIDIA GPU中,共享内存是SM本地的RAM,支持高效的非线性访问。

全局内存是一个虚拟内存地址,可能包括:

  • 取决于上下文,芯片上的专用存储器称为设备存储器,视频存储器或帧缓冲区。
  • 固定的系统内存
  • 通过统一虚拟内存的非固定系统内存
  • 对等内存