gpt4 book ai didi

memory-management - 为什么 GPU(例如 GTX 1080)中的寄存器文件大小大于 L2 缓存大小?

转载 作者:行者123 更新时间:2023-12-01 22:24:08 24 4
gpt4 key购买 nike

看到这个事实,我开始想知道寄存器在 GPU 中是如何工作的?在知道这一点之前,我认为在分层内存阶梯之上越来越高,大小不断减少(这是直观的(延迟减少,大小减少))。 GPU 中寄存器的用途是什么?为什么它们的大小大于 L2/L1 缓存?谢谢。

最佳答案

在 CPU 中,缓存有两个基本用途:

  1. 它们支持对已从 DRAM 中获取的数据进行时间和空间重用。这减少了 DRAM 所需的带宽。

  2. CPU 缓存可大幅减少延迟,这对于单线程性能极为重要。

GPU 并不关注单线程性能,而是关注吞吐量。大多数时候,他们还处理太大而无法放入任何合理大小的缓存的工作集。小缓存在某些情况下有帮助,但总体缓存对 GPU 的重要性不如对 CPU 的重要性。

现在到问题的第二部分:为什么会有巨大的寄存器文件? GPU 通过利用线程级并行性来达到其性能。许多线程需要同时处于事件状态才能达到高性能水平。但是每个线程都需要存储自己的一组寄存器。在 Maxwell GPU 中,可能在 GP104/GTX1080 中,每个 SM 最多可以托管 2048 个线程。每个 SM 都有一个 256 KB 的寄存器文件,因此如果使用所有线程,则每个线程有 32 个 32 位寄存器可用。

我之前提到过,CPU 使用缓存来减少内存延迟,但 GPU 也必须以某种方式处理内存延迟。他们只是切换到不同的线程,而一个线程正在等待来自内存的回答。延迟和吞吐量以及线程通过 Little 定律联系起来:

(飞行中的数据/线程)* 线程 = 延迟 x 吞吐量

内存延迟可能是几百纳秒到几千纳秒(让我们使用 1000 纳秒)。这里的吞吐量是内存带宽 (320 GB/s)。为了充分利用可用的内存带宽,我们需要 (320 GB/s * 1000 ns=) 320 KB 的运行速度。 GTX1080 应该有 20 个 SM,因此每个 SM 需要有 16 KB 的内存才能充分利用内存带宽。即使所有 2048 个线程一直用于内存访问,每个线程仍需要有 8 个字节的未完成内存请求。如果一些线程忙于计算而无法发出新的内存请求,则剩余的线程甚至需要更多的内存请求。如果线程每个线程使用超过 32 个寄存器,则每个线程需要更多的内存请求。

如果 GPU 使用较小的寄存器文件,它们将无法使用内存的全部带宽。他们会向内存接口(interface)发送一些工作,然后所有线程都将等待内存接口(interface)的答复,并且不会向内存接口(interface)提交新工作。巨大的寄存器需要有足够的可用线程。仍然需要仔细编码才能真正获得 GPU 的最大功率。

关于memory-management - 为什么 GPU(例如 GTX 1080)中的寄存器文件大小大于 L2 缓存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37408924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com