针对GPU计算核进行性能统计分析的方法、装置及介质与流程

文档序号:29804909发布日期:2022-04-23 21:23阅读:207来源:国知局
针对GPU计算核进行性能统计分析的方法、装置及介质与流程
针对gpu计算核进行性能统计分析的方法、装置及介质
技术领域
1.本发明实施例涉及图形处理器(gpu,graphics processing unit)技术领域,尤其涉及一种针对gpu计算核进行性能统计分析的方法、装置及介质。


背景技术:

2.gpu通常采用单指令多线程(simt,single instruction multiple threads)的方式执行大规模的并行计算,也就是说,每取一条指令(或称计算任务)然后调度多个线程并行执行,其中所有的线程均执行相同的指令列表,而不同的线程各自处理不同数据。
3.在对gpu进行性能统计过程中,通常需要对gpu性能进行建模。具体来说,通常采用两种方式对gpu的性能进行建模:其一是仿真建模,比如使用软件模拟构建gpu的仿真模型,并根据仿真模型进行真实的执行过程以获取gpu真实性能数据;其二是分析建模,比如通过构建一定的映射函数(也可称之为分析模型)分析处理gpu的输入,从而计算得出相应性能结果。
4.目前常规采用分析建模方式对gpu进行性能统计分析的方案,均只解决了每个线程执行时间的统计,而对于所有线程执行的总体时间均采用各线程执行时间的简单相加,也就是说,目前常规方案对于gpu执行计算任务的总体时间属于串行相加,无法适配gpu本身并行执行的特点,由此会造成最终统计所得到的gpu执行计算任务的总体时间与真实值之间的误差较大。


技术实现要素:

