隐藏的瓶颈:GPU内存层次结构如何影响您的计算体验

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Melani Maheswaran

编译:ronghuaiyang

导读

在本文中,我们将探讨GPU内存层次结构背后的机制。

63c37437a709c18556ba323b56b28b75.png

引言

GPU内存层次结构 正逐渐成为深度学习研究者和实践者的关注焦点。通过构建关于内存层次结构的理解,开发者可以最小化内存访问延迟、最大化内存带宽并降低功耗,从而缩短处理时间、加速数据传输并实现成本效益更高的计算使用。深入理解内存架构将使开发者能够大规模地发挥GPU的最大效能。

CUDA 快速回顾

CUDA(统一计算设备架构)是由NVIDIA开发的一种并行计算平台,用于配置GPU。

CUDA程序的执行始于主机代码(CPU串行代码)调用内核函数。这个函数调用会在设备(GPU)上启动一个线程网格,以并行处理不同的数据组件。

一个线程由程序的代码、代码中的当前执行点以及变量和数据结构的值组成。一组线程构成一个线程块,而一组线程块则组成CUDA内核网格。软件组件,即线程和线程块,直接对应于硬件组件,即CUDA核心和CUDA流式多处理器(SM)。

所有这些共同构成了GPU的基本组成部分。

b3ce5642ae75c0a239257f630c9f3744.png

线程被组织成线程块,而线程块又被组织成线程网格

a7f89a51dbfbb8a50c689967e5f51e57.png

H100s 引入了新的线程块集群架构,扩展了GPU的物理编程架构,现在包括线程、线程块、线程块集群和网格。

CUDA 内存类型

CUDA设备使用的内存存储类型有不同的可访问性和持续时间。当CUDA程序员将变量分配给特定的CUDA内存类型时,他们决定了变量如何被访问、访问的速度以及其可见范围。

以下是不同内存类型的快速概览:

7f7dd613fcb4e3df846c58f8c1c41421.png

寄存器内存 对每个线程私有。这意味着当特定线程结束时,该寄存器的数据就会丢失。

局部内存 也对每个线程私有,但它的速度比寄存器内存慢。

共享内存 可以被同一块中的所有线程访问,并且持续时间为该块的生命周期。

全局内存 存储的数据持续时间为网格/主机的持续时间。所有线程和主机都可以访问全局内存。

常量内存 是只读的,专为在内核执行期间不会改变的数据设计。

纹理内存 是另一种只读内存类型,适合物理相邻的数据访问。相比全局内存来说,使用它可以缓解内存流量并提高性能。

GPU 内存层次结构

速度与容量之间的权衡

重要的是要理解,在内存访问效率方面,存在带宽和内存容量之间的权衡。 更高的速度通常意味着更低的容量。

寄存器

寄存器是GPU上最快的内存组件,组成向CUDA核心直接提供数据的寄存器文件。内核函数使用寄存器来存储对线程私有的并且经常访问的变量。

寄存器和共享内存都是芯片上的内存,其中驻留在这些内存中的变量可以以非常高的速度并行访问。

通过有效地利用寄存器,可以最大化数据重用并优化性能。

缓存层级

现代处理器中存在多个缓存层级。这些缓存编号的方式反映了它们距离处理器的距离。

L1 缓存

L1 或一级缓存直接连接到处理器核心。当活动数据量超过SM寄存器文件的容量时,它起到备份存储区域的作用。

L2 缓存

L2 或二级缓存更大,并且通常跨SM共享。与L1缓存不同,只有一个L2缓存。

常量缓存

常量缓存捕获每个内核中频繁使用的变量,从而提高性能。

在为大规模并行处理器设计内存系统时,会有常量内存变量。重新写这些变量将是冗余且无意义的。因此,像常量缓存这样的专用内存系统消除了对计算成本高昂的硬件逻辑的需求。

H100s 中的新内存特性

f8a5aaa2967cecd578abfade9e37bc4c.png

通过其H100系列GPU,Hopper引入了新的特性以增强其相对于先前NVIDIA微架构的性能。

线程块集群

正如文章前面所提到的,线程块集群首次出现在H100s中,扩展了CUDA编程层次结构。线程块集群允许对大于单个SM上的线程块所能允许的更大线程组进行更高级别的程序控制。

异步执行

最新的异步执行进展在Hopper架构中引入了张量内存加速器(TMA)和异步事务屏障。

张量内存加速器(TMA) 单元允许在全局内存和共享内存之间高效地传输大数据块。

异步事务屏障 允许无论CUDA线程和芯片上加速器是否位于单独的SM上,都能进行同步。

6819ac83231b855414eda9c98b795f39.png

H100s 包含了在Ampere GPU架构中引入的异步屏障以及新的异步事务屏障

结论

将变量分配给特定的CUDA内存类型使程序员能够对其行为进行精确控制。这种指定不仅决定了变量如何被访问,还决定了访问的速度。存储在访问时间更快的内存类型(如寄存器或共享内存)中的变量可以快速检索,从而加速计算。相反,存储在较慢内存类型(如全局内存)中的变量则以较慢的速度被访问。此外,内存类型的分配影响变量的使用范围及其与其他线程的交互;其分配的内存类型决定了变量是否只能被单个线程访问、一个线程块中的所有线程或网格中的所有线程访问。最后,H100s——当前AI工作流程中的顶级GPU——引入了几项新特性,如线程块集群、张量内存加速器(TMA)单元和异步事务屏障,这些特性影响着内存访问。

ebe5b9e15ab1e9b9a39c3c7eb0bd6c86.png

—END—

英文原文:https://blog.paperspace.com/the-hidden-bottleneck-how-gpu-memory-hierarchy-affects-your-computing-experience/

778a2d5e22f58995ed52f51f06d2769e.jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个在看吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值