CN105653243B - 一种通用图形处理器多任务并发执行的任务派发方法 - Google Patents
一种通用图形处理器多任务并发执行的任务派发方法 Download PDFInfo
- Publication number
- CN105653243B CN105653243B CN201510977450.0A CN201510977450A CN105653243B CN 105653243 B CN105653243 B CN 105653243B CN 201510977450 A CN201510977450 A CN 201510977450A CN 105653243 B CN105653243 B CN 105653243B
- Authority
- CN
- China
- Prior art keywords
- kernel function
- thread block
- kernel
- type
- bypass
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 58
- 238000012545 processing Methods 0.000 title claims abstract description 32
- 238000013459 approach Methods 0.000 claims abstract description 5
- 230000000116 mitigating effect Effects 0.000 claims abstract description 3
- 230000006870 function Effects 0.000 claims description 268
- 238000005070 sampling Methods 0.000 claims description 30
- 238000000205 computational method Methods 0.000 claims 1
- 238000005516 engineering process Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 101000985296 Homo sapiens Neuron-specific calcium-binding protein hippocalcin Proteins 0.000 description 2
- 101000935117 Homo sapiens Voltage-dependent P/Q-type calcium channel subunit alpha-1A Proteins 0.000 description 2
- 102100025330 Voltage-dependent P/Q-type calcium channel subunit alpha-1A Human genes 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 241000687919 Rodinia Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 238000013517 stratification Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公布了一种通用图形处理器多任务并发执行的任务派发方法,通过线程块派发引擎方法首先将核函数进行分类,然后根据核函数分类计算得到向一个流处理器分别派发的核函数的线程块数目,将不同核函数相应数目的线程块派发到同一个流多处理器中,以达到提高通用图形处理器中每个流多处理器资源的利用率,提升系统性能和能效比的目的。本发明还可进一步利用一种一级数据缓存旁路方法,该方法首先通过动态方法来确定旁路哪一个核函数的线程块,根据相应核函数的旁路的线程块的数目进行旁路,以达到减轻一级数据缓存的压力、进一步提高性能的目的。
Description
技术领域
本发明属于高性能计算技术领域,涉及高性能计算中多任务并发执行方法,尤其涉及一种通用图形处理器(GPGPU)多任务并发执行的任务派发方法。
背景技术
通用图形处理器(GPGPU)是一种利用图形处理器众核结构、多线程和高访存带宽的特点来处理生物计算、图像处理和物理仿真模拟等高性能计算任务的处理器。在现代计算中,计算任务对高性能和高吞吐率的迫切需求,使通用图形处理器在计算领域中被广泛利用并且扮演着越来越重要的角色。而且,随着云计算的发展以及计算终端的普及,越来越多的任务被同时发送到通用图形处理器中等待执行。因此,通用图形处理器中的多任务并发执行技术,对于高效利用计算资源以及提升计算速度和能效性具有重要影响。
中央处理器(CPU)将计算任务分配给通用图形处理器,然后,计算任务以核函数(Kernel)的形式在通用图形处理器中执行。当核函数被发射到通用图形处理器时,核函数会产生一个称为计算网格(Grid)的计算任务实例。一个计算网格包含成百上千的线程(Thread)。这些线程通过层次化的方式被组织管理。每32个线程组成一个线程束(Warp),若干个线程束进一步被组织成一个线程块(Block)。一个计算网格中线程块的数目和每个线程块中线程的数目,由程序员编程时指定。
硬件上,每个通用图形处理器由多个流多处理器(Streaming Multiprocessor,SM)组成,这些流多处理器通过互连网络与片外存储资源相连。每个流多处理器中包含3种存储资源:寄存器堆(Register File)、一级缓存(L1Cache)和共享存储器(SharedMemory);以及3种单指令流多数据流(SIMD)的执行单元:流处理器(Streaming Processor,SP)、特殊功能单元(Special Function Unit,SFU)和装载储存单元(Load/Store Unit,LDST)。通用图形处理器拥有一个线程块派发引擎,负责将核函数的线程块派发到流多处理器中。每个流多处理器中有若干个线程束调度器,来调度管理线程束的执行。
不同的核函数对于计算资源需求存在着明显的差异。例如,一个核函数属于计算密集型,对流多处理器需求高,但不能充分利用通用处理器高的访存带宽;另一个核函数属于访存密集型,对于存储资源需求高,但不能充分利用流多处理器的计算能力。因此,执行单个核函数时,通用图形处理器的计算资源往往不能被充分利用。可采用多任务并发执行提高资源利用率。
2012年,美国威斯康星大学麦迪逊分校(University of Wisconsin-Madison)的Adriaens等人提出一种空间多任务并发管理方案(Published on:High PerformanceComputer Architecture(HPCA),2012IEEE 18th International Symposium on,Pages 1-12)。该方案通过将这些流多处理器进行空间上的划分,分配给不同的核函数,来平衡不同核函数对流多处理器和片外存储资源的不均衡需求。该方法是一种粗粒度的并发技术,虽然能平衡流多处理器与片外存储资源的利用,然而,一个流多处理器内部较低的计算资源利用率仍然是一个很严重的问题。
2014年,韩国科学技术院(Korea Advanced Institute of Science andTechnology,KAIST)的Lee等人针对一个流多处理器内部计算资源利用率低的问题,提出了一种混合并发核函数执行方案(Published on:High Performance ComputerArchitecture(HPCA),2014IEEE 20th International Symposium on,Pages 260-271)。该方案提出不同的核函数可以同时发射到一个流多处理器上,从而提高流多处理器内部计算资源的利用率。但是,该方案没有具体处理流多处理器内部不同核函数线程块的调度问题,也没有提出针对一级数据缓存污染的优化方案。
发明内容
为了克服上述现有技术的不足,本发明提供一种通用图形处理器多任务并发执行的任务派发方法,包括线程块派发引擎方法和一级数据缓存旁路方法,可以高效利用流多处理器内部的计算资源。
本发明提供的技术方案是:
一种通用图形处理器多任务并发执行的任务派发方法,通过线程块派发引擎方法首先将核函数进行分类,然后根据分类信息计算得到向一个流处理器中分别派发的核函数的线程块数目,将不同核函数相应数目的线程块派发到同一个流多处理器中,以达到提高通用图形处理器中每个流多处理器资源的利用率,提升系统性能和能效比的目的;所述线程块派发引擎方法包括如下步骤:
A1)针对两个核函数的组合{A,B},将核函数进行分类:设定TypeA和TypeB分别表示核函数A和核函数B的种类,依据每个核函数单独运行时性能最佳的线程块数目opt(Kernel)与一个流多处理器最多可以容纳的来自核函数的线程块数目max(Kernel)的大小关系,对核函数进行分类;分类过程如下:
A11)单独执行每个核函数多次,每次线程块派发引擎向流多处理器中派发不同数目的线程块。
A12)对A11)中所有情况,比较它们的执行时间(性能),取执行时间最短的情况,将这种情况中每个流多处理器上的线程块数目定义为opt(Kernel)。
A13)如果A12)中opt(Kernel)=1,我们将该核函数分类为Type Down;如果opt(Kernel)=max(Kernel)(其中max(Kernel)中指的是一个流多处理器最多可以容纳的来自核函数的线程块数目),我们将该核函数分类为Type Up;其他情况,我们将该核函数分类为Type Optimal。
A2)设定TbA和TbB分别表示线程块派发引擎向一个流处理器中分别派发的核函数A和核函数B的线程块数目,根据分类信息计算得到TbA和TbB;具体步骤如下所示:
A21)核函数的类型包括Type Down、Type Up和Type Optimal;对于两个并发执行的核函数组合{A,B},两个核函数A、B的类型分别设为TypeA和TypeB;其中有一个核函数的类型属于Type Down或者Type Optimal;本发明不适用于两个核函数都属于Type Up类型的情况。
A22)根据核函数A、B的类型,分别计算得到TbA和TbB;
当核函数A的类型为Down,核函数B的类型为Up时,TbA=opt(A),TbB等于利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r;
由于每一个线程块都会占据流多处理器中的线程、共享存储和寄存器,定义流多处理器中线程、共享存储和寄存器的总资源分别为TM、SM和RM,核函数A的每一个线程块在执行期间所占据的三种资源分别为TA、SA和RA,核函数B的每一个线程块在执行期间所占据的三种资源分别为TB、SB和RB。ComputeRemain(A)是在流多处理器中派发了TbA个核函数A的线程块之后还能派发的核函数B的线程块数目,具体计算方法为取线程块数目最大值r,同时满足以下3个不等式:r×TB+TbA×TA≤TM;r×SB+TbA×SA≤SM;r×RN+TbA×RA≤RM。
当核函数A的类型为Down,核函数B的类型为Optimal时,TbA=opt(A),TbB等于利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r与opt(B)中的较小者;
当2个核函数的类型都为Down时,TbA=opt(A),TbB=opt(B);
当2个核函数的类型都为Optimal时,TbA=opt(A),TbB为利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r与opt(B)中的较小者;
当核函数A的类型为Optimal,核函数B的类型为Up时,TbA=opt(A),TbB为利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r;
A3)根据TbA和TbB,向通用图形处理器(GPGPU)的一个流处理器中分别派发相应数目的核函数A和核函数B的线程块。
A4)循环执行上述A3),直到其中的一个核函数(不妨假设A)执行完成,也就是核函数A剩余线程块数目为0;如果最后核函数(不妨假设A)剩余线程块数目小于TbA,向流多处理器派发核函数A所有剩余线程块数目;
A5)此时从两个核函数{A,B}的并发执行变为核函数B单独执行,B单独执行期间,向流多处理器中发射的核函数B的线程块数目为opt(B),当核函数B剩余线程块数目小于opt(B)时,向流多处理器派发核函数B所有剩余线程块数目;直到核函数B执行完成。
当处理多个核函数的线程块派发时,将这些核函数看作一个任务池,先从这些核函数中选择两个核函数作为核函数{A,B},按照上述步骤A1~A4进行线程块派发,即向通用图形处理器(GPGPU)的一个流处理器中分别派发相应数目的核函数A和核函数B的线程块。当其中的一个核函数(不妨假设为A)执行完成之后,从未执行的核函数中选择一个与未完成的核函数(B)重新组合成{A,B},继续按照上述步骤A1~A4进行线程块派发。当任务池没有未执行的任务,即多任务只剩下未完成的核函数(B)时,此时向流多处理器中发射的核函数B的线程块数目为opt(B),当核函数B剩余线程块数目小于opt(B)时,向流多处理器派发核函数B所有剩余线程块数目;直到核函数B执行完成。
本发明还提供一种一级数据缓存旁路方法,该方法在上述步骤A3)之后、A4)之前执行。首先通过动态方法来确定旁路哪一个核函数的线程块,根据相应核函数的旁路的线程块的数目进行旁路,以达到减轻一级数据缓存的压力、进一步提高性能的目的;该方法执行如下操作:
B1)对于两个核函数的组合{A,B},设定ByA和ByB分别表示旁路的核函数A的线程块的数目和旁路的核函数B的线程块的数目;ByA和ByB的范围是0≤ByA≤TbA,0≤ByB≤TbB。只选择其中一个核函数的线程块进行旁路操作;当选择核函数A的线程块进行旁路操作时,ByA不等于0,ByB等于0;当选择核函数B的线程块进行旁路操作时,ByB不等于0,ByA等于0;设定代表当ByA个来自核函数A的线程块旁路一级缓存时在一个抽样周期里流多处理器的空闲时钟总数;设定代表当ByB个来自核函数B的线程块旁路一级缓存时,在一个抽样周期里流多处理器的空闲时钟总数;设定Stallnone代表没有任何线程块旁路一级缓存时,在一个抽样周期里流多处理器的空闲时钟总数;
设定ByA和ByB的初始值均为0,ByA=ByB=0;在一个抽样周期之后,得到Stallnone;将一个抽样周期作为TbA个核函数A的线程块和TbB个核函数B的线程块的生命期;TbA和TbB是在上述步骤A22中根据核函数分类计算得到的向一个流处理器中分别派发的核函数A和核函数B的线程块数目;
B2)分别针对两个核函数进行旁路操作,分别得到相应核函数的线程块旁路一级缓存时在一个抽样周期里流多处理器的空闲时钟总数:
针对核函数A进行旁路操作,即设定ByA=1,ByB=0;在一个抽样周期之后,得到
在抽样周期中,ByA是动态变化的,ByA的范围是0≤ByA≤TbA;
针对核函数B进行旁路操作,即设定ByB=1,ByA=0;在一个抽样周期之后,得到
在抽样周期中,ByB是动态变化,ByB的范围是0≤ByB≤TbB;
B3)比较Stallnone、和当Stallnone是最小值时,不旁路任一核函数;当是最小值时,选择核函数A进行旁路操作,设置ByA=1;当是最小值时,选择核函数B进行旁路操作,设置ByB=1;
B4)对选择的核函数进行旁路,该核函数表示为核函数C(可能为核函数A或核函数B):选择ByC+1个核函数C的线程块旁路一级数据缓存,经过一个抽样周期之后,收集得到当时,ByC增加1,继续执行步骤B4);否则,ByC减少1,结束操作;当ByC达到了上限TbC,停止更新ByC,结束操作。
考虑多个核函数并发执行的情况,由于线程块派发引擎方法通过每次选择两个核函数{A,B}来完成执行,因此上述针对两个核函数{A,B}的一级数据缓存旁路技术可以被直接应用到多个核函数并发执行的场景中。
与现有技术相比,本发明的有益效果是:
本发明提供一种通用图形处理器多任务并发执行的任务派发方法,包括线程块派发引擎方法,还可进一步执行一级数据缓存旁路方法;其中,线程块派发引擎方法通过将不同核函数的线程块派发到同一个流多处理器中,克服了由于单一核函数对于计算资源和存储资源的不均衡利用而导致的资源利用率低的情况,可以提高通用图形处理器中每个流多处理器资源的利用率,从而提升系统性能和能效比。由于将不同核函数的线程块派发到同一个流多处理器中会导致一级数据缓存污染从而影响性能,为解决这一问题,可通过一级数据缓存旁路方法旁路一部分线程块,以减轻一级数据缓存的压力,从而达到进一步提高计算性能的目的。
附图说明
图1是本发明通过线程块派发引擎方法将不同核函数的线程块派发到同一个流多处理器中的示意图;
其中,(a)为包含多个线程块的不同核函数;(b)为同一个流多处理器中包含不同核函数的线程块。
图2是本发明提供的线程块派发引擎方法的流程框图。
图3是本发明实施例中通过一级数据缓存旁路方法旁路核函数的一部分线程块,以减轻一级数据缓存的压力的示意图;
其中,(a)为包含多个线程块的流多处理器;(b)为线程块访问缓存的两种模式(箭头直接指向二级缓存表示该线程块旁路了一级缓存;箭头先指向一级缓存然后再指向二级缓存表示该线程块访问了一级缓存)。
图4是本发明提供的一级数据缓存旁路方法步骤流程框图。
图5是本发明实施例中采用一级数据缓存旁路方法的步骤流程示意图。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
图1是本发明通过线程块派发引擎方法将不同核函数的线程块派发到同一个流多处理器中的示意图。如图1所示,(a)中的矩形从上到下分别为包含多个线程块的不同核函数:核函数A和核函数B;其中白色方块代表核函数A的线程块,黑色方块代表核函数B的线程块;(b)为同一个流多处理器中包含不同核函数的线程块;图中线程块派发引擎左边的矩形从上到下分别代表核函数A和核函数B,其中白色方块代表核函数A的线程块,黑色方块代表核函数B的线程块;(b)为同一个流多处理器中包含不同核函数的线程块;(b)中的圆形代表流多处理器,流多处理器中的方块代表派发到该流多处理器上的线程块。线程块派发引擎负责将不同核函数的线程块派发到同一个流多处理器中。线程块派发引擎首先计算流多处理器中同时可以运行的每个核函数的线程块数目;当流多处理器中的一个线程块完成之后,线程块派发引擎会向流多处理器派发一个来自相同核函数的新的线程块,直到核函数中的所有线程块都完成执行。
本实施例针对两个核函数的组合{A,B},通过线程块派发引擎将核函数组合{A,B}的线程块派发到同一个流多处理器中。其中,设定TbA和TbB分别表示线程块派发引擎向一个流处理器中分别派发的核函数A和核函数B的线程块数目。本发明提供的线程块派发引擎方法首先将核函数进行分类,然后根据分类信息计算TbA和TbB;具体包括如下步骤:
A1)首先,将核函数进行分类。设定TypeA和TypeB分别表示核函数A和核函数B的种类,依据每个核函数单独运行时性能最佳的线程块数目opt(Kernel)与一个流多处理器最多可以容纳的来自核函数的线程块数目max(Kernel)的大小关系,对核函数进行分类;分类过程如下:
A11)单独执行每个核函数多次,每次线程块派发引擎向流多处理器中派发不同数目的线程块。
A12)对A11)中所有情况,比较它们的执行时间(性能),取执行时间最短的情况,将这种情况中每个流多处理器上的线程块数目定义为opt(Kernel)。
A13)如果A12)中opt(Kernel)=1,我们将该核函数分类为Type Down;如果opt(Kernel)=max(Kernel)(其中max(Kernel)中指的是一个流多处理器最多可以容纳的来自核函数的线程块数目),我们将该核函数分类为Type Up;其他情况,我们将该核函数分类为Type Optimal。
A2)根据分类信息计算得到TbA和TbB;具体步骤如下所示:
A21)核函数的类型包括Type Down、Type Up和Type Optimal;对于两个并发执行的核函数组合{A,B},两个核函数A、B的类型分别设为TypeA和TypeB;其中有一个核函数的类型属于Type Down或者Type Optimal;本发明不适用于两个核函数都属于Type Up类型的情况。
A22)根据核函数A、B的类型,分别计算得到TbA和TbB;
当核函数A的类型为Down,核函数B的类型为Up时,TbA=opt(A),TbB等于利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r(以下伪代码中的1-4行);
当核函数A的类型为Down,核函数B的类型为Optimal时,TbA=opt(A),TbB等于利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r与opt(B)中的较小者(以下伪代码中的5-8行);
当2个核函数的类型都为Down时,TbA=opt(A),TbB=opt(B)(以下伪代码中的9-11行);
当2个核函数的类型都为Optimal时,TbA=opt(A),TbB为利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r与opt(B)中的较小者(以下伪代码中的12-15行);
当核函数A的类型为Optimal,核函数B的类型为Up时,TbA=opt(A),TbB为利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r(以下伪代码中的16-19行)。
以下是不同情况下计算得到TbA和TbB的方法的伪代码:
其中,算法的输入为2个核函数的组合{A,B},以及它们的类型TypeA和TypeB;在不同情况下分别计算得到线程块派发引擎向一个流处理器中分别派发的核函数A和核函数B的线程块数目TbA和TbB。
A3)根据TbA和TbB,向通用图形处理器(GPGPU)的一个流处理器中分别派发相应数目的核函数A和核函数B的线程块。
上述线程块派发引擎方法将不同核函数的线程块派发到通用图形处理器(GPGPU)的同一个流多处理器中进行处理。不同核函数的线程块,由于其访问数据集不同,会对一级数据缓存造成严重的污染和竞争。本发明还提供一种动态一级数据缓存旁路方法,通过选择一些线程块旁路一级数据缓存,从而减轻一级数据缓存的压力。
图3是本发明实施例中通过一级数据缓存旁路方法旁路核函数的一部分线程块,以减轻一级数据缓存的压力的示意图;其中,(a)为包含多个线程块的流多处理器;(b)为线程块访问缓存的两种模式(箭头直接指向二级缓存表示该线程块旁路了一级缓存;箭头先指向一级缓存然后再指向二级缓存表示该线程块访问了一级缓存);图3中有箭头直接指向二级数据缓存的线程块表示该线程块旁路了一级数据缓存。
图4是本发明提供的一级数据缓存旁路方法的流程框图。对于两个核函数的组合{A,B},ByA和ByB分别表示旁路的核函数A和核函数B的线程块的数目。本发明提供的动态一级数据缓存旁路方法选择一个核函数的线程块进行旁路操作,因此,ByA或者ByB会等于0。设定代表当ByA个来自核函数A的线程块旁路一级缓存时在一个抽样周期里流多处理器的空闲时钟总数;设定代表当ByB个来自核函数B的线程块旁路一级缓存时,在一个抽样周期里流多处理器的空闲时钟总数。流多处理器空闲适中的数目和性能成反相关,空闲越多,性能越差。本实施例中,选用流多处理器的空闲时钟数作为监测变量。设定Stallnone代表没有任何线程块旁路一级缓存时,在一个抽样周期里流多处理器的空闲时钟总数。本发明提供的一级数据缓存旁路方法,首先通过动态方法来确定旁路哪一个核函数的线程块,再得到旁路的线程块的数目,根据得到的相应核函数的旁路的线程块的数目进行旁路,以达到进一步提高性能的目的;该方法包括如下步骤:
B1)设定ByA和ByB的初始值均为0,ByA=ByB=0;在一个抽样周期之后,得到Stallnone;将一个抽样周期作为TbA个核函数A的线程块和TbB个核函数B的线程块的生命期;
B2)针对核函数A进行旁路操作,即设定ByA=1,ByB=0;在一个抽样周期之后,得到
B3)针对核函数B进行旁路操作,即设定ByB=1,ByA=0;在一个抽样周期之后,得到
然后,比较Stallnone、和如果Stallnone是最小值,那么不旁路任一核函数;如果是最小值,那么我们选择核函数A进行旁路操作,设置ByA=1;对于核函数B,亦然。
B4)假设我们选择核函数A进行旁路;经过一个抽样周期之后,我们收集如果那么ByA增加1,继续步骤B4);否则,ByA减少1,此时结束操作;如果,ByA达到了上限TbA,将停止更新ByA,结束操作。
下面通过实施例对本发明作进一步说明。
本实施例针对两个核函数spmv和backprop,这两个核函数分别来自于parboil标准测试集和rodinia标准测试集。由于每一个流多处理器的资源有限,而核函数的每个线程块都会占据一定资源,不同核函数由于其计算任务和类型的不同所需资源情况不同。对于spmv来讲,一个流多处理器的资源最多足够容纳8个spmv的线程块。对于backprop来讲,一个流多处理器的资源最多足够容纳6个backprop的线程块。
首先,通过线程块引擎派发方法向流多处理器派发不同数目的线程块:第一步,对spmv和backprop进行分类。第二步,根据分类信息,计算线程块数目;然后向流多处理器派发相应数目的spmv和backprop线程块。具体操作如下:
对于spmv,我们单独执行spmv多次,每次向流多处理器派发不同数目的线程块。我们得到当向流多处理器派发的线程块数目为3时,spmv的执行时间最短,性能最高,因此opt(spmv)=3。流多处理器上同时可并发执行的最大数目的线程块max(spmv)=8。因此spmv属于Type Optimal,并且opt(spmv)=3。对于backprop,执行类似的操作,我们得到当向流多处理器派发线程块数目为6时,backprop的执行时间最短,性能最高,因此opt(backprop)=6,流多处理器同时可并发执行的最大数目的线程块max(backprop)=6。因此,backprop属于Type Up,并且opt(backprop)=6。
根据上述不同情况下计算得到TbA和TbB的方法的伪代码,spmv和backprop分别对应为核函数A和核函数B。spmv的线程块数目为3。此时,用流多处理器剩下的资源最多可以派发2个backprop的线程块。因此,Tbspmv=3,Tbbackprop=2。
进一步地,可通过一级缓存旁路方法(策略)对多任务并发执行进行管理。对于spmv和backprop,由线程块派发引擎方法得到Tbspmv=3,Tbbackprop=2。如图5所示,图中线程块标1表示该线程块会旁路一级数据缓存,标0表示该线程块不旁路一级数据缓存。灰色(线程)块为核函数A的线程块,白色(线程)块为核函数B的线程块。从t1开始第一个抽样周期,在t2时刻,已经有至少3个spmv的线程块和2个backprop的线程块执行完成,该时刻就是第一个抽样周期的结束时刻,也是上述步骤B1的完成时刻。从t2时刻开始,只选择spmv的一个线程块旁路一级数据缓存,在t3时刻,第二个抽样周期结束,即上述步骤B2的完成时刻。从t3时刻开始,只选择backprop的一个线程块旁路一级数据缓存,在t4时刻,第三个抽样周期结束,也就是上述步骤B3的完成时刻。此时,通过对比Stallnone,和得到最小,因此选择对backprop的线程块进行旁路操作。从t4时刻,我们经过两个周期t4到t5,以及t5到t6,得到Byspmv=ByA=0,Bybackprop=ByB=1。
上述一级数据缓存旁路方法,首先通过动态方法来确定旁路哪一个核函数的线程块,再得到旁路的线程块的数目,根据得到的相应核函数的旁路的线程块的数目进行旁路,以达到进一步提高性能的目的。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (5)
1.一种通用图形处理器多任务并发执行的任务派发方法,通过线程块派发引擎方法首先将核函数进行分类,然后根据核函数分类计算得到向一个流多处理器分别派发的核函数的线程块数目,将不同核函数相应数目的线程块派发到同一个流多处理器中,以达到提高通用图形处理器中每个流多处理器资源的利用率,提升系统性能和能效比的目的;所述线程块派发引擎方法包括如下步骤:
A1)将核函数进行分类,核函数的种类包括Type Down、Type Up和Type Optimal;所述核函数进行分类,分类过程执行操作A11)~A13):
A11)单独执行每个核函数Kernel多次,每次向流多处理器中派发不同数目的线程块,得到相应的执行时间;
A12)将A11)中执行时间最短时每个流多处理器上的线程块数目定义为opt(Kernel);
A13)当A12)中opt(Kernel)等于1时,该核函数Kernel的分类为Type Down;当opt(Kernel)等于max(Kernel)时,该核函数分类为Type Up,所述max(Kernel)是一个流多处理器最多可以容纳的来自一个核函数的线程块数目;当opt(Kernel)不等于1且opt(Kernel)不等于max(Kernel)时,该核函数分类为Type Optimal;
A2)针对多个核函数的线程块,将所述多个核函数看作一个任务池,先从这些核函数中选择两个核函数作为核函数{A,B},设定TbA和TbB分别表示线程块派发引擎向一个流多处理器中分别派发的核函数A和核函数B的线程块数目,根据A1)分类得到的核函数的种类信息,计算得到TbA和TbB;
A21)对于两个并发执行的核函数组合{A,B},两个核函数A、B的类型分别设为TypeA和TypeB,当两个核函数TypeA和TypeB都属于Type Up类型时,结束操作;当所述TypeA和TypeB中至少有一个核函数的类型属于Type Down或者Type Optimal时,继续执行如下操作;
A22)根据核函数A、B的类型TypeA和TypeB,分别计算得到TbA和TbB;包括如下情形:
当核函数A的类型为Type Down,核函数B的类型为Type Up时,TbA=opt(A),TbB等于利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r;
当核函数A的类型为Type Down,核函数B的类型为Type Optimal时,TbA=opt(A),TbB等于利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r与opt(B)中的较小者;
当两个核函数A、B的类型都为Type Down时,TbA=opt(A),TbB=opt(B);
当两个核函数A、B的类型都为Type Optimal时,TbA=opt(A),TbB为利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r与opt(B)中的较小者;
当核函数A的类型为Type Optimal,核函数B的类型为Type Up时,TbA=opt(A),TbB为利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r;
A3)根据TbA和TbB,向通用图形处理器(GPGPU)的一个流多处理器中分别派发相应数目的核函数A和核函数B的线程块;
A4)循环执行上述A3),当其中有核函数的剩余线程块数目小于向流多处理器派发的相应线程块数目时,向流多处理器派发该核函数所有剩余线程块数目,该核函数的剩余线程块数目为0,该核函数执行完成;此时从两个核函数{A,B}的并发执行变为一个核函数的单独执行;当任务池中的核函数数目为0时,执行步骤A5);当任务池中的核函数数目不为0时,从任务池中选择一个与未完成的核函数重新组合成{A,B},继续按照上述步骤A2) ~A4)进行线程块派发;
A5)在一个核函数Kernel单独执行期间,向流多处理器中派发该核函数的线程块数目为opt(Kernel),当核函数的剩余线程块数目小于opt(Kernel)时,向流多处理器派发该核函数的所有剩余线程块数目;直到该核函数执行完成。
2.如权利要求1所述通用图形处理器多任务并发执行的任务派发方法,其特征是,所述利用剩下的计算资源Compute Remain(A)所能派发的最大线程块数目r通过以下过程得到:
设定流多处理器中线程、共享存储和寄存器的总资源分别为TM、SM和RM;
设定核函数A的每一个线程块在执行期间所占据的线程、共享存储和寄存器资源分别为TA、SA和RA;设定核函数B的每一个线程块在执行期间所占据的线程、共享存储和寄存器资源分别为TB、SB和RB;
所述剩下的计算资源Compute Remain(A) 具体指的是在流多处理器中派发了TbA个核函数A的线程块之后还能派发的核函数B的线程块数目,计算方法为取所述最大线程块数目r,同时满足以下不等式:r×TB+TbA×TA≤TM;r×SB+TbA×SA≤SM;r×RB+TbA×RA≤RM。
3.如权利要求1所述通用图形处理器多任务并发执行的任务派发方法,其特征是,在所述步骤A3)之后,执行一级数据缓存旁路方法,再继续执行步骤A4);所述一级数据缓存旁路方法首先通过动态方法来确定旁路哪一个核函数的线程块,然后根据相应核函数的旁路的线程块的数目进行旁路,以达到减轻一级数据缓存的压力、进一步提高性能的目的;所述一级数据缓存旁路方法执行如下操作:
B1)对于两个核函数的组合{A,B},设定ByA和ByB分别表示旁路的核函数A的线程块的数目和旁路的核函数B的线程块的数目,只选择其中一个核函数的线程块进行旁路操作;当选择核函数A的线程块进行旁路操作时,ByA不等于0,ByB等于0;当选择核函数B的线程块进行旁路操作时,ByB不等于0,ByA等于0;设定代表当ByA个来自核函数A的线程块旁路一级缓存时在一个抽样周期里流多处理器的空闲时钟总数;设定代表当ByB个来自核函数B的线程块旁路一级缓存时,在一个抽样周期里流多处理器的空闲时钟总数;设定Stallnone代表没有任何线程块旁路一级缓存时,在一个抽样周期里流多处理器的空闲时钟总数;
设定ByA和ByB的初始值均为0;在一个抽样周期之后,得到Stallnone;将一个抽样周期作为TbA个核函数A的线程块和TbB个核函数B的线程块的生命期;
B2)分别针对两个核函数进行旁路操作,分别得到相应核函数的线程块旁路一级缓存时在一个抽样周期里流多处理器的空闲时钟总数;
B3)比较Stallnone、和选择进行旁路的核函数,将选择进行旁路的核函数设为核函数C;
B4)将选择进行旁路的核函数设为核函数C,选择ByC+1个核函数C的线程块旁路一级数据缓存,经过一个抽样周期之后,收集得到当时,ByC增加1,继续执行步骤B4);否则,ByC减少1,结束操作;当ByC达到上限时,停止更新ByC,结束操作。
4.如权利要求3所述通用图形处理器多任务并发执行的任务派发方法,其特征是,B3)所述选择进行旁路的核函数,具体是:
当Stallnone是最小值时,不旁路任一核函数;
当是最小值时,选择核函数A进行旁路操作,设置ByA=1;
当是最小值时,选择核函数B进行旁路操作,设置ByB=1。
5.如权利要求4所述通用图形处理器多任务并发执行的任务派发方法,其特征是,所述ByA和ByB的范围是0≤ByA≤TbA,0≤ByB≤TbB。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510977450.0A CN105653243B (zh) | 2015-12-23 | 2015-12-23 | 一种通用图形处理器多任务并发执行的任务派发方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510977450.0A CN105653243B (zh) | 2015-12-23 | 2015-12-23 | 一种通用图形处理器多任务并发执行的任务派发方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105653243A CN105653243A (zh) | 2016-06-08 |
CN105653243B true CN105653243B (zh) | 2018-03-30 |
Family
ID=56476723
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510977450.0A Active CN105653243B (zh) | 2015-12-23 | 2015-12-23 | 一种通用图形处理器多任务并发执行的任务派发方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105653243B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106686352B (zh) * | 2016-12-23 | 2019-06-07 | 北京大学 | 多gpu平台的多路视频数据的实时处理方法 |
US10558499B2 (en) * | 2017-10-26 | 2020-02-11 | Advanced Micro Devices, Inc. | Wave creation control with dynamic resource allocation |
CN110969565B (zh) * | 2018-09-28 | 2023-05-16 | 杭州海康威视数字技术股份有限公司 | 图像处理的方法和装置 |
CN114493980B (zh) * | 2021-12-30 | 2024-08-20 | 清华大学 | 内核函数传输方法、装置及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103064657A (zh) * | 2012-12-26 | 2013-04-24 | 深圳中微电科技有限公司 | 单个处理器上实现多应用并行处理的方法及装置 |
US8566647B2 (en) * | 2010-12-20 | 2013-10-22 | Microsoft Corporation | Debugger presentation of parallel application threads |
CN105117369A (zh) * | 2015-08-04 | 2015-12-02 | 复旦大学 | 一种基于异构平台的多种并行错误检测体系架构 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9804995B2 (en) * | 2011-01-14 | 2017-10-31 | Qualcomm Incorporated | Computational resource pipelining in general purpose graphics processing unit |
-
2015
- 2015-12-23 CN CN201510977450.0A patent/CN105653243B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8566647B2 (en) * | 2010-12-20 | 2013-10-22 | Microsoft Corporation | Debugger presentation of parallel application threads |
CN103064657A (zh) * | 2012-12-26 | 2013-04-24 | 深圳中微电科技有限公司 | 单个处理器上实现多应用并行处理的方法及装置 |
CN105117369A (zh) * | 2015-08-04 | 2015-12-02 | 复旦大学 | 一种基于异构平台的多种并行错误检测体系架构 |
Non-Patent Citations (4)
Title |
---|
ARM GPU的多任务调度设计与实现;丑文龙等;《西安交通大学学报》;20141231;第48卷(第12期);第87-92页 * |
Improving GPGPU resource utilization through alternative thread block scheduling;Lee等;《IEEE International Symposium on High Performance Computer Architecture》;20141231;第260-271页 * |
The Case for GPGPU Spatial Multitasking;Adriaens等;《IEEE International Symposium on High Performance Computer Architecture》;20121231;第1-12页 * |
基于通用图形处理器的Jacobi算法研究;姚远等;《信息工程大学学报》;20100630;第11卷(第3期);第336-338页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105653243A (zh) | 2016-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105653243B (zh) | 一种通用图形处理器多任务并发执行的任务派发方法 | |
Narasiman et al. | Improving GPU performance via large warps and two-level warp scheduling | |
CN102981807B (zh) | 一种基于cuda并行环境的gpu程序优化方法 | |
CN104679593B (zh) | 一种基于smp系统的任务调度优化方法 | |
CN103823706B (zh) | 一种基于RTLinux的被控对象模型模拟仿真实时调度方法 | |
Krömer et al. | Many-threaded implementation of differential evolution for the CUDA platform | |
CN103927231B (zh) | 一种面向数据处理的能耗优化数据集分配方法 | |
CN106339351A (zh) | 一种sgd算法优化系统及方法 | |
CN105468439B (zh) | 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行方法 | |
Tantalaki et al. | Pipeline-based linear scheduling of big data streams in the cloud | |
CN106547627A (zh) | 一种Spark MLlib数据处理加速的方法及系统 | |
CN103885826B (zh) | 一种多核嵌入式系统实时任务调度实现方法 | |
CA3042183A1 (en) | Numerical quantum experimentation | |
CN104090826B (zh) | 基于相关性的任务优化部署方法 | |
CN106648546A (zh) | 用于gpu寄存器分配和并行度管理的协同优化编译方法 | |
CN103729242B (zh) | 一种自旋锁抢占调度算法选择方法及装置 | |
Chen et al. | Improving GPGPU performance via cache locality aware thread block scheduling | |
CN108509280A (zh) | 一种基于推送模型的分布式计算集群本地性调度方法 | |
CN101976201A (zh) | 基于cpu亲和力的虚拟cpu动态绑定方法 | |
CN103810041A (zh) | 一种支持动态伸缩的并行计算的方法 | |
CN114692079A (zh) | 一种gpu批量矩阵乘法加速器及其处理方法 | |
Li et al. | Efficient kernel management on GPUs | |
de Abreu Silva et al. | Reducing the overall cache miss rate using different cache sizes for Heterogeneous Multi-core Processors | |
Zhang et al. | To co-run, or not to co-run: A performance study on integrated architectures | |
CN107577524A (zh) | 非访存任务优先的gpgpu线程调度方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |