2016-05-24 68 views
1

看着这个事实,我开始想知道寄存器如何在GPU中工作?在知道这个之前,我认为越来越高于分层内存梯形图,大小不断下降(这是直观的(延迟减少,尺寸减小))。 GPU中寄存器的用途是什么?为什么它们的尺寸大于L2/L1缓存? 谢谢。GPU(例如GTX 1080)中的寄存器文件大小是如何大于L2高速缓存大小的?

+0

由于GPU试图优化吞吐量而不是延迟,GPU被认为具有“反转内存层次”。为了保持较小的延迟,GPU RF使用操作数收集器和多个存储区。查看我的[关于GPU寄存器文件的调查报告](https://www.academia.edu/23514653/A_Survey_of_Techniques_for_Architecting_and_Managing_GPU_Register_File),了解最新GPU的GPU RF架构,管理技术和(RF,L1和L2)大小趋势的更多细节。 – user984260

回答

3

在CPU的缓存服务于两个基本目的:

  1. 他们能够从DRAM获取已经数据的时间和空间复用。这减少了DRAM的所需带宽。

  2. CPU缓存提供了大幅减少的延迟,这对单线程性能非常重要。

GPU不关注单线程性能,而是侧重于吞吐量。大多数时候,他们还处理工作集,这些工作集太大而不适合任何合理大小的缓存。在某些情况下,小缓存有助于缓存,但总体缓存对于GPU而言并不像CPU那样重要。

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

我刚才提到CPU使用缓存来减少内存延迟,但GPU也必须以某种方式处理内存延迟。他们只是切换到另一个线程,而一个线程正在等待内存中的答案。延迟和吞吐量和线程是由小定律连接:

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

内存延迟可能是几百纳秒到一千纳秒(允许使用1000ns)。这里的吞吐量将是内存带宽(320 GB/s)。为了充分利用可用的内存带宽,我们需要(320 GB/s * 1000 ns =)320 KB的飞行时间。 GTX1080应该有20个SM,因此每个SM需要有16 KB的空间才能充分利用内存带宽。即使所有2048个线程始终用于内存访问,每个线程仍需要8个字节来处理未完成的内存请求。如果某些线程忙于计算并且无法发出新的内存请求,则需要其余线程的更多内存请求。如果线程每个线程使用多于32个寄存器,则每个线程需要更多的内存请求。

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

+0

1.您能否详细说明“如果某些线程忙于计算并且无法发出新的内存请求,则需要其余线程提供更多内存请求”2.我知道这个大寄存器大小对于在线程间切换非常重要,但最终,这些寄存器由L2高速缓存提供,所以如果所有线程都需要内存访问,L2高速缓存将成为瓶颈。你如何解释这个? – Koustubh

+0

1.这个简单的小法则模型假定所有的线程在接收到来自存储器接口的最后一个请求的回答后立即发出新的存储器请求。但对于实际的GPU应用程序,线程将首先对收到的值进行一些计算。这些计算的持续时间甚至可能会有所不同,因为这只有一部分线程可用于隐藏内存延迟。即使在今天的GPU支持大量线程的情况下,通常也需要巧妙的编程来避免由于占用太少而导致性能下降。 –

+0

2.许多线程将向L2缓存发出请求,L2缓存需要具有高吞吐量来处理所有这些并发请求。但是高吞吐量的缓存在内存大小上不一定很大。对于目前的GPU应用来说,更大的二级缓存不会大大提高命中率。如果L2的吞吐量太低,则L2将仅是瓶颈。一个典型的CPU二级缓存很可能会成为GPU的一个真正的瓶颈:虽然其较大的尺寸只能提供稍高的命中率,但它无法处理大量的并发请求。 –

0

GPU是为3D和计算而构建的,因此供应商为核心专门提供了更多的区域。更多的内核需要更多的数据来提供它们,并且需要更多的gpu区域来调度机制,以尽可能保持占用。

太多芯,太多的三维管线如TMUROP,太多的调度部件和太宽存储器控制器喂这些内核。

对于一切,Gpu区域还不够。最不重要的一个似乎是缓存。即使纹理内存比这更重要,而且速度也更快。

使gpu更大意味着生产收益率降低,这意味着利润减少。由于gpu供应商不是慈善组织,他们选择最大利润,最佳性能和节能(最近)。 缓存很贵

在GPU A计算单元可具有比每个线程所以不需要任何乘法使用的数据长距离(如高速缓存和芯)之间传送寄存器的千字节更多,使其具有能量高效化

此外,您可以隐藏某些部分的延迟,具有足够大的计算占用率; 本地共享内存(每个计算单元)和寄存器(每个线程)在实现该功能中扮演更重要的角色。

虽然存储器控制器,L1和L2只能处理100 GB /秒,200 GB/s和300 GB/s的;本地共享存储器和寄存器可高达5 TB/s和15 TB/s的带宽为一个GPU。