消除在增加寄存器时寄存器的溢出量

首先, EU寄存器文件大小增加了。到目前为止,英特尔图形核心寄存器文件是有限的,但寄存器是不够的。因此,EU必须有能力处理寄存器文件溢出,这就不得不从高速缓存和内存寄存器撤出数据。

然而,这样处理寄存器溢出可降低吞吐量,通过移动不必要的数据也可减少电力消耗。因此,英特尔Sandy Bridge扩展寄存器文件,在大多数情况下,都必须存储在物理寄存器中。Piazza 解释道,据估计寄存器溢出功能都是由硬件负责处理。

 

Sandy Bridge的晶片布局

一般而言,GPU在每线程的物理寄存器的数量是不固定的,比如在本地着色器在运行期间被分配给图形指令。通常图形只需要少量的寄存器一般4到8个),而通用程序最佳情况是需要32个寄存器。但当启动一个线程时,必须减少寄存器的每个线程。

GPU的多线程较强的隐藏了内存延迟,大量的启动线程需要大量的寄存器。如果限制启动线程数量,将有可能停顿内存延迟。隐藏CPU缓存延迟,也将隐藏GPU的寄存器延迟。

通用程序和复杂着色器需要更多的寄存器来压入寄存器文件。在这种情况下,要启动一定数量的线程,物理寄存器将从内部和外部存储器上读取数据以避免不回收而造成的数据丢失。据推测目前的英特尔图形就是这种情况。

这将解决寄存器文件扩展名的问题。当然增加寄存器数量也会占据晶片面积。事实上,NVIDIA和AMD的GPU都存在着寄存器占用晶片面积的情况。英特尔图形核心也将面临这种情况。


相关内容