5.有鉴于此,本发明实施例期望提供一种针对gpu计算核进行性能统计分析的方法、装置及介质;能够更加准确地统计出gpu中所有并行线程执行计算任务的总时间,提高针对gpu计算核进行性能统计分析的准确度。
6.本发明实施例的技术方案是这样实现的:第一方面,本发明实施例提供了一种针对gpu计算核进行性能统计分析的方法,所述方法包括:根据执行计算任务的调度顺序对被调度的调度单元进行排序;针对排序后的每个被调度的调度单元,将对应的执行时间统计至待分析的gpu中所述调度单元被调度至目标处理核的执行总时间;将所有被调度的目标处理核的执行总时间中的最大值确定为所述待分析的gpu执行所述计算任务所需的总体时间。
7.第二方面,本发明实施例提供了一种针对gpu计算核进行性能统计分析的装置,所述装置包括:排序部分、统计部分和确定部分;其中,所述排序部分,经配置为根据执行计算任务的调度顺序对被调度的调度单元进行排序;所述统计部分,经配置为针对排序后的每个被调度的调度单元,将对应的执行时
间统计至待分析的gpu中所述调度单元被调度至目标处理核的执行总时间;所述确定部分,经配置为将所有被调度的目标处理核的执行总时间中的最大值确定为所述待分析的gpu执行所述计算任务所需的总体时间。
8.第三方面,本发明实施例提供了一种计算设备,所述计算设备包括:存储器和处理器;其中,所述存储器,用于存储能够在所述处理器上运行的计算机程序;所述处理器,用于在运行所述计算机程序时,执行第一方面所述针对gpu计算核进行性能统计分析的方法步骤。
9.第四方面,本发明实施例提供了一种计算机存储介质,所述计算机存储介质存储有针对gpu计算核进行性能统计分析的程序,所述针对gpu计算核进行性能统计分析的程序被至少一个处理器执行时实现第一方面所述针对gpu计算核进行性能统计分析的方法步骤。
10.本发明实施例提供了一种针对gpu计算核进行性能统计分析的方法、装置及介质;在统计gpu执行计算任务的总体时间过程中,不仅考虑了各调度单元自身的执行时间,还结合了调度单元被调度至目标处理核的执行时间,从而能够更加充分地考虑到gpu执行并行计算任务时调度单元的并行度的影响,能够更加准确地统计得到gpu执行并行计算任务时并行运行的各调度单元最终所形成的总的执行时间。
附图说明
11.图1为本发明实施例提供的一种计算任务执行时间示意图。
12.图2为本发明实施例提供的针对gpu计算核进行性能统计分析的方法流程示意图。
13.图3为本发明实施例提供的一种fifo队列结构示意图。
14.图4为本发明实施例提供的一种数组结构示意图。
15.图5为本发明实施例提供的针对gpu计算核进行性能统计分析的方法的详细实现流程示意图。
16.图6为本发明实施例提供的一种执行并行任务的时间示意图。
17.图7为本发明实施例提供的针对gpu计算核进行性能统计分析的装置组成示意图。
18.图8为本发明实施例提供的一种计算设备的具体硬件结构示意图。
具体实施方式
19.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
20.参见图1所示出的示例性的计算任务执行时间示意,该计算任务可以通过划分为n个线程执行,各线程分别可被标识为t1、t2、t3、t4、t5、t6、t7、t8、
……
、tn,横轴表示时间,起始线start表示该计算任务实际在gpu中的执行起始时刻,结束线end表示该计算任务实际在gpu中的执行结束时刻,对于每个线程,其对应的深色条长度表示各线程对应的执行时长,深色条的起点和终点均表示各线程对应的执行起始时刻和执行结束时刻。从图1中可以看出,由于gpu在实际执行过程中是充分并行运行的,因此,各深色条在时间维度上存在重合的部分。对于当前利用分析模型对gpu进行性能统计的方案来说,每个线程的执行时长是
能够较为准确地计算得到的,但是对于gpu执行计算任务的总体时长(gputime)来说,其与线程总数n、gpu的处理核数量m以及线程调度算法等因素相关,而这些相关因素都会影响线程在gpu上运行的并行度,也就是说,gputime与线程的并行度密切相关,线程并行度越高,gputime越小;线程并行度越低(即串行度越高),gputime越大。基于此,gputime通常满足以下条件:其中, 表示执行时间最长的线程所对应的执行时长; 表示第i个线程所对应的执行时长。对于分析模型来说,上式阐明了 的取值通常在执行时间最长的线程对应的执行时长与所有线程的执行时长的总和之间。如果在对gpu进行分析过程中,将gputime取值为所有线程的执行时长的总和,即 ,最终造成根据分析模型所计算得到的gputime就会相较于实际值过大;如果在对gpu进行分析过程中,将gputime取值为执行时间最长的线程对应的执行时长,又会是一个完全理想并行的时长,同样相较于实际值有很大差距;如果将gputime取平均值,即 ,那么基于该值所得到的分析结果对于不同gpu架构调整的参考意义不大。因此,需要更加准确地统计gpu中所有并行线程的执行总时间。
21.基于以上之阐述,本发明实施例期望提供一种针对gpu计算核进行性能统计分析的方案,通过采用分析建模方式对gpu进行性能统计分析的过程中,充分考虑到gpu中各线程的并行处理方式,从而提升对gpu中所有并行线程的执行总时间的统计准确度。因此,参见图2,其示出了本发明实施例提供的一种针对gpu计算核进行性能统计分析的方法,该方法可以包括:s201:根据执行计算任务的调度顺序对被调度的调度单元进行排序;s202:针对排序后的每个被调度的调度单元,将对应的执行时间统计至待分析的gpu中所述调度单元被调度至目标处理核的执行总时间;s203:将所有被调度的目标处理核的执行总时间中的最大值确定为所述待分析的gpu执行所述计算任务所需的总体时间。
22.对于上述方案,在统计gpu执行计算任务的总体时间过程中,不仅考虑了各调度单元自身的执行时间,还结合了调度单元被调度至目标处理核的执行时间,从而能够更加充分地考虑到gpu执行并行计算任务时调度单元的并行度的影响,能够更加准确地统计得到gpu执行并行计算任务时并行运行的各调度单元最终所形成的总的执行时间。
23.对于图2所示出的方案,以simt为例,在一些可能的实现方式中,所述被调度的调度单元包括被调度的线程或者被调度的线程簇warp。具体来说,本发明实施例所提出的技术方案不仅针对独立的线程并行所提出,而且同样适用于gpu中被设计以warp为单位进行调度的情况。详细来说,warp可以认为是一组线程,gpu以warp为单位进行调度执行,同一个warp中的所有线程共用同一套取指和译码单元;也就是说,同一个warp中的所有线程是同步执行的,只不过每个线程处理的数据不相同。可以理解地,后续在进行具体示例阐述过程中以线程为例进行论述,当然,本领域技术人员可以将warp作为其他示例应用于后续具体
示例阐述,本发明实施例对此不做赘述。
24.对于图2所示出的方案,在一些可能的实现方式中,所述根据执行计算任务的调度顺序对被调度的调度单元进行排序,包括:根据执行计算任务的调度顺序为每个被调度的调度单元进行标识;将每个被调度的调度单元对应的标识以及执行时间按照所述调度顺序填写入一队列。
25.对于上述实现方式,具体来说,在进行分析建模过程中,可以将每个被调度的线程进行标识并且根据线程调度算法所体现出的调度顺序对所有被调度的线程排序,并且将排序后的线程以及对应的执行时间填写入一个队列,优选地,该队列满足先入先出(fifo,first input first output)规则。结合图1中所示出的n个线程,如图3所示,fifo队列中的线程标识按照线程调度算法所体现出的调度顺序进行排序,图3中各线程标识上方对应的数值则为各线程分别对应的执行时间。
26.对于图2所示出的方案,在一些可能的实现方式中,所述针对排序后的每个被调度的调度单元,将对应的执行时间统计至待分析的gpu中所述调度单元被调度至目标处理核的执行总时间,包括:将所述待分析的gpu中用于执行所述计算任务的每个处理核的执行总时间初始化为零;从所述队列中读取第i个被调度的调度单元对应的标识以及执行时间,其中,1≤i≤n-1,n为所有被调度的调度单元数量;从所有处理核中选择执行总时间最少的处理核;根据所述第i个被调度的调度单元对应的执行时间更新被选择的处理核的执行总时间;读取第i+1个被调度的调度单元对应的标识以及执行时间,以及从所有处理核中选择执行总时间最少的处理核,并根据所述第i+1个被调度的调度单元对应的执行时间更新被选择的处理核的执行总时间,直至所有被调度的调度单元从所述队列中读取完毕。
27.对于上述实现方式,在一些示例中,所述将所述待分析的gpu中用于执行所述计算任务的每个处理核的执行总时间初始化为零,包括:构建一长度为m的全零数组;其中,m表示所述待分析的gpu中用于执行所述计算任务的处理核数量;数组中的各元素对应的编号与处理核标识对应且数组中的各元素表示对应处理核的执行总时间。
28.针对上述实现方式及其示例,具体来说,首先可以根据待分析的gpu中用于执行计算任务的处理核数量构建一个数组core[m],如图4所示,该数组中的各元素初始值为零。需要说明的是,尽管初始值为0,但是后续该数组中各元素值均表示各自对应的执行总时间。
[0029]
接着,按照图3所示的fifo队列中所体现的线程调度顺序,不断从队列中读出各线程,并且将读出的各线程按照并行运行策略分配至各处理核,也就是说,每个读出的线程均可以被模拟成一个待调度的线程,而分配处理核则表示将读出的线程调度至目标处理核进行执行,因此,在分配过程中,以提高并行计算的并行度为目的,通常将线程分配至执行总时间较短的处理核以作为目标处理核。分配完毕后,则将读出的线程所对应的执行时间更新该线程对应分配的目标处理核的执行总时间。如此,当fifo队列中的所有线程均读出完
毕后,最终统计所获得的执行总时间最长的处理核所对应的执行总时间与gpu的实际gputime最为接近。
[0030]
针对上述具体示例,详细来说,如图5所示,其示出了前述涉及的一种针对gpu计算核进行性能统计分析的方法的详细实现流程,该流程可以包括:s501:根据调度顺序对所有被调度的线程排序,并将排序后的线程以及对应的执行时间填写入一个fifo队列;s502:根据待分析的gpu中用于执行计算任务的处理核数量构建一个初始元素值均为0数组core[m];可以理解地,数组中的每个元素均对应一处理核;s503:判断fifo队列是否不为空:若是,则转至s507;否则,转至s504;s504:从fifo队列中读出一被调度的线程及对应的执行时间;s505:选取数组core[m]中最小元素值所对应的元素;可以理解地,被选取的元素所对应的处理核表示该被调度线程对应的目标处理核;此外,当数组core[m]中存在多个最小值元素时,优选选取元素标号最小的元素。
[0031]
s506:将读出的线程对应的执行时间与被选取的元素对应的元素值相加,得到该被选取的元素所对应的新的元素值;并返回s503;s507:将数组core[m]中最大元素值确定为分析所得到的gpu执行计算任务的总体时长gputime。
[0032]
对于图5所示的详细实现流程,其具体实现的伪代码如下所示:gputime(){
ꢀꢀ
long core[m] = {0};/*构建一个初始元素值均为0数组core[m],初始化为0表示所有的核心数都从0时刻开始执行。*/
ꢀꢀ
fifo = generate_fifo_with_gpu_dispatch(threads); /*将排序后的线程以及对应的执行时间填写入一个fifo队列*/
ꢀꢀ
while (fifo.empty) {thead = fifo.pop();//每次从fifo中取出下一个应该被调度的线程tcoreid = find_minimun(core); /*线程t应该被调度到最早完成任务的核上,也就是时间最小的核上,而core数组存放的是处理核的执行总时间 */core[coreid] = core[coreid] + thread.time*1.2; /*说明,此处的coreid应为core[m]中的元素标识,找到的最小数的coreid表示该核最早完成执行任务,就可以调度下一个线程到这个核心上。并且此过程对线程的执行时间乘以1.2,是为了考虑到调度的时间误差而取的一个经验值*/ }
ꢀꢀ
gputime = find_maximun(core);/*最后找到累计元素值最大的数组元素,因为执行过程都是并行执行,因此,最大的累计元素值表示执行最长时间的处理核*/}基于上述图5所示出的详细实现流程或者伪代码,设定n=7且m=5为具体示例,如图6所示,设定gpu具有5个处理核,分别标识为core0、core1、core2、core3、core4,用来处理7
个线程,线程的执行顺序分别为t3、t1、t4、t5、t9、t2、t6、t7。在实际并行处理时,将被调度的线程应当调度至最早完成已调度线程的处理核。各线程的执行时间如图6中的深色条所示,每个深色条上标记有对应的线程标识。从图6可知,在实际进行并行处理过程中,gpu执行任务的总体时长应当最接近于core2的执行总时长;而通过执行图5所示出的详细实现流程或者伪代码进行分析可以获知:最终分析所得到的gpu执行任务的总体时长应当被确定为数组中core2对应的累计元素值,即core2最终所对应的执行总时长。由此可知,本发明实施例技术方案的分析结果与gpu实际执行并行任务时的真实结果是十分接近的。因此,在对gpu进行性能统计时,采用本发明实施例所涉及的技术方案能够更加准确地获得gpu执行计算任务的总体时间。
[0033]
基于前述技术方案相同的发明构思,参见图7,其示出了本发明实施例提供的一种针对gpu计算核进行性能统计分析的装置70,所述装置70包括:排序部分701、统计部分702和确定部分703;其中,所述排序部分701,经配置为根据执行计算任务的调度顺序对被调度的调度单元进行排序;所述统计部分702,经配置为针对排序后的每个被调度的调度单元,将对应的执行时间统计至待分析的gpu中所述调度单元被调度至目标处理核的执行总时间;所述确定部分703,经配置为将所有被调度的目标处理核的执行总时间中的最大值确定为所述待分析的gpu执行所述计算任务所需的总体时间。
[0034]
在一些示例中,所述排序部分701,经配置为:根据执行计算任务的调度顺序为每个被调度的调度单元进行标识;以及,将每个被调度的调度单元对应的标识以及执行时间按照所述调度顺序填写入一队列;在一些示例中,所述统计部分702,经配置为:将所述待分析的gpu中用于执行所述计算任务的每个处理核的执行总时间初始化为零;从所述队列中读取第i个被调度的调度单元对应的标识以及执行时间,其中,1≤i≤n-1,n为所有被调度的调度单元数量;从所有处理核中选择执行总时间最少的处理核;根据所述第i个被调度的调度单元对应的执行时间更新被选择的处理核的执行总时间;读取第i+1个被调度的调度单元对应的标识以及执行时间,以及从所有处理核中选择执行总时间最少的处理核,并根据所述第i+1个被调度的调度单元对应的执行时间更新被选择的处理核的执行总时间,直至所有被调度的调度单元从所述队列中读取完毕。
[0035]
在一些示例中,所述统计部分702,经配置为:构建一长度为m的全零数组;其中,m表示所述待分析的gpu中用于执行所述计算任务的处理核数量;数组中的各元素对应的编号与处理核标识对应且数组中的各元素表示对应处理核的执行总时间。
[0036]
在一些示例中,所述队列满足先入先出fifo规则。
[0037]
在一些示例中,所述被调度的调度单元包括被调度的线程或者被调度的线程簇warp。
rate sdram,ddrsdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synchlink dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,drram)。本文描述的系统和方法的存储器802旨在包括但不限于这些和任意其它适合类型的存储器。
[0044]
而处理器803可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器803中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器803可以是通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field programmable gate array, fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程 存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器802,处理器803读取存储器802中的信息,结合其硬件完成上述方法的步骤。
[0045]
可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(application specific integrated circuits,asic)、数字信号处理器(digital signal processing,dsp)、数字信号处理设备(dsp device,dspd)、可编程逻辑设备(programmable logic device,pld)、现场可编程门阵列(field-programmable gate array,fpga)、通用处理器、控制器、微控制器、微处理器、用于执行本技术所述功能的其它电子单元或其组合中。
[0046]
对于软件实现,可通过执行本文所述功能的模块(例如过程、函数等) 来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
[0047]
可以理解地,上述针对gpu计算核进行性能统计分析的装置70以及计算设备80的示例性技术方案,与前述针对gpu计算核进行性能统计分析的方法的技术方案属于同一构思,因此,上述对于针对gpu计算核进行性能统计分析的装置70以及计算设备80的技术方案未详细描述的细节内容,均可以参见前述针对gpu计算核进行性能统计分析的方法的技术方案的描述。本发明实施例对此不做赘述。
[0048]
需要说明的是:本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
[0049]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1