一种gpgpu寄存器缓存的实现方法
【专利摘要】本发明公开了一种GPGPU寄存器缓存的实现方法。各个流处理器移除原有寄存器文件,增加用于存储正在执行线程所需寄存器的寄存器缓存,线程执行前从内存中加载寄存器数据到寄存器缓存。在线程执行所需的寄存器能保存在流处理器的寄存器缓存中的前提下,从所有可执行的线程中选择线程数量最多的线程组合执行,从内存中加载选择的线程组合中每个线程所使用的寄存器数据到寄存器缓存,然后以任意方式对线程组合中的线程进行选择执行,当选择的线程组合中所有线程都无法执行时,重新选择另一组线程。本发明减少流处理器寄存器文件所需存储空间,降低能耗和面积,解除流处理器寄存器数量不足的限制,提高系统效率。
【专利说明】一种GPGPU寄存器缓存的实现方法
【技术领域】
[0001]本发明涉及一种缓存实现方法,尤其是涉及一种GPGPU寄存器缓存的实现方法。
【背景技术】
[0002]通用图形处理器GPGPU是一种利用传统上处理图形任务的图形处理器来执行通用计算任务的处理器。GPGPU由多个流处理器组成,每个流处理器包含多个计算单元,流处理器中一个指令解码器控制所有的计算单元,计算单元按照单指令多数据的方式并行地执行指令,从而以较小的管理代价实现大规模数据并行计算。GPGPU中的最小管理单位是线程,每个线程通常用于处理大规模数据中的一个单位的数据。流处理器中一组线程在计算单元上锁步执行,称为锁步执行线程组,锁步执行线程组是流处理器线程调度器调度和指令执行的基本单位。GPGPU的大规模数据处理使得流处理器中包含大量的执行线程,流处理器通过切换不同的锁步执行线程组来尽量保持每个计算部件繁忙,掩盖如访问内存等操作带来的长延迟等待。
[0003]每个线程在执行时需要独立的寄存器文件来存储中间计算结果。流处理器为了支持在不同的锁步执行线程组之间快速切换,内建了大量的存储空间用于保存所有执行的线程所需的寄存器文件,寄存器文件大小是限制流处理器上可执行的线程数量的因素之一。流处理器在一段时间内只能执行部分线程,整个寄存器文件保存的大部分寄存器处于闲置状态并不会被立即使用,因此这些寄存器文件存储占用的GPGPU芯片的能耗和面积在不同的时间内被浪费了。
【发明内容】
[0004]为了解决【背景技术】中存在的问题,本发明的目的在于提供一种GPGPU寄存器缓存的实现方法。
[0005]本发明解决其技术问题所采用的技术方案包括:
各个流处理器中增加寄存器缓存替换寄存器文件,采用基于寄存器缓存的组织方式,并对流处理器线程采用基于寄存器缓存的调度方式。
[0006]所述的基于寄存器缓存的组织方式具体为:
A.1)移除流处理器原有寄存器文件,将原有寄存器文件中的所有寄存器数据保存在内存中,在流处理器内增加用于存储正在执行线程所需寄存器的寄存器缓存;
A.2)线程执行前从内存中加载寄存器数据到寄存器缓存。
[0007]当所述的流处理器执行的线程需要访问寄存器文件时,从寄存器缓存中访问。
[0008]当所述的流处理器的寄存器缓存空间不足时,替换除正在执行线程使用的寄存器数据以外的寄存器缓存的缓存块,并将缓存块中修改过的寄存器数据写回内存。
[0009]所述的基于寄存器缓存的调度方式具体为:
B.1)从所有可执行的线程中选择线程执行,在线程执行所需的寄存器能保存在流处理器的寄存器缓存中的前提下,从中选择线程数量最多的线程组合执行; B.2)从内存中加载步骤B.1)中选择的线程组合中每个线程所使用的寄存器数据到寄存器缓存;
B.3)以任意方式对线程组合中的线程进行选择执行,当选择的线程组合中的所有线程都无法执行时,重复步骤B.1)选择另一组线程执行。
[0010]本发明具有的有益效果是:
本发明减少流处理器中保存寄存器文件所需的存储空间,从而降低GPGPU的能耗和芯片面积,避免了寄存器文件存储占用的GPGPU芯片的能耗和面积在不同的时间内的浪费。并解除流处理器寄存器数量不足的限制,增加可执行的线程数量,提高系统效率。
【专利附图】
【附图说明】
[0011]图1是本发明基于寄存器缓存的组织方式的流程图。
[0012]图2是本发明流处理器基于寄存器缓存的调度方式的流程图。
【具体实施方式】
[0013]下面结合附图和实施例对本发明作进一步说明。
[0014]本发明方法包括:各个流处理器中增加寄存器缓存替换寄存器文件,采用基于寄存器缓存的组织方式,并对流处理器线程采用基于寄存器缓存的调度方式。
[0015]如图1所示,上述的基于寄存器缓存的组织方式具体为:
A.1)移除流处理器原有寄存器文件,将原有寄存器文件中的所有寄存器数据保存在内存中,在流处理器内增加用于存储正在执行线程所需寄存器的寄存器缓存,替换原有寄存器文件。
[0016]A.2)线程执行前从内存中加载寄存器数据到寄存器缓存。
[0017]当所述的流处理器执行的线程需要访问寄存器文件时,从寄存器缓存中访问,因此要在线程执行前从内存中加载所执行线程所需寄存器数据到寄存器缓存。当所述的流处理器的寄存器缓存空间不足时,替换除正在执行线程使用的寄存器数据以外的寄存器缓存的缓存块,并将缓存块中修改过的寄存器数据写回内存。
[0018]如图2所示,上述基于寄存器缓存的调度方式具体为:
B.1)从所有可执行的线程中选择线程执行,在线程执行所需的寄存器能保存在流处理器的寄存器缓存中的前提下,从中选择线程数量最多的线程组合执行。
[0019]B.2)从内存中加载步骤B.1)中选择的线程组合中每个线程所使用的寄存器数据到寄存器缓存。
[0020]B.3)以任意方式对线程组合中的线程进行选择执行,当选择的线程组合中的所有线程都无法执行时,重复步骤B.1)选择另一组线程执行。
[0021]本发明方法的实现原理如下:
I)流处理器寄存器缓存的组织方式
移除流处理器原有的寄存器文件。实际的寄存器文件的数据保存在内存中,由于内存有充足的存储空间,因此可以保存更多线程的寄存器,从而允许更多的线程在流处理器上并发地执行。
[0022]流处理器中增加寄存器缓存,用于存储流处理器中正在执行的线程所需的寄存器。缓存由独立的缓存块构成,例如锁步线程执行中,由于锁步线程组中的线程总是执行同一条指令,这些线程会同时访问属于各自的相同编号的寄存器,因此寄存器缓存中一个缓存块保存整个锁步执行线程组中所有线程所使用的相同编号的寄存器数据,维持局部性。
[0023]锁步执行线程组在执行前检查其所需的寄存器是否在寄存器缓存中,若不存在则通过读请求从内存中读取相应的寄存器缓存块数据。
[0024]流处理器的流水线中,寄存器缓存替换了原寄存器文件。当流处理器执行的线程访问寄存器时,流水线从寄存器缓存的端口读取相应的寄存器数据。由于锁步执行,锁步执行线程组的所有线程在一次访问中都访问同相同编号的寄存器,而同一个锁步执行线程组相同编号的寄存器保存在同一个缓存块中,因此寄存器缓存只需要一次查找操作就能获得所需的所有数据而不会影响流水线性能。
[0025]在从内存读入寄存器缓存块时,若寄存器文件中没有空闲的空间,则需要替换出不使用的缓存块。替换的选择是最近最少被使用的缓存块,此方法容易实现且不需要线程调度器的信息。被替换出的缓存块若被修改过则需要写回内存。每个缓存块在被写入时记录实际写入的字节位图,写回内存时只写回被修改过的部分,从而降低写回的带宽开销。
[0026]2)适用于寄存器缓存的流处理器线程调度方式
传统GPGPU的调度方式是轮流执行流处理器中所有的锁步执行线程组。当这些线程所使用的寄存器超过寄存器缓存的容量时会降低寄存器缓存的重用率,导致缓存抖动。本发明提出适用于寄存器缓存的流处理器线程调度方式。
[0027]第一步从所有可执行的线程中选择尽可能多的线程执行,选择标准是寄存器缓存的空间足够保存所有这些线程所使用的寄存器。从而避免在执行线程时产生寄存器缓存抖动。
[0028]在确定当前可执行的线程后,从内存中加载这些线程所使用的寄存器文件到寄存器缓存中以支持这些线程的执行。加载操作以调度的顺序从第一个将执行的锁步执行线程组所需的寄存器开始加载。
[0029]轮流执行之前选择的所有可执行线程,这一步与从内存中加载寄存器同时进行,在加载完成第一个将执行的锁步执行线程组的寄存器后就开始执行这个线程组,从而以线程组的执行覆盖寄存器文件的加载延迟。
[0030]当之前选择的执行线程中所有的锁步执行线程组都无法继续执行时需要重新选择可执行的线程。这种情况出现的原因是所有锁步执行线程组都在等待访存结果或者执行长延迟的计算指令。这时回到第一步重新选择一组可以执行的线程避免流处理器中计算资源浪费。
[0031]本发明的实施例:
对于步骤A.1)例如:Nvidia GeForce GTX480 GPGPU中,每个流处理器的寄存器文件具有32768个32位寄存器,需要IMB存储空间,将寄存器替换为256KB大小的寄存器缓存后每个流处理器可缓存8192个32位寄存器,从而节省了四分之三的片上存储所需空间。
[0032]对于步骤A.2)例如:流处理器将要执行的线程使用20个寄存器,则从内存中读取这20个寄存器所在的缓存块到寄存器缓存中。假设寄存器缓存的容量为30个寄存器,并且在此之前已经执行了另一个使用20个寄存器的线程,此时寄存器缓存有10个寄存器的空余缓存空间,新线程读取的20个寄存器中的10个可直接保存到这些空闲缓存空间中,其他10个由于缓存已满,首先替换旧线程的最早被访问的10个寄存器,若这10个寄存器中有被修改过的寄存器,则把它们所在的缓存块数据写回内存。同时,这10个寄存器缓存空间被用来保存新线程的后10个寄存器。
[0033]如图2所示,上述基于寄存器缓存的调度方式具体为:
对于步骤B.1):假设寄存器缓存能保存50个寄存器,每个线程需要20个寄存器,此时最多只能选择2个线程所组成的线程组合执行。无法选择更多线程的线程组合,如3个线程需要60个寄存器,无法同时存储在寄存器缓存中。这2个线程选择线程编号相邻的2个线程,比如线程I和线程2,以尽量减少对线程间同步的性能影响。
[0034]对于步骤B.2):按步骤B.1)的实施例选择了 2个线程,每个线程需要20个寄存器,则需要从内存中加载总共40个寄存器到寄存器缓存。
[0035]对于步骤B.3):每个线程执行一条指令后切换到另一个线程执行,按照线程编号循环执行。对于步骤B.1)实施例中选择的2个线程,首先执行第一个线程的第一条指令,然后切换到第二个线程执行第一条指令,再切换回第一个线程执行第二条指令,以此类推。直到这两个线程由于访问内存或其他长延迟操作均无法立即继续执行时,重复步骤B.1)选择另一组线程执行。
[0036]上述【具体实施方式】用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。
【权利要求】
1.一种GPGPU寄存器缓存的实现方法,其特征在于:各个流处理器中增加寄存器缓存替换寄存器文件,采用基于寄存器缓存的组织方式,并对流处理器线程采用基于寄存器缓存的调度方式。
2.根据权利要求1所述的一种GPGPU寄存器缓存的实现方法,其特征在于:所述的基于寄存器缓存的组织方式具体为: A.1)移除流处理器原有寄存器文件,将原有寄存器文件中的所有寄存器数据保存在内存中,在流处理器内增加用于存储正在执行线程所需寄存器的寄存器缓存; A.2)线程执行前从内存中加载寄存器数据到寄存器缓存。
3.根据权利要求2所述的一种GPGPU寄存器缓存的实现方法,其特征在于:当所述的流处理器执行的线程需要访问寄存器文件时,从寄存器缓存中访问。
4.根据权利要求2所述的一种GPGPU寄存器缓存的实现方法,其特征在于:当所述的流处理器的寄存器缓存空间不足时,替换除正在执行线程使用的寄存器数据以外的寄存器缓存的缓存块,并将缓存块中修改过的寄存器数据写回内存。
5.根据权利要求1所述的一种GPGPU寄存器缓存的实现方法,其特征在于:所述的基于寄存器缓存的调度方式具体为: B.1)从所有可执行的线程中选择线程执行,在线程执行所需的寄存器能保存在流处理器的寄存器缓存中的前提下,从中选择线程数量最多的线程组合执行; B.2)从内存中加载步骤B.1)中选择的线程组合中每个线程所使用的寄存器数据到寄存器缓存; B.3)以任意方式对线程组合中的线程进行选择执行,当选择的线程组合中的所有线程都无法执行时,重复步骤B.1)选择另一组线程执行。
【文档编号】G06F12/08GK104182281SQ201410418801
【公开日】2014年12月3日 申请日期:2014年8月25日 优先权日:2014年8月25日
【发明者】吴明晖, 俞立呈, 陈天洲, 裴玉龙, 孟静磊 申请人:浙江大学城市学院