GPU中的一级缓存

时间:2019-04-18 09:04:35

标签: caching cuda gpu

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

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

在此之后,是 L2 高速缓存,也称为 shared 内存,由所有SM共享。根据./deviceQuery,L2大小为768KB。如果这是合计值,则每个SM具有768KB / 6 = 128KB。但是,根据programming guide,共享内存为96KB。

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

  

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

     

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

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

1 个答案:

答案 0 :(得分: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。)SharedMemory
    • (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。*内存层次结构 enter image description here

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

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

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

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