基于访存优先级的GPGPU性能优化方法与流程

文档序号:14923591发布日期:2018-07-13 08:10阅读:338来源:国知局

本发明涉及到高性能处理器性能优化领域,尤其涉及一种基于访存优先级的gpgpu性能优化方法。



背景技术:

gpgpu也即通用图形处理器,最初应用于图形图像处理等领域。随着gpgpu体系结构的发展,其独特的并行计算体系结构使其拥有强大计算能力,它已经成为通用计算领域尤其是高性能计算领域最主要的运算加速部件。

gpgpu内部设计了多个可以并发执行的逻辑运算部件以及大容量的寄存器单元。这种硬件结构支持超大规模多线程(并发线程数量通常可以达到105个以上)的并发执行,并采用单指令多数据(simd)的程序执行模式。为了高效的调度并发执行的线程,gpgpu将多个连续的线程组织为线程块(threadblock,tb),每个tb包含多个线程组(warp),每个线程组通常由32或64个连续的线程组成。正因为有这种多级组织的线程层次结构,gpgpu可以通过快速物理切换线程的执行隐藏线程访存产生的长延时。然而,密集的访存仍然会对gpgpu的整体性能产生较大的影响。尽管gpgpu采用多级存储层次结构来解决访存效率问题,但是运行于gpgpu上的线程数量过多,很容易产生对gpgpu片上资源尤其是cache资源的访问竞争,容易导致cache访问产生“抖动”现象。

近几年,国内外不少学者针对gpgpu的片上资源访问竞争问题,主要从线程调度优化和cache绕行两方面开展相关研究工作。其中,cache绕行不在本专利的考虑范围内。线程调度优化解决gpgpu片上资源访问竞争的工作主要包括线程级并行度(tlp)调节、基于优先级的线程调度、混合任务执行等三方面。

(1)tlp调节

2010年,hsiang-yuncheng等针对多核体系结构的处理器,提出了调节发出访存请求的线程数量,当产生访存竞争时,减少此类线程的并发执行数量。2012年,timothyg.rogers等提出了cache-consciouswavefrontscheduling(ccws)线程调度策略,通过检测每个线程组执行过程中的局部性损失评分,动态的限制发射访存指令的线程组数量。2013年,他们提出了另一种动态调节tlp的线程调度策略divergence-awarewarpscheduling(daws)。与ccws被动调节tlp不同的是,该方法通过比较线程组每次访存所需空间与剩余cache空间的大小,决定该线程组是否可以发射访存指令,从而实现对tlp的调节。2013年,onurkayran等提出了dynamicctaschedulingalgorithm(dyncta)线程调度方法,通过周期性监测空闲线程组数量和gpgpu核的空闲等待周期等参数的变化,动态调节tlp。2014年,国内学者郑重等提出了adaptivecacheandconcurrencyallocation(cca)线程调度策略,该方法根据线程组的cache访问模式和cache使用情况自适应的调节tlp。与以上方法不同的是,同年,minseoklee等提出的线程调度方法中采用了静态调节tlp的策略,通过对第一个线程组的执行周期分析,计算出某个计算任务整个执行过程的tlp值。

调节tlp的线程调度策略通常是在发生cache访问竞争时减少并发执行的线程数量,可以有效降低cache访问竞争的程度,但是在一定程度上会减少片上资源尤其是计算资源的利用率,对gpgpu的性能提升也会产生影响。有的方法减少访存线程的数量,在一定程度上也会降低存储子系统和片上网络的效率。

(2)基于优先级的线程调度

2011和2013年,markgebhart等、veynunarasiman等和adwaitjog等均提出了二级线程调度策略,并将二级线程调度策略和其他的线程调度策略进行有机结合。二级线程调度是将线程组分成优先级高的组和优先级低的组,当优先级高的组中有线程组由于长延时操作挂起,则从优先级低的组中选取一个就绪的线程组,并将其加入到优先级高的组中,同时,优先级高的组中被挂起的线程加入到优先级低的组中。2015年,dongli等提出的token-basedprioritycacheallocation(pcal)策略通过周期性的投票机制动态确定分发的优先级令牌,分配到优先级令牌的线程可以正常访问l1dcache,为分配到优先级令牌的线程组可以正常执行,但是无法访问l1dcache。另外,pcal还根据cache的命中率动态调整活跃的线程组数量。

基于优先级的线程调度方法本质上仍然是通过控制并发执行的线程数量来减少片上资源的访问竞争,同样存在第一类方法的不足。另外,pcal中的优先级令牌机制实现起来相对比较复杂。

(3)混合任务执行

混合任务执行的线程调度方法主要是将不同类型(主要是计算型任务和访存型任务)的任务交替调度,可以有效减少访存任务的聚集,从而有效的防止或减少片上资源访问竞争。2012年,jacobt.adriaens等提出在gpgpu上同时执行多个应用的任务kernel,主要通过将gpgpu的多个处理器核资源在不同应用的任务kernel之间进行划分来实现。2013年,sreepathipai等和mihirawatramani等提出了在时间上混合执行不同应用的任务kernel。在某个应用kernel执行过程中,如果没有足够的计算型任务进行切换,则切换至其他应用的计算型任务kernel执行。

目前的混合任务执行大多是以任务kernel为粒度进行任务调度,需要有不同的应用同时执行,这使得此类方法有一定的局限性。一是需要有多个不同的应用同时执行;二是大部分粗粒度的任务kernel本身也包含相应的访存操作,当其他任务kernel执行过程中出现片上资源访问竞争,难以对这些粗粒度的任务kernel进行精确调度。



技术实现要素:

本专利发明提出的基于访存优先级的gpgpu性能优化方法,目的在于克服现有优先级技术的不足,在不降低线程级并行度的条件下,通过对访存请求的优先级进行量化分析,优先调度线程组间局部性高的访存请求,以此更好的解决gpgpu上的cache访问竞争问题。

为了实现本发明的目的,本发明所采用的技术方案为:

设计一种基于访存优先级的gpgpu性能优化方法,包括如下步骤:

(1)计算mshr中每个表项的表项长度;

(2)计算mshr中每个表项的访存离散度;

(3)计算mshr中每个表项的访存优先级;

(4)选择步骤(3)中计算所得的访存优先级最高的表项对应的访存请求进行发射;

(5)返回至步骤(1),继续下一次访存调度,直至该任务执行结束。

优选的,步骤(2)中,mshr中每个表项的访存离散度等于请求该表项对应访存地址的所有线程组的访存离散度之和。

优选的,步骤(3)中,根据公式(1)计算mshr中每个表项的访存优先级;

访存优先级=el*mwt/emdd(1)

其中,mwt为虑每个访存请求的等待时间;el为mshr中每个表项的表项长度el;emdd为mshr中每个表项的访存离散度emdd。

本发明的有益效果在于:

(1)本方法对访存优先级进行了量化计算,能够准确地反映不同访存请求对系统性能的影响。优先调度访存优先级高的访存请求,可以很好的开发出线程组间的数据局部性,有利于线程组间局部性高的线程组快速执行,使得它们占用的资源可以尽早释放,从而有效降低片上cache的访问竞争;

(2)本方法在计算访存优先级的时候,不仅考虑了线程组间的数据局部性,还考虑每个访存请求的等待时间,可以有效防止访存饥饿现象的出现;

(3)本方法无需对现有的物理结构进行大的改动,算法复杂度不高,实现起来软硬件开销小。

附图说明

图1是基准的gpgpu体系结构示意图;

图2是mpws的逻辑结构示意图;

图3是mpws的调度算法示意图之一;

图4是mpws的调度算法另一示意图;

图5是mpws的调度算法另一示意图。

具体实施方式

下面结合附图和实施例对本发明进一步说明:

实施例1:一种基于访存优先级的gpgpu性能优化方法,本方法通过计算mshr中每个表项对应的访存请求优先级,优先调度访存优先级高的访存请求。

它包含以下步骤:

(1)统计mshr中每个表项的表项长度el;

(2)计算mshr中每个表项的访存离散度emdd,每个表项的访存离散度等于所有请求该表项对应访存地址的线程组的访存离散度之和;

(3)根据公式(1)计算mshr中每个表项的访存优先级;

访存优先级=el*mwt/emdd(1)

其中,mwt为虑每个访存请求的等待时间,通过计算mwt可防止出现访存饥饿现象。

(4)根据步骤(3)中计算所得的的结果选择访存优先级最大的访存请求进行调度;

(5)返回至步骤(1),继续下一次访存调度,直至该任务执行结束。

本实施例对上述各步骤的解释如下:

1.逻辑结构

本专利发明的基于访存优先级的gpgpu性能优化方法主要对图1中的mshr部件进行改进,具体的改进方式如图2所示;图2展示了基于访存优先级的gpgpu访存调度器mpws的逻辑结构;mpws主要包含三部分:改进的mshr、线程组访存离散度表wmddt、最大优先级信息表mpit。

(1)改进的mshr

改进后的mshr增加了四个字段,分别是emdd、mwt、el、ischanged。其中,emdd表示mshr某个表项的访存离散度;mwt表示该表项的访存等待时间;el表示该表项的长度;ischanged表示该表项的表项长度和访存离散度是否发生改变,该字段主要用以减少对优先级的计算次数,从而提高优先级计算的效率。

(2)wmddt

该逻辑结构主要记录了每个线程组的访存离散度,用于计算每个表项的访存离散度。该逻辑结构包含hwid、mdd、mddm三个字段。其中,hwid表示线程组的哈希编号,可以在wmddt中快速定位到某个线程组,使得计算每个表项的emdd时,可以快速获取每个线程组的访存离散度;mdd表示每个线程组的访存离散度;mddm为一个n位的掩码,用以计算每个线程组的访存离散度,其中的每一位表示每个线程组是否请求了mshr中某个表项对应的访存地址。

(3)mpit

mpit只有一个表项,它总是保存当前访存优先级最高的访存请求信息。它包含表项编号eid、表项访存离散度emdd、表项长度el、该表项的访存优先级mrp。每当有新的访存请求到达mshr,在更新所有表项访存优先级的同时,将访存优先级最高的访存信息更新到mpit中。

2.调度算法

对应于上述逻辑结构,其主要调度算法如图3、图4和图5所示,分别对应为新的访存请求达到mshr时表项访存离散度更新算法、发射某个访存请求时表项访存离散度更新算法、访存请求调度算法。

(1)新的访存请求达到mshr时表项访存离散度更新算法

首先,获取到新达到访存请求的线程组编号,并计算出其对应的哈希编号,该线程组的访存离散度相应加1。同时,该访存请求对应表项的长度也加1,并将所有与该线程组相关的表项的ischanged字段置为1。该算法的for循环主要用以更新新到达线程组对应其他表项的访存离散度。

(2)发射某个访存请求时表项访存离散度更新算法

当某个访存请求调度发射后,更新其对应表项中所有线程组的访存离散度和wmddt中对应的掩码字段。该算法中的二重for循环中,外循环用于更新每个线程组的访存离散度,内循环则更新每个线程组对应于mshr中每个表项的访存离散度。

(3)访存请求调度算法

该算法主要由一个for循环组成。该for循环主要用于更新mpit表。为了减少对访存优先级的计算,满足以下三种情形之一的表项均不用重新计算其访存优先级:

a)表项的长度和访存离散度均未发生改变;

b)表项的长度不变,但是表项的访存离散度低于mpit中访存离散度字段值;

c)表项的访存离散度不变,但是表项的长度大于mpit中表项长度字段值。

3.实验方法

该方法可以利用目前流行的模拟器gpgpu-sim(3.2.2)进行验证。首先,需要对该模拟器配置基准gpgpu体系结构的参数,具体配置可以参考表1:

表1

其次,在该模拟器中实现mpws,最后,在修改后的模拟器中执行一组标准的测试程序集,其表2列出了一组标准的测试程序集。

表2

由上述分析可知,本发明专利的方法使用基于访存优先级的线程调度策略,通过量化的方法计算出了每个访存请求的优先级,使得线程组间局部性好的访存请求得以优先调度,可以有效解决gpgpu片上cache访问竞争问题。

基于前文所述可知,本发明提出的基于访存优先级的gpgpu性能优化方法具有如下优点:

(1)本方法对访存优先级进行了量化计算,能够准确地反映不同访存请求对系统性能的影响。优先调度访存优先级高的访存请求,可以很好的开发出线程组间的数据局部性,有利于线程组间局部性高的线程组快速执行,有利于降低片上cache的访问竞争;

(2)本方法在计算访存优先级的时候,不仅考虑了线程组间的数据局部性,还考虑每个访存请求的等待时间,可以有效防止访存饥饿现象的出现;

(3)本方法无需对现有的物理结构进行大的改动,算法复杂度不高,实现起来软硬件开销小。

本发明的实施例公布的是较佳的实施例,但并不局限于此,本领域的普通技术人员,极易根据上述实施例,领会本发明的精神,并做出不同的引申和变化,但只要不脱离本发明的精神,都在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1