GPU资源调度方法与流程

未命名 07-22 阅读:90 评论:0

gpu资源调度方法
技术领域
1.本发明涉及计算机技术领域,尤其涉及一种gpu资源调度方法。


背景技术:

2.图形处理器(graphics processing unit,简称gpu),又称显示核心、视觉处理器、显示芯片,专为计算密集型、高度并行化的计算而设计。gpu中存在多种资源,在gpu执行任务过程中,如果对任何一种资源的分配不平衡,均可能造成gpu资源的浪费,从而降低gpu资源利用率和gpu的计算性能。因此,在gpu运行过程中,需要尽可能平衡调度每种gpu资源,使得每种gpu资源尽可能处于资源平衡状态,从而使得整个gpu的运行处于资源平衡状态,进而提高gpu的资源利用率和计算性能。
3.但是,gpu的资源种类多,数量大,现有技术中,gpu在执行任务时,尤其是在执行复杂的计算任务时,仍然很难实现gpu资源平衡调度,通常需要花费大量的时间来分配资源,且分配结果也无法保证资源平衡,可靠性差。由此可知,如何提供一种高效可靠的gpu资源平衡调度技术,合理为多路任务组分配对应的gpu资源,提高任务处理效率,提高gpu的资源利用率和计算性能,成为亟待解决的技术问题。


技术实现要素:

4.本发明目的在于,提供一种gpu资源调度方法,提高了gpu的资源利用率和计算性能。
5.根据本发明,提供了一种gpu资源调度方法,包括:
6.步骤j1、获取候选执行模块列表{ap1,ap2,

apf},apf为第f个候选执行模块,f的取值范围为1到f,f为候选执行模块总数;
7.步骤j2、获取距离当前预设的nx个历史时钟周期内,apf执行第s指令的数量cs,获取预先存储的第s指令的权重bs;
8.步骤j3、基于cs和bs获取apf距离当前预设的nx个历史时钟周期内的功耗总量tbf:
[0009][0010]
步骤j4、获取数值最小的tbf对应的f值作为fx,将第fx个候选执行模块确定为目标执行模块,将所述目标任务组分发至所述目标执行模块。
[0011]
本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明提供的一种gpu资源调度方法可达到相当的技术进步性及实用性,并具有产业上的广泛利用价值,其至少具有下列优点:
[0012]
本发明能够基于每一候选执行模块的历史资源使用情况来选择目标执行模块,从而使得所有执行模块处于平稳状态,发热均匀,使得gpu所有资源尽可能平衡,避免资源浪费。
[0013]
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
[0014]
图1为现有的多任务通道向gpu下发任务组示意图;
[0015]
图2为实施例一提供的gpu资源调度方法流程图;
[0016]
图3为实施例二提供的gpu资源调度方法流程图;
[0017]
图4为实施例三提供的gpu资源调度方法流程图;
[0018]
图5为实施例四提供的gpu最大连续资源块的获取方法流程图;
[0019]
图6为实施例五提供的gpu最大连续资源块的获取方法流程图;
[0020]
图7为实施例六提供的gpu最大连续资源块的获取方法流程图;
[0021]
图8为实施例七提供的基于时分复用的gpu最大连续资源块的获取方法流程图;
[0022]
图9为实施例八提供的gpu资源调度方法流程图;
[0023]
图10为实施例九提供的gpu资源调度方法流程图;
[0024]
图11为实施例十提供的gpu资源调度方法流程图。
具体实施方式
[0025]
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的一种gpu资源调度方法的具体实施方式及其功效,详细说明如后。
[0026]
如图1所述,现有的连接gpu的上层软件向gpu分发任务的场景中,通常通过多个任务通道w
1-wr向gpu分发任务,每个任务通道相互独立,可以向gpu下发不同的任务包,每个任务包中包括不同的任务组(work group,简称wg),同一个任务包对应一个相同的进程,同一任务通道可以接收不同的进程下发的任务包。每一任务组中包括m个线程束(wave),m的取值范围为1到m,m为任务组中的最大wave数,每一wave中所包含的线程数相同。
[0027]
现有的gpu结构中,通常包括p个执行模块(图1中用ap表示),每个执行模块中包括q个执行单元(图1中用peu表示),当多路任务组下发时,需要多路任务组尽可能平衡地分发至执行模块中,具体需要为每一任务组选择一个对应的执行模块,并尽可能将一个任务组中的wave平衡地分配到所选择的执行模块的q个执行单元中,以保证gpu资源的平衡。
[0028]
现有的gpu资源调度技术中,通常会为任务组标识优先级,当gpu接收到r路任务组时,优先为第一优先级的任务组寻找能够分配的执行模块,然后将第一优先级的任务组分配至该执行模块,然后再为第二优先级的任务组寻找能够分配其的执行模块,以此类推,第一优先级的级别高于第二优先级。
[0029]
但是,现有的gpu资源调度技术至少存在以下问题:首先,针对每一任务通道的每一任务组均需要进行一次资源查找匹配,且对于每一需要连续的资源来说,现有技术中采用硬件基于多个时钟周期(clock)查找,或者通过软件方式查找,查找效率很低,需要耗费大量的gpu资源。其次,当高先级无法匹配到合适的执行模块时,会造成所有任务组通道的任务组堵塞,直至执行模块释放资源满足高优先级的任务组时,才能得到缓解,这样严重影
响任务分发和处理效率。针对上述技术问题,本发明提出了下述多个实施例分别予以解决。
[0030]
实施例一、
[0031]
一种gpu资源调度方法,如图2所示,包括
[0032]
步骤a1、获取当前每一任务通道对应的待分发任务组,读取每一待分发任务组的资源需求信息;
[0033]
需要说明的是,每一任务组中携带有对各类gpu资源的需求信息,包括资源标识和对应的资源数量。直接采用现有技术通过硬件读取即可,在此不再赘述。
[0034]
步骤a2、获取当前gpu中每一执行模块的当前剩余资源信息;
[0035]
可以理解是,执行模块的当前剩余资源信息包括执行模块中每一资源当前对应的剩余资源数量。
[0036]
步骤a3、将每一待分发任务组的资源需求信息分别与所有执行模块的当前剩余资源信息进行匹配,若存在至少一个执行模块的当前剩余资源信息与待分发任务组的资源需求信息匹配,则将该待分发任务组加入候选任务组集合;
[0037]
需要说明的是,当执行模块的每一资源的当前剩余量均大于或等于待分发任务组的对应的资源需求时,则表示匹配。
[0038]
步骤a4、从所述候选任务组集合中选取优先级最高的一个待分发任务组作为目标任务组,并从与所述目标任务组匹配的执行模块中选取一个目标执行模块,将所述目标任务组分配至所述目标执行模块中。
[0039]
其中,每一任务组中均携带有优先级标识信息,通过读取任务组对应的优先级标识信息,就可获取对应的优先级。
[0040]
本实施例中,通过对多路任务组并行同步匹配,能够直接将所有符合需求的任务组筛选出来,再从候选的任务分组中选择最高优先级进行分配。可以理解的是,即便当前高优先级的任务组中所需资源数较多,当前没有满足高优先级资源的执行模块,此时,也能迅速将满足资源需求的较低优先级的任务组进行分配,避免现有技术中,高优先级无法匹配时,造成任务堵塞的情况,提高了任务分配的效率,节省了gpu的计算,节约了gpu的功耗。
[0041]
作为一种实施例,所述步骤a2中,所述剩余资源信息包括每一种第一类资源对应的最大连续剩余资源数,以及每一种第二类资源对应的最大剩余资源数,其中,所述第一类资源为执行模块中具有连续分配需求的资源,所述第二类资源为执行模块中不具有连续分配需求的资源,可以理解的是,gpu资源中包括多种类型的第一类资源,也包括多种类型的第二类资源。
[0042]
例如,gpu中的资源包括分布在执行单元中的标量通用目的寄存器(scalar general purpose register,简称s-gpr)、向量通用目的寄存器(vector general purpose register,简称v-gpr),执行单元中可分配wave数资源,以及执行模块中,所有执行单元均能访问的存储模块(memory)等等。中s-gpr、v-gpr为具有连续分配需求的第一类资源。可分配wave数资源数量较少,且仅涉及wave标识映射,因此属于不具有连续分配需求的第二类资源。具体可以通过gpu的硬件实现的方式分别计算出每一第一类资源的连续最大资源数,或者采用软件查询读取的方式计算获取每一第一类资源的连续最大资源数。
[0043]
本实施例中,不是针对每一路任务组分别寻找剩余资源进行匹配,而是将执行模块中的资源分为第一类资源和第二类资源,并且分别获取每一种第一类资源对应的最大连
续剩余资源数,以及每一种第二类资源对应的最大剩余资源数,这样通过对所有执行模块中的剩余资源信息进行一次计算,即可与每一路任务组同步进行匹配。
[0044]
作为一种实施例,每一任务通道设置一个对应的先入先出队列(first input first output,简称fifo),所述任务通道按照接收到的先后顺序将接收到的任务组逐个存入所述先入先出队列,所述待分发任务组为所述任务组通道的先入先出队列中的队首任务组。
[0045]
需要说明的是,通过在每一任务通道设置一个先入先出队列,能够保证每一路任务通道的任务组始终按照上层软件下发的顺序来执行,不会出现乱序。
[0046]
作为一种实施例,gpu芯片通常是连续不断地对多通道任务组进行任务分发和处理的,具体的,所述步骤a4之后还包括:
[0047]
步骤a5、判断当前每一任务通道对应的待分发任务组是否为空,若为空,则结束流程,否则,返回执行步骤a1。
[0048]
作为一种实施例,每个执行模块中包括q个执行单元,所述步骤a3包括:
[0049]
步骤a31、将待分发任务组划分q个wave组,获取每一wave组对应的资源需求信息,以及待分发任务组对于整个执行模块的共享资源需求信息;
[0050]
步骤a32、将q个wave组对应的资源需求信息与q个执行单元的剩余资源信息进行匹配,将共享资源需求信息与执行模块的共享剩余资源信息进行匹配,若均匹配成功,则将该待分发任务组加入候选任务组集合。
[0051]
可以理解的是,当每个wave组对应的资源需求信息小于等于对应执行单元的剩余资源信息时,当q个wave组的共享资源需求信息小于等于执行模块的共享剩余资源信息时,匹配成功。
[0052]
候选任务组集合中的最高优先级可能有一个,也可能同时出现多个,因此需要进一步设置一套处理机制,来保证多个任务通道的任务分配平衡。
[0053]
作为一种实施例,所述步骤a4中,从与所述目标任务组匹配的执行模块中选取一个目标执行模块,包括:
[0054]
步骤a41、若所述候选任务组集合仅包括一个优先级最高待分发任务组,则将该待分发任务组确定为所述目标任务组。
[0055]
作为一种实施例,所述步骤a4中,所述从与所述目标任务组匹配的执行模块中选取一个目标执行模块,包括:
[0056]
步骤a42、若所述候选任务组集合包括多个优先级最高待分发任务组,则判断多个优先级最高待分发任务组对应的任务通道中,是否存在未对该优先级标注已选标识的任务通道:
[0057]
若存在,则从未标注的通道对应的待分发任务组中随机选择一个作为目标任务组,并将该任务组对应的任务组通道中,为该优先级标注已选标识;
[0058]
若不存在,则从多个优先级最高待分发任务组中随机选择一个作为目标任务组,保留该任务组对应的任务组通道中对该优先级标注已选标识,并将其他任务组对应的任务组通道中对该优先级对应的已选标识清除。
[0059]
通过步骤a42,可以尽可能在多次出现同一优先级的任务组同时满足资源分配需求的情况下,保证多路任务通道任务分配的平衡。
[0060]
作为一种实施例,所述步骤a4中,将所述目标任务组分配至所述目标执行模块中,包括:
[0061]
步骤a43、获取所述目标执行模块中每一第一类资源的起始分配地址;
[0062]
步骤a44、根据起始分配地址和分配数量,将对应的第一类资源分配给所述目标任务组中对应的任务;
[0063]
步骤a45、将所述对应的第二类资源分配给所述目标任务组中对应的任务。
[0064]
需要说明的是,具有连续分配需求的资源也可以不连续分配,现有技术中多采用此类分配方式,但这样需要多次寻找目标放置地址,分配效率低。且在执行单元执行任务的过程中,需要多次寻址访问,信息交互负担大,执行效率低。实施例一通过获取第一类资源的最大连续剩余资源数,将目标任务分配至连续的地址空间中,无需对每一存储位置分别进行寻址,只需通过起始地址和目标数量即可实现快速分配,提高了任务分配效率,此外,在任务执行过程中,能够基于连续的地址实现快速访问执行,提高了信息交互效率,从而提高了任务执行效率。需要说明的是,后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0065]
实施例二、
[0066]
实施例一虽然能够避免执行模块剩余资源不满足高优先级任务组的堵塞问题,但是,还有一类情况是,如果高优先级任务组的在较长一段时间内一直能够匹配到满足条件的执行模块,那么又会造成低优先级的任务组无法分配,低优先级所处的任务通道长时间处于堵塞状态,为了解决此类问题,本发明进一步提出了实施例二。
[0067]
一种gpu资源调度方法,如图3所示,包括:
[0068]
步骤b1、获取gpu接收的任务组包括的优先级{p1,p2,

ps},ps为第s优先级,s的取值范围为1到s,s为任务组优先级总数;
[0069]
需要说明的是,每一个任务组下发时,均携带优先级标识,基于优先级标识可以获取任务组对应的优先级信息。其中,可设置为p1,p2,

ps的优先级依次降低,s的取值范围根据具体应用需求确定,例如s的取值范围可以设置为2到8,具体的,s可以取值为4。
[0070]
步骤b2、将预设的时钟周期数划分为y个时间窗口{t1,t2,

ty},ty为第y个时间窗口;
[0071]
其中,可设置为t1,t2,

ty对应的周期数依次减少。y的取值范围根据具体应用需求确定,例如y的取值范围可以设置为2到8,具体的,y可以取值为4。优选的,s的取值与y的取值相等,ps与ts一一对应。
[0072]
步骤b3、在gpu上设置时钟周期循环计数器,在预设的时钟周期数范围内循环计数,当所述时钟周期循环计数器的值位于ty时间窗口内,将ps调整为最高优先级;
[0073]
优选的,当将ps调整为最高优先级时,其余优先级按照原来的优先级顺序依次排列。
[0074]
步骤b4、基于当前优先级排序,为每一任务组分配gpu资源。
[0075]
通过上述方法,即可动态调整任务组的优先级排序,且为不同的优先级分配了不同的时间窗口,高优先级的时间窗口大于低优先级的时间窗口,基于此优先级调整方案得到的当前优先级排序,为每一任务组分配gpu资源。
[0076]
作为一种实施例,所述步骤b4包括:
[0077]
步骤b41、获取当前每一任务通道对应的待分发任务组,读取每一待分发任务组的资源需求信息;
[0078]
步骤b42、获取当前gpu中每一执行模块的当前剩余资源信息;
[0079]
步骤b43、基于每一待分发任务组的资源需求信息和当前剩余资源信息构建候选任务组集合;
[0080]
步骤b44、读取当前优先级排序,根据所述当前优先级排序从所述候选任务组集合中选取当前优先级最高的一个待分发任务组作为目标任务组,并从与所述目标任务组匹配的执行模块中选取一个目标执行模块,将所述目标任务组分配至所述目标执行模块中。
[0081]
需要说明的是,前序实施例以及后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0082]
实施例二通过动态调整任务组的优先级排序,且为不同的优先级分配了不同长度的时间窗口,避免了静态优先级的情况下高优先级任务组的在较长一段时间内一直能够匹配到满足条件的执行模块,那么又会造成低优先级的任务组无法分配,低优先级所处的任务通道长时间处于堵塞状态的情况,提高了gpu的任务分发效率和资源调度效率。
[0083]
实施例三、
[0084]
通常情况下,一个任务组中的wave相互之间具有关联性,因此需要分配到同一个执行模块中处理,但有些情况下,一个任务组中的wave相互独立,是可以划分到不同的执行模块中的。如果遇到wave相互独立的任务组,且所需要的资源量大,多个执行模块长时间无法满足该任务组的资源需求时,会导致该任务组长时间无法分发,均处于堵塞状态,基于此类场景,本发明进一步提出了实施例三。
[0085]
一种gpu资源调度方法,如图4所示,包括
[0086]
步骤c1、获取当前每一任务通道对应的待分发任务组,读取每一待分发任务组的资源需求信息,获取当前gpu中每一执行模块的当前剩余资源信息;
[0087]
步骤c2、将每一待分发任务组的资源需求信息分别与所有执行模块的当前剩余资源信息进行匹配,若当前所有待分发任务组都匹配失败,则设置匹配失败轮次计数器的值g=g+1,判断g是否超过预设的次数阈值,若超过,执行步骤c3,否则,返回执行步骤c1;
[0088]
其中,预设的次数阈值根据具体应用需求来设定,例如次数阈值可以设置为256。
[0089]
步骤c3、读取每一待分发任务组的独立标识信息,若存在标注独立标识的待分发任务组,则将至少一个标注独立标识的待分发任务组切分为多个子任务组。
[0090]
其中,待分发任务组若标注独立标识,则表示任务组中的wave相互独立,未标注独立标识的待分发任务组,表示任务组中的wave相互关联。具体的,也可设置独立标识位,所述独立标识为“1”,表示任务组中的wave相互独立,所述独立标识为“0”,表示任务组中的wave相互关联。
[0091]
独立标识可以直接由上层软件在下发任务组时,对任务组进行打标。需要说明的是,本实施例中,g超过预设的次数阈值至少可能存在两种情况,情况一、所有的任务通道对应的待分发任务组,连续g次未能找到符合资源需求的执行模块。情况二、其他任务通道的任务已经分发完毕,剩下至少一个任务通道的待分发任务组连续g次未能找到符合资源需求的执行模块。在上述情况下,如果执行单元资源释放缓慢,或者待分发任务组的资源需求过大,可能会造成多个任务通道长时间的堵塞,严重影响任务分发效率以及gpu的资源调度
效率,实施例三中,对于当前堵塞的待处理任务组中存在wave相互独立的情形,通过对此类待分发任务组进行切分,能够快速缓解任务堵塞,提高任务分发效率和gpu的资源调度效率。
[0092]
作为一种实施例,所述步骤c3中,若存在至少一个执行模块的当前剩余资源信息与待分发任务组的资源需求信息匹配,则将该待分发任务组加入候选任务组集合,执行步骤c4,
[0093]
步骤c4、从所述候选任务组集合中选取优先级最高的一个待分发任务组作为目标任务组,并从与所述目标任务组匹配的执行模块中选取一个目标执行模块,将所述目标任务组分配至所述目标执行模块中,返回执行步骤c1。
[0094]
作为一种实施例,所述步骤c1之前还包括步骤c0、设置g的初始值。优选的,所述g的初始值设置为0,方便计数。
[0095]
作为一种实施例,所述步骤c3中,将至少一个标注独立标识的待分发任务组切分为多个子任务组,包括:将至少一个标注独立标识的待分发任务组中的每一wave作为一个子任务组进行切分。
[0096]
需要说明的是,将标注独立标识的待分发任务组中的每一wave作为一个子任务组进行切分,便于操作,执行逻辑简单,无需额外进行分组,简化处理流程,提高处理效率,且由于切分完成后,当前待分发任务组中至少一个是只包含一个wave的,大大提升资源匹配成功的概率,有效缓解任务通道堵塞。
[0097]
作为一种实施例,所述步骤c3还包括:将每一子任务组的优先级设置为最低优先级。
[0098]
需要说明的是,通过将每一子任务组的优先级设置为最低优先级,能够在缓解任务通道堵塞的前提下,依然保证满足资源需求的待分发任务组中,能够在未切分状态下整体满足资源需求的待分发任务组有优先分配,提高了gpu资源利用率。
[0099]
作为一种实施例,所述步骤c3执行完毕后还包括:将每一子任务组依次作为对应任务通道的待处理任务组,将g设置为初始值,返回执行步骤c1。需要说明的是,前序实施例以及后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0100]
实施例三中,对于当前堵塞的待处理任务组中存在wave相互独立的情形,通过对此类待分发任务组进行切分,快速缓解了任务堵塞,提高了任务分发效率和gpu的资源调度效率。
[0101]
实施例四、
[0102]
现有技术中,通常通过gpu硬件实现的方式分别读取每一第一类资源的连续最大资源数,或者采用软件读取的方式获取每一第一类资源的连续最大资源数。其中,如果用软件方式查找,由于软件要考虑时间复杂度,通常需要逐位查找,且每找到一位可用资源,则需要进行记录和匹配,所需时钟周期的数量不可控,查找效率极低,而采用硬件实现方式亦只是基于多个时钟周期(clock)查找对软件方式进行实现,同样存在软件方式时钟周期数量不可控及时钟周期数量可能较大的缺陷。基于此,实施例四提出了一种gpu最大连续资源块的获取方法,包括以下步骤:
[0103]
步骤d1、读取待查资源的当前资源状态序列s0={d1,d2,
…dn
},dn为待查资源的第n
个资源块的状态标识n的取值范围为1到n,n为待查资源的资源块总数;
[0104]
步骤d2、并行获取s0向预设方向移动i位的状态序列s1、s2、
…sn-1
,其中,si为s0向预设方向移动i位,并将移动后的s0沿预设方向的尾部连续i位设置为已占用标识所得的序列,i的取值范围为0到n-1;其中,所述向预设方向移动i位包括左移i位或右移i位。
[0105]
步骤d3、并行获取s0至si进行按位与运算或者按位或运算的结果sai;
[0106]
步骤d4、将每一sai进行自或运算或者自与后求反运算,确定所述待查资源的当前最大连续资源块数。
[0107]
其中,当前资源状态序列可以通过现有技术直接从硬件中读取。所述状态标识包括已占用标识和未占用标识,所述已占用标识为0,未占用标识为1,所述步骤d3中执行按位与运算,所述步骤d4中执行自或运算。或者,所述已占用标识为1,所述未占用标识为0,所述步骤d3中执行按位或运算,所述步骤d4中执行自与后求反运算。
[0108]
需要说明的是,s0至si进行按位与运算或者按位或运算,即先将s0与s1进行按位与运算或者按位或运算得到s
0-1
,然后s
0-1
在与s2进行按位与运算或者按位或运算,得到s
0-2
,s
0-2
再与s3进行按位与运算或者按位或运算,得到s
0-3
,依次执行下去,直至将s
0-(i-1)
与si进行按位与运算或者按位或运算,得到s
0-i
,即为所述sai。例如,两个序列进行按位与运算,是将两个序列相同位置上的数值进行与运算,将运算结果作为该位置上的数值,最后得到一个新的序列。例如,序列0 0 1 0 0 1和序列1 0 1 1 0 1进行按位与运算,得到的结果为0 0 1 0 0 1,本领域技术人员知晓,其他按位或运算以及自与后求反运算与此逻辑类似,在此不再一一列举。作为一种实施例,所述步骤d4包括:
[0109]
步骤d41、将每一sai进行自或运算或者自与后求反运算,得到sari;
[0110]
步骤d42、基于所有的sari生成第一待测序列{sar0,sar1,

sar
n-1
};
[0111]
步骤d43、基于{sar0,sar1,

sar
n-1
}确定所述待查资源的当前最大连续资源块数。
[0112]
可以理解的是,将每一sai进行自或运算或者自与后求反运算,得到的sari值为0或1。
[0113]
作为一种实施例,所述步骤d2、步骤d3、步骤d4在同一个时钟周期内执行,分别设置一套对应的硬件单元执行所述步骤d2、步骤d3、步骤d4,在一个周期内能提高任务分发和资源调度效率,在gpu芯片运行频率要求不高时,有利于减小gpu芯片面积,减小功耗。本实施例中,所述步骤d2、步骤d3、步骤d4在同一个时钟周期内执行,即所述步骤d2、步骤d3、步骤d4在同一个时钟周期内传递信息,所以硬件单元可以采用组合逻辑实现,组合逻辑技术的具体实现方式为现有实现方式,在此不再展开描述。
[0114]
作为一种实施例,所述步骤d2、步骤d3、步骤d4还可分别占用一个预设的时钟周期串行执行,所述步骤d2、步骤d3、步骤d4分别设置一套硬件单元,有利于提升gpu芯片运行频率和执行性能。本实施例中,步骤d2、步骤d3、步骤d4具体可以在连续三个时钟周期传递信息,传递信息的方式可以采用寄存器的方式实现,采用寄存器实现的技术细节为现有技术,在此不再展开描述。
[0115]
作为一种实施例,所述已占用标识为0,未占用标识为1,所述步骤d3中执行按位与运算,所述步骤d4中执行自或运算。或者,所述已占用标识为1,所述未占用标识为0,所述步骤d3中执行按位或运算,所述步骤d4中执行自与后求反运算。可以理解的是,预设方向、占用标识为、未占用标识确定后,后续配置的第一映射表也是基于该配置而设置的。
[0116]
作为一种实施例,所述步骤d43包括:
[0117]
步骤d431、将{sar0,sar1,

sar
n-1
}与预先配置的第一映射表进行对比,输出所述待查资源的当前最大连续资源块数,所述第一映射表用于存储第一待测序列和最大连续资源块数的映射关系。
[0118]
作为一种实施例,所述步骤d43包括:
[0119]
步骤d432、在{sar0,sar1,

sar
n-1
}中从sar
n-1
开始往前读取,确定出现第一个等于1的sari的i值,记作i’;
[0120]
步骤d433、将i’+1确定为所述待查资源的当前最大连续资源块数。
[0121]
需要说明的是,前序实施例以及后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0122]
实施例四基于待查资源的当前资源状态序列,仅通过简单的硬件操作,再结合预先配置的第一映射表,在时钟可控的一个或少量几个时钟周期内,快速准确地获取待查资源的当前最大连续资源块数,提高了资源调度的效率。
[0123]
实施例五、
[0124]
实施例四中,优选适用于待查资源总数较小的情况,例如,待查资源数仅为8位、16位。但是,当待查资源总数数量较多时,例如待查资源数为128,则需要布置大量的硬件,例如需要大量的寄存器或电路线,需要使用大量的与门、或门,会增大gpu芯片的面积和功耗。基于此,在实施例四的基础上,进一步提出了实施例五。
[0125]
一种gpu最大连续资源块的获取方法,包括以下步骤:
[0126]
步骤e1、读取待查资源的当前资源状态序列s0={d1,d2,
…dn
},dn为待查资源的第n个资源块的状态标识,n的取值范围为1到n,n为待查资源的资源块总数;
[0127]
步骤e2、将s0均等切分为z组资源状态序列{u1,u2,

uz},其中,uz为第z组资源状态序列,uz={d
n*(z-1)/z+1
,d
n*(z-1)/z+2
,
…dn*z/z
},z的取值范围为1到z,z小于n,且z能被n整除,将{u1,u2,

uz}中每一uz进行按位与运算或者按位或运算,生成待处理状态序列f0={ua1,ua2,

uaz},uaz为uz对应的按位与运算或按位或运算的结果;
[0128]
需要说明的是,通过将s0均等切分为z组,可以缩短序列,大大减小后续移位、与运算以及自或运算或者自与后求反运算的计算量,减少对应的硬件布局数量,从而减小gpu的面积和功耗。
[0129]
优选的,n的取值为4的整数倍,z的取值的n/4。
[0130]
步骤e3、基于f0确定所述待查资源的当前最大连续资源块数。
[0131]
作为一种实施例,所述步骤e3包括:
[0132]
步骤e31并行获取f0向预设方向移动j位的状态序列f1、f2、
…sz-1
,其中,fj为f0向预设方向移动j位,并将以预设方向的尾部j位设置为已占用标识所得的序列,j的取值范围为0到z-1;
[0133]
其中,所述向预设方向移动j位包括左移j位或右移j位。
[0134]
步骤e32、并行获取f0至fj进行按位与运算或者按位或运算的结果faj;
[0135]
步骤e33、将每一faj进行自或运算或者自与后求反运算,确定所述待查资源的当前最大连续资源块数。
[0136]
作为一种实施例,所述步骤e31、步骤e32、步骤e33在同一个时钟周期内执行,分别
设置一套对应的硬件单元执行所述步骤e31、步骤e32、步骤e33,在一个周期内能提高任务分发和资源调度效率。,在gpu芯片运行频率要求不高时,有利于减小gpu芯片面积,减小功耗。本实施例中,所述步骤e31、步骤e32、步骤e33在同一个时钟周期内执行,即所述步骤e31、步骤e32、步骤e33在同一个时钟周期内传递信息,所以硬件单元可以采用组合逻辑实现,组合逻辑技术的具体实现方式为现有实现方式,在此不再展开描述。
[0137]
作为示例,所述已占用标识为0,未占用标识为1,所述步骤e2中,将{u1,u2,

uz}中每一uz进行按位与运算,所述步骤e32中执行按位与运算,所述步骤e33中执行自或运算;或者,所述已占用标识为1,所述未占用标识为0,所述步骤e2中,将{u1,u2,

uz}中每一uz进行按位或运算,所述步骤e32中执行按位或运算,所述步骤e33中执行自与后求反运算。
[0138]
作为一种实施例,所述步骤e31、步骤e32、步骤e33分别占用一个预设的时钟周期串行执行,所述步骤e31、步骤e32、步骤e33复用一套硬件单元,有利于减小gpu芯片面积,减小功耗。
[0139]
作为一种实施例,所述步骤e31、步骤e32、步骤e33还可分别占用一个预设的时钟周期串行执行,所述步骤e31、步骤e32、步骤e33分别设置一套硬件单元,有利于提升gpu芯片运行频率和执行性能。本实施例中,步骤e31、步骤e32、步骤e33具体可以在连续三个时钟周期传递信息,传递信息的方式可以采用寄存器的方式实现,采用寄存器实现的技术细节为现有技术,在此不再展开描述。作为一种实施例,步骤e33包括:
[0140]
步骤e331、将每一faj进行自或运算或者自与后求反运算得到farj;
[0141]
步骤e332、基于所有的farj生成第一待测序列{far0,far1,

far
z-1
};
[0142]
步骤e333、基于{far0,far1,

far
z-1
}确定所述待查资源的当前最大连续资源块数。
[0143]
作为一种实施例,所述步骤e333包括:
[0144]
步骤e3333、将{far0,far1,

far
z-1
}与预先配置的第二映射表进行对比,输出所述待查资源的当前最大连续资源块数,所述第二映射表用于存储自或序列和最大连续资源块数的映射关系。
[0145]
可以理解的是,预设方向、占用标识为、未占用标识确定后,第二映射表也是基于该配置而设置的。
[0146]
作为一种实施例,所述步骤e333包括:
[0147]
步骤e3331、在{far0,far1,

far
z-1
}中从far
z-1
位开始往前读取,确定出现第一个等于1的farj的j值,设置j’=j+1;
[0148]
步骤e3332、基于j’确定所述待查资源的当前最大连续资源块数x:
[0149]
x=j’*(n/z)。
[0150]
实施例五将待查资源的当前资源状态序列切分为z组,使得状态序列从n位缩短为z位,极大减小了后续计算量,减小了gpu芯片的面积和功耗。z的具体取值根据具体应用场景来确定。虽然实施例五并不能涵盖所有可能的连续最大资源块数值,但是可以理解的是,当资源需求位于(j-1)*(n/z)至j*(n/z)之间,以最大资源块满足大于等于j*(n/z)为匹配成功的条件即可,虽然可能会漏选,但是,几率较低,尤其是gpu通常包含多个执行模块,每个执行模块配备着同样的硬件资源,因此,在与多个相同资源匹配时,分组对于匹配结果的影响,几乎可以忽略不计,下面通过一个具体示例的数据来说明:
[0151]
以资源块数量为128为例,按每4块分成一组,总共32组。每个资源块已占用标识为0,未占用标识为1,分成32组后把每组4个状态标识位做逻辑与运算变成1个bit,如果为1则表示当前组可用,0表示当前组不可用。假设资源可用情况为完全随机分布,1和0的概率均为1/2。
[0152]
当待分发任务组对资源需求较大时,无论对于分组或不分组的情况,都需要连续多个资源块或组块全部为1,分组的做法缺点不明显;而当待分发任务组对资源需求较小时,如需求为4个资源块,不分组时只要找到连续1的数量大于等于4即可满足需求,不必要满足4个1的起始位置能整除4;而分组时则要求至少有4个1并且起始位置能整除4,直观上资源满足情况的效果会变差,但是由于gpu同一资源通常为多个,因此最终的匹配效果基本不变,下边以资源需求为4做具体分析,本示例中,假设包括16个执行模块,每个执行模块中,包括4个执行单元,待分发任务组要将wave分配至其中一个执行模块的四个执行单元上。
[0153]
对于1个执行模块中的1个执行单元,每个分组不满足的概率为1-1/16=15/16,则32个分组都不满足的概率为(15/16)
32
=0.127。最差情况假设当前待分发任务组超过4个waves,则1个执行模块的4个执行单元中只要有1个执行单元资源不满足即无法适配待分发任务组,其概率为1-(1-0.127)4=0.418。
[0154]
至此可见只有1个执行模块时,实施例五的分组的做法对为待分发任务组找寻资源影响比较明显,但随着执行模块数量的增加,此影响会明显减弱,例如常用的配备16个执行模块的情况,所有执行模块都无法适配该待分发任务组的概率为0.418
16
=9e-7=0,即所有16个执行模块都找不到资源的概率接近0,也即该分组做法对资源需求为4的影响可以不计。
[0155]
需要说明的是,前序实施例以及后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0156]
实施例六、
[0157]
实施例四在待查资源总数较大时,会增大gpu芯片的面积和功耗,实施例五能够在实施例的基础上,减少需要布置大量的硬件,减小gpu芯片的面积和功耗,但是最终确定出的最大资源数只能是n/z的倍数,具有一定的限制性。基于此,提出了实施例六。
[0158]
一种gpu最大连续资源块的获取方法,包括以下步骤:
[0159]
步骤f1、读取待查资源的当前资源状态序列s0={d1,d2,
…dn
},dn为待查资源的第n个资源块的状态标识,n的取值范围为1到n,n为待查资源的资源块总数;
[0160]
步骤f2、并行获取s0向预设方向移动i位的状态序列s1、s2、
…sn-1
,其中,si为s0向预设方向移动i位,并将移动后的s0沿预设方向的尾部连续i位设置为已占用标识所得的序列,i的取值范围为0到n-1;
[0161]
其中,所述向预设方向移动i位包括左移i位或右移i位。
[0162]
步骤f3、从0到n-1之间进行抽样,得到w个k值{k0,k1,

k(w-1)},并行获取s0至sk进行按位与运算或者按位或运算的结果sak;
[0163]
步骤f4、基于sak确定所述待查资源的当前最大连续资源块数。
[0164]
作为一种实施例,所述步骤f4包括:
[0165]
步骤f41、将每一sak进行自或运算或者自与后求反运算,得到sark;
[0166]
步骤f42、基于所有的sark生成待测抽样序列{sar
k0
,sar
k1


sar
k(w-1)
};
[0167]
步骤f43、基于{sar
k0
,sar
k1


sar
k(w-1)
}确定所述待查资源的当前最大连续资源块数。
[0168]
作为示例,所述状态标识包括已占用标识和未占用标识。所述已占用标识为0,未占用标识为1,所述步骤f3中执行按位与运算,所述步骤f41中执行自或运算;或者,所述已占用标识为1,所述未占用标识为0,所述步骤f3中执行按位或运算,所述步骤f41中执行自与后求反运算。
[0169]
作为一种实施例,k(w+1)-kw≥kw-k(w-1),kw为{k0,k1,

k(w-1)}中第w+1个k值,w的取值范围为0到w-1。优选的,k(w+1)-kw为2的整数次方。
[0170]
需要说明的是,k(w+1)-kw≥kw-k(w-1)使得抽样步长可以逐步增加,可以使得k值较小的数值较为稠密,可以命中较多可能性的取值较小的最大连续资源块数;k值较大的数值较为稀疏,可以更大程度地减少与运算的计算量,减少与门等硬件的布置数量,且仍能保证计算结果的准确性。
[0171]
作为一种实施例,所述步骤f2、步骤f3、步骤f4在同一个时钟周期内执行,分别设置一套对应的硬件单元执行所述步骤f2、步骤f3、步骤f4,在一个周期内能提高任务分发和资源调度效率,在gpu芯片运行频率要求不高时,有利于减小gpu芯片面积,减小功耗。本实施例中,所述步骤f2、步骤f3、步骤f4在同一个时钟周期内执行,即所述步骤f2、步骤f3、步骤f4在同一个时钟周期内传递信息,所以硬件单元可以采用组合逻辑实现,组合逻辑技术的具体实现方式为现有实现方式,在此不再展开描述。
[0172]
作为一种实施例,所述步骤f2、步骤f3、步骤f4还可分别占用一个预设的时钟周期串行执行,所述步骤f2、步骤f3、步骤f4分别设置一套硬件单元,有利于提升gpu芯片运行频率和执行性能。本实施例中,步骤f2、步骤f3、步骤f4具体可以在连续三个时钟周期传递信息,传递信息的方式可以采用寄存器的方式实现,采用寄存器实现的技术细节为现有技术,在此不再展开描述。
[0173]
作为一种实施例,步骤f3中,所述从0到n-1之间进行抽样,包括:
[0174]
步骤f31、先将0到n-1中预设的排除数值排除,再抽样获取w个k值,所述预设的排除数值包括所述任务组所需的连续资源数命中概率小于等于预设概率阈值的数值。
[0175]
其中,所述预设的排除数值具体可包括0到n-1中的质数。
[0176]
作为一种实施例,所述步骤f43包括:
[0177]
步骤f431、将{sar
k0
,sar
k1


sar
k(w-1)
}与预先配置的第三映射表进行对比,输出所述待查资源的当前最大连续资源块数,所述第三映射表用于存储抽样序列和最大连续资源块数的映射关系。
[0178]
可以理解的是,预设方向、占用标识为、未占用标识确定后,第三映射表也是基于该配置而设置的。
[0179]
作为一种实施例,所述步骤f43包括:
[0180]
步骤f432、在{sar
k0
,sar
k1


sar
k(w-1)
}中从sar
k(w-1)
开始往前读取,确定出现第一个等于1的sark的k值,记作k’;
[0181]
步骤f433、将k’+1确定为所述待查资源的当前最大连续资源块数。
[0182]
实施例六相比实施例四既能通过k值抽样,减少与运算的数量,进一步减少后续自
或等运算的数量,从而减少了需要布置硬件的数量,减小gpu芯片的面积和功耗。与实施例五相比,但是最终确定出的最大资源数不止限于n/z的倍数,可以根据具体的应用需求进行抽样,具有灵活性。
[0183]
需要说明的是,前序实施例以及后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0184]
实施例七、
[0185]
gpu的一个执行模块中通常包括多种具有连续分配需求的资源的第一类资源,且资源块的数量可能各不相同,一方面,如果为每一种第一类资源分别设置一套获取最大连续资源块的硬件单元,那么会导致gpu硬件单元复杂,占据面积大。另一方面,gpu在分发完成一个待分发任务组后,需要一定的时间执行已分发的任务组,因此,提出了实施例七,可在每一执行单元中设置一套可共享的获取最大连续资源块的硬件单元,进行分时复用,这样既能满足最大连续资源块的计算需求,又能减少gpu上所需设置的硬件数量,从而减小gpu面积和功耗。
[0186]
一种基于时分复用的gpu最大连续资源块的获取方法,包括以下步骤:
[0187]
步骤g1、设置每一轮最大连续资源块的获取中所需要的时间周期数c,为每一时间周期配置至少一个资源类型标识,初始化c=1;
[0188]
其中,每一周期对应的所有资源类型的资源块总数小于等于a,a大于等于所有资源类型中的最大资源块数量。
[0189]
步骤g2、获取第c时间周期对应的每一类资源类型标识对应的当前资源状态序列,将共享硬件单元划分为rc组,rc为第c时间周期对应的资源类型标识数量,将每一当前资源状态序列存入对应的共享硬件单元分组中;
[0190]
步骤g3、在第c时间周期内基于共享硬件单元并行对rc个当前资源状态序列执行最大连续资源块的获取操作,获取第c时间周期对应的每一类资源类型标识对应的最大资源块数量;
[0191]
步骤g4、判断c是否等于c,若等于,则结束本轮最大连续资源块的获取操作,否则,设置c=c+1,返回执行步骤g2。
[0192]
作为一种实施例,若rc等于1,所述步骤g3中,所述共享硬件单元中仅存在一个对应的当前资源状态序列,将所述共享硬件单元中的当前资源状态序列,作为实施例四、实施例五或实施例六任意一个中的s0执行相应的最大连续资源块的获取操作。即共享硬件单元中仅存在一个对应的当前资源状态序列时,在一个时间周期中仅为一个资源类型获取最大连续资源块数量。当共享硬件单元中存在多个对应的当前资源状态序列时,在再同一个时间周期内,基于同一个共享硬件单元同时为多个类型的资源获取最大连续资源块数量。时间周期可以包括一个或多个时钟周期。
[0193]
作为一种实施例,若rc大于等于2,所述步骤g3包括:
[0194]
步骤g31、将共享硬件单元划分为rc组,将每一当前资源状态序列依次存入对应的共享硬件单元分组中得到序列d0={q1,q2,
…qrc
},其中,qr为第r个分组中对应的当前资源状态序列,r的取值范围为1到rc;
[0195]
步骤g32、并行获取d1,d2,
…de
,其中,de为将d0向预设的预设方向移动e位,同时将每一qr沿预设方向的尾部连续e位设置为已占用标识所生成的状态序列,e的取值范围为0
到e-1,e为共享硬件单元的最大位数;
[0196]
其中,所述向预设方向移动e位包括向预设方向左移e位或右移e位。
[0197]
步骤g33、并行获取d0至de进行按位与运算或者按位或运算的结果dae,dae={dq
e1
,dq
e2


dq
erc
},其中,dq
er
为第r个分组对应的按位与运算或者按位或运算的结果;
[0198]
步骤g34、将每一dq
er
进行自或运算或者自与后求反运算,确定第r个分组对应的资源类型的当前最大连续资源块数。
[0199]
作为一种实施例,所述步骤g34包括:
[0200]
步骤g341、将每一dq
er
进行自或运算或者自与后求反运算得到dqr
er

[0201]
步骤g342、基于所有的dqr
er
生成第r个分组对应的第一待测序列{dqr
0r
,dqr
1r


dqr
(e-1)r
};
[0202]
步骤g343、基于{dqr
0r
,dqr
1r


dqr
(e-1)r
}确定第r个分组对应的资源类型的当前最大连续资源块数。
[0203]
所述步骤g343、包括:
[0204]
所述步骤g3431、在{dqr
0r
,dqr
1r


dqr
(e-1)r
}中从dqr
(e-1)r
开始往前读取,确定出现第一个等于1的dqr
er
的e值,记作e’;
[0205]
所述步骤g3432、将e’+1确定为第r个分组对应的资源类型的当前最大连续资源块数。
[0206]
作为示例,所述状态标识包括已占用标识和未占用标识。所述已占用标识为0,未占用标识为1,所述步骤g33中执行按位与运算,所述步骤g34、步骤g341中执行自或运算;或者,所述已占用标识为1,所述未占用标识为0,所述步骤g33中执行按位或运算,所述步骤g34、步骤g341中执行自与后求反运算。
[0207]
作为一种实施例,所述步骤g343包括:
[0208]
步骤g3433、判断{dqr
0r
,dqr
1r


dqr
(e-1)r
}为位数是否小于e,若小于,则在dqr
(e-1)r
补入已占用标识,使得补位后的{dqr
0r
,dqr
1r


dqr
(e-1)r
}的总位数为e,作为第二待测序列;
[0209]
步骤g3434、将所述第二待测序列与预先配置的第四映射表对比,输出第r个分组对应的资源类型的当前最大连续资源块数,所述第四映射表用于存储第二待测序列和最大连续资源块数的映射关系,第二待测序列的位数为e。
[0210]
通过实施例七能够实现执行模块中获取最大连续资源块的硬件单元的时分复用,以及在同一时间周期内,同时对多组资源获取对应的最大连续资源。能够减小执行模块中最大连续资源块的硬件单元的布置数量,减小gpu的面积和功耗。
[0211]
以下通过一个具体示例来进一步说明:
[0212]
为了便于说明,以三种类型的资源实现最大连续资源块的硬件单元的复用为例进行说明,本实施例中,第一资源的资源块总数为128块,第二资源的资源块总数为64块,第三资源的资源块总数为48块,为了满足共享需求,共享硬件单元的最大位数为128位,1表示未占用标识,0表示已占用标识),用i0表示当前时间周期所对应的当前资源状态序列存入对应的共享硬件单元分组中,分成高低两部分ih和i
l
,每部分占一半即64bit。
[0213]
本实施例中,共享硬件单元第一时间周期为第一资源查找最大连续资源块数量,搜索步骤如下框图所示;框图1为当前序列右移0位至右移127位的情况,共128种。框图2为
当前序列,当前序列与其右移1位序列做逻辑与运算,当前序列与其右移2位序列做逻辑与运算,直至当前序列与其右移127位序列做逻辑与运算的结果。直接每一一逻辑与运算的结果进行自或,然后从最后一个自或序列网上查找第一个结果为1的序列对应的序列号,然后加1即可获取到第一资源最大资源块数。为了便于对第二资源和第三资源在同一时间周期内复用共享硬件单元进行说明,对于第一资源的查找还可采用以下方法,框图3和框图4分别在统计框图2逻辑结果自或逻辑情况,分成高64位和低64位两部分统计,结果以s表示;最终结果假设s
li
|s
hi
=1(也即s
li
和s
hi
之中只要有一个为1),则最大连续空闲空间大小不小于(i+1),由s
l127
|s
h127
开始运算找到第一个结果为1的(i+1)即对应最大连续空闲空间大小。
[0214]
共享硬件单元第二时间周期同时为第二类和第三类资源搜索最大连续空闲空间大小,搜索步骤如下框图所示;框图5为当前序列右移0位至右移127位的情况,共128种;其中m可根据前边的定义事先准备好;其中m(i)表示128bit的序列,此序列除第i个bit为0,其他bit均为1,例如m(0)表示除最低bit为0外其他bit均为1,即m(0)=128’hffff_ffff_ffff_ffff_ffff_ffff_ffff_fffe;再如m(0,1)=128’hffff_ffff_ffff_ffff_ffff_ffff_ffff_fffc。然后再采用框图2,框图3,框图4与第一周期时完全相同的做法进行响应的运算;最终结果分别查看s
li
和s
hi
,s
li
为1,则第二类最大连续空闲空间大小不小于(i+1),由s
l63
开始运算找到第一个结果为1的(i+1)即对应第二类最大连续空闲空间大小;s
hi
为1,则第三类最大连续空闲空间大小不小于(i+1),由s
h63
开始运算找到第一个结果为1的(i+1)即对应第三类最大连续空闲空间大小。
[0215]
需要说明的是,前序实施例以及后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0216]
实施例八
[0217]
gpu的基本原则和特性在于gpu资源平衡、资源分配同步,完成的时候基本同步,对于执行模块,会连续不断处理多个任务组,如何保证每个任务组尽可能平衡地分配到多个执行单元,如何保证多个执行模块连续处理多个任务组整体地资源平衡,是保证gpu资源分配平衡,提高gpu资源利用率,减小功耗的关键所在。实施例八提出了一种gpu资源调度方法,用于解决此问题。
[0218]
一种gpu资源调度方法,包括:
[0219]
步骤h1、获取待分发任务组,读取待分配任务数量,所述待分配任务为需要平衡分配至执行模块的执行单元中的任务,所述执行模块包括q个执行单元;
[0220]
步骤h2、基于任务数切分表确定所述待分配任务数量对应的初始分配组合序列,所述任务数切分表用于存储分配任务数量与初始分配组合序列的映射关系;
[0221]
其中,所述初始分配组合为执行模块未分配任何任务的情况下的平衡分配组合。
[0222]
步骤h3、获取所述执行模块中的预设指针信息,基于所述指针信息确定循环移位数su,将所述初始分配组合序列向预设的预设方向循环移动su位,得到目标分配组合信息;
[0223]
步骤h4、基于所述待分发任务组对应的目标分配组合信息匹配所述执行模块的gpu资源。
[0224]
需要说明的是,如果始终按照初始分配组合向每一执行模块分配任务,那么必然会导致某些部分执行模块的分配的任务量始终大于其他部分执行模块的分配的任务量,使得任务分配和资源调度均衡。本技术通过设置指针信息,记录每一执行模块上一轮的任务
分配信息,基于此,调整本轮目标分配组合信息,从而保证每一执行模块在多轮任务分配执行中,尽可能实现任务分配和资源调度平衡。
[0225]
作为一种实施例,所述方法还包括步骤h10、构建任务数切分表,包括:
[0226]
步骤h101、沿所述预设方向从0至q-1设置q个执行单元对应的序号标识,初始化任务数wx=1,初始化初始分配组合为{qx0,qx1,

qx
q-1
}中的每一位均为0,qx
t
为第t个执行单元的分配任务数,t的取值范围为0到q-1;
[0227]
步骤h102、获取wx比q的商wy以及余数wz,若t《wz,则设置qx
t
=wy+1,若t≥wz,则设置qx
t
=wy,基于所有的qx
t
生成对应的初始分配组合{qx0,qx1,

qx
q-1
};
[0228]
步骤h103、判断wx是否等于q*l,l为每一执行单元所能执行的最大任务数,若是,则基于所有wx与对应初始分配组合的映射关系生成所述任务数切分表,否则,设置wx=wx+1,返回执行所述步骤h102。
[0229]
通过步骤h101-步骤h103即可构建任务数切分表,获取每一执行模块对应的初始分配组合,后续再结合指针信息进行调整,从而得到目标分配组合。需要说明的是,每一执行模块的硬件资源布局是相同的,因此,多个执行模块可以共用同一个任务数切分表,为了保证多个任务通道并行执行,每个任务通道可以设置一个任务数切分表,每一执行模块的指针信息存贮在执行模块中。
[0230]
作为一种实施例,
[0231]
所述循环移位数su基于上一轮指针所指的执行单元标识t1’
和本轮任务数wx2’
确定。
[0232]
所述预设指针为尾指针,本轮预设指针目标指向第t个执行单元,t为t1’
+wx2’
除以q的余数,当余数为0时,t=t1’
,所述尾指针初始指向第0个执行单元,则所述步骤h3中,su=t+1。
[0233]
作为一种实施例,所述预设指针为头指针,本轮预设指针目标指向第t个执行单元,t为t1’
+1+wx2’
除以q的余数,当余数为0时,t=t1’
,所述头指针初始指向第0个执行单元,则所述步骤h3中,su=t。
[0234]
作为一种实施例,所述方法还包括h5、若所述执行模块中的剩余资源与所述待分发任务组的目标分配组合信息相匹配,且所述执行模块被选中为目标执行模块,执行所述待分发任务组,则将预设指针更新为指向第t个执行单元。也即,得到目标分配组合信息后,还需进行资源匹配判断以及执行模块的选择操作,只有最终被选择为目标执行模块执行本轮任务分发和任务执行的执行模块才需更新对应的指针信息。
[0235]
需要说明的是,前序实施例以及后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0236]
实施例八能够保证每个任务组尽可能平衡地分配到多个执行单元,保证多个执行模块连续处理多个任务组整体地资源平衡,从而实现gpu资源分配平衡,提高了gpu资源利用率,减小了功耗。
[0237]
实施例九、
[0238]
gpu结构中,通常包括p个执行模块,那么对于同一待分发任务组中,可能存在多个剩余资源与其资源需求匹配的目标执行模块,现有技术中通常采用轮转调度(round robin scheduling)的算法来从多个选择符合条件的执行单元中选择目标执行模块,但此种方式
并没有考虑每一执行单元中剩余资源的状况,因此,无法保证gpu的资源分配平衡。基于此,本发明提出了实施例九。
[0239]
一种gpu资源调度方法,包括:
[0240]
步骤i1、获取候选执行模块列表{ap1,ap2,

apf},apf为第f个候选执行模块,f的取值范围为1到f,f为候选执行模块总数,候选执行模块是当前剩余资源信息与目标任务组的资源需求信息相匹配的执行模块;
[0241]
其中,候选执行模块是当前剩余资源信息与目标任务组的资源需求信息相匹配的执行模块。所述gpu资源包括连续分配需求的资源的第一类资源和不具有连续分配需求的资源的第二类资源。所述当前剩余资源信息为包括每一种第一类资源对应的最大连续剩余资源数,以及每一种第二类资源对应的最大剩余资源数。
[0242]
步骤i2、获取apf的中第h资源的当前剩余资源数量rh和预先存储的第h资源的权重ah,h的取值范围为1到h,h为执行模块中资源类型的总数量;
[0243]
步骤i3、基于rh和ah获取apf的当前剩余资源总权重taf:
[0244][0245]
步骤i4、获取数值最大的taf对应的f值作为fx,将第fx个候选执行模块确定为目标执行模块,将所述目标任务组分发至所述目标执行模块。
[0246]
需要说明的是,当前剩余资源总权重越大,说明该执行模块为当前剩余资源数量最多的执行模块,因此,将该模块确定为目标执行模块,可以平衡gpu各个执行单元的资源利用率,减小功耗。
[0247]
作为一种实施例,所述方法还包括:步骤i10、获取执行模块中每一类型资源对应的权重ah,具体包括:
[0248]
步骤i101、向所述待测执行模块发送ma条仅需要第h资源执行的待测任务,执行所述待测任务,获取第h资源对应的功耗值axh;
[0249]
需要说明的是,可以通过设置对应的上层测试程序,来向gpu下发ma条仅需要第h资源执行的待测任务,直接通过现有技术实现即可,在此不再赘述。
[0250]
步骤i102、基于每一资源的功耗值设置每一资源的权重值,所有资源的axh的比例关系与ah的比例关系相同,将所有的ah存储至每一执行模块中。
[0251]
作为一种实施例,所述gpu包括p个执行模块,所述步骤i10还包括:
[0252]
步骤i100、从p个执行模块中随机选择一个作为待测执行模块,关闭其他执行模块。
[0253]
需要说明的是,由于每一执行模块的硬件资源配置均相同,因此可以仅通过一个执行模块来测试确定权重ah。
[0254]
作为一种实施例,步骤i2、获取apf的中第h资源的当前剩余资源数量rh包括:
[0255]
步骤i21、从每一第h资源对应的预设的计数单元中读取当前剩余资源数量rh。
[0256]
作为一种实施例,每一第h资源预设的计数单元设置在执行模块中,预设的计数单元用于存储当前剩余资源数量rh,rh初始化为第h资源总数量,每分配一个第h资源,则将rh减去1,每释放一个第h资源,则将rh加上1。
[0257]
作为一种实施例,步骤i2、获取apf的中第h资源的当前剩余资源数量rh,若其中的第h资源为需要获取最大连续资源块的第一类资源,还可通过实施例四、实施例五、实施例六中的任意一个方法来获取最大连续资源块的数量,作为对应的rh值,在此不再赘述。
[0258]
实施例九能够基于每一候选执行模块的当前资源剩余情况来选择目标执行模块,具有实时性,从而使得所有执行模块处于平稳状态,产生的功耗比较均匀,使得gpu所有资源尽可能平衡,避免资源浪费。
[0259]
需要说明的是,前序实施例以及后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0260]
实施例十、
[0261]
当目标任务在目标执行模块中分配给对应的执行单元以后,执行单元会调取相应的执行指令进行执行,实施例十提出了一种基于执行指令的执行状况来选取目标执行模块的方法,相较于实施例九能够更细粒度获取每一执行模块当前的资源利用状态,从而进一步提升gpu资源调度得到平衡性。
[0262]
一种gpu资源调度方法,包括:
[0263]
步骤j1、获取候选执行模块列表{ap1,ap2,

apf},apf为第f个候选执行模块,f的取值范围为1到f,f为候选执行模块总数;
[0264]
其中,候选执行模块是当前剩余资源信息与目标任务组的资源需求信息相匹配的执行模块
[0265]
步骤j2、获取距离当前预设的nx个历史时钟周期内,apf执行第s指令的数量cs,获取预先存储的第s指令的权重bs;
[0266]
步骤j3、基于cs和bs获取apf距离当前预设的nx个历史时钟周期内的功耗总量tbf:
[0267][0268]
步骤j4、获取数值最小的tbf对应的f值作为fx,将第fx个候选执行模块确定为目标执行模块,将所述目标任务组分发至所述目标执行模块。
[0269]
需要说明的是,执行模块距离当前nx个历史时钟周期内的功耗总量tbf越小,说明该执行模块为当前剩余资源数量越多,因此,将tbf最小执行模块确定为目标执行模块,从而提高gpu资源利用率,减小功耗。
[0270]
作为实施例,所述指令包括数据传送指令、读存储指令、写存储指令、矩阵运算指令、比较指令和跳转指令等指令类别,其中矩阵运算指令还可根据矩阵大小再进一步分类,每一指令类别中又可包括多个不同的执行指令,步骤j2中要对每一指令统计在nx个历史时钟周期内的执行数量,提高了资源预测的精确度,从而提高了gpu资源分配的平衡性。
[0271]
作为一种实施例,所述步骤j1中,所述获取候选执行模块列表,包括:
[0272]
步骤j11、获取待分发任务组的资源需求信息;
[0273]
步骤j12、获取当前gpu中每一执行模块的当前剩余资源信息;
[0274]
步骤j13、将待分发任务组的资源需求信息分别与所有执行模块的当前剩余资源信息进行匹配,将匹配成功的执行模块加入所述执行模块列表。
[0275]
作为一种实施例,所述方法还包括:步骤j10、获取执行模块中每一类指令对应的
权重bs,具体包括:
[0276]
步骤j101、向所述待测执行模块发送仅需调用na条第s指令的待测任务,执行所述待测任务,获取执行na条第s指令功耗值bxs;
[0277]
需要说明的是,可以通过设置对应的上层测试程序,来向gpu下发na条第s指令的待测任务,直接通过现有技术实现即可,在此不再赘述。
[0278]
步骤j102、基于每一类指令的功耗值设置每一类指令的权重值,所有指令的bxs的比例关系与bs的比例关系相同,将所有的bs存储至每一执行模块中。
[0279]
作为一种实施例,nx为2的整数次方,nx与统计平衡性成正比,与预测准确性成反比。即nx值越大,统计结果的平衡性越好,nx值越大,则统计最久时间点距离当前时间点的时间越长,预测准确性越低,因此nx值根据具体应用需求设置即可,作为一种示例,nx的值可设置为1024。
[0280]
作为一种实施例,步骤j10还包括:
[0281]
步骤j100、从p个执行模块中随机选择一个作为待测执行模块,关闭其他执行模块;
[0282]
需要说明的是,由于每一执行模块的硬件资源配置均相同,因此可以仅通过一个执行模块来测试确定权重bs。
[0283]
实施例十能够基于每一候选执行模块的历史资源使用情况来选择目标执行模块,相较于实施例九的统计力度更细,从而使得所有执行模块处于平稳状态,发热均匀,使得gpu所有资源尽可能平衡,避免资源浪费。但可以理解的是,还可将实施例十和实施例九结合起来,并赋予对应的权重,综合选择目标执行模块,在此不再赘述。
[0284]
需要说明的是,前序实施例以及后续其他实施例中的相关技术细节也可适用于本实施例中的相关步骤,在此不再重复赘述。
[0285]
需要说明的是,本发明实施例中,一些示例性实施例被描述成作为流程图描绘的处理或方法。步骤的编号并不意味着对步骤执行顺序的限制,除非有特别指定,本领域技术人员知晓,虽然本发明实施将各步骤描述成顺序的处理,但是其中的部分步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
[0286]
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

技术特征:
1.一种gpu资源调度方法,其特征在于,包括:步骤j1、获取候选执行模块列表{ap1,ap2,

ap
f
},ap
f
为第f个候选执行模块,f的取值范围为1到f,f为候选执行模块总数;步骤j2、获取距离当前预设的nx个历史时钟周期内,ap
f
执行第s指令的数量c
s
,获取预先存储的第s指令的权重b
s
;步骤j3、基于c
s
和b
s
获取ap
f
距离当前预设的nx个历史时钟周期内的功耗总量tb
f
:步骤j4、获取数值最小的tb
f
对应的f值作为fx,将第fx个候选执行模块确定为目标执行模块,将所述目标任务组分发至所述目标执行模块。2.根据权利要求1所述的方法,其特征在于,所述方法还包括步骤j10、获取执行模块中每一类指令对应的权重b
s
,具体包括:步骤j101、向待测执行模块发送仅需调用na条第s指令的待测任务,执行所述待测任务,获取执行na条第s指令功耗值bx
s
;步骤j102、基于每一类指令的功耗值设置每一类指令的权重值,所有指令的bx
s
的比例关系与b
s
的比例关系相同,将所有的b
s
存储至每一执行模块中。3.根据权利要求2所述的方法,其特征在于,步骤j10还包括:j100、从p个执行模块中随机选择一个作为待测执行模块,关闭其他执行模块。4.根据权利要求2所述的方法,其特征在于,na的取值与nx相同。5.根据权利要求1或4所述的方法,其特征在于,nx为2的整数次方,nx与统计平衡性成正比,与预测准确性成反比。6.根据权利要求5所述的方法,其特征在于,nx的值设置为1024。7.根据权利要求1所述的方法,其特征在于,所述指令包括数据传送指令、读存储指令、写存储指令、矩阵运算指令、比较指令、跳转指令。8.根据权利要求1所述的方法,其特征在于,所述步骤j1中,所述获取候选执行模块列表,包括:步骤j11、获取待分发任务组的资源需求信息;步骤j12、获取当前gpu中每一执行模块的当前剩余资源信息;步骤j13、将待分发任务组的资源需求信息分别与所有执行模块的当前剩余资源信息进行匹配,将匹配成功的执行模块加入所述执行模块列表。

技术总结
本发明涉及一种GPU资源调度方法,包括:步骤J1、获取候选执行模块列表{AP1,AP2,


技术研发人员:请求不公布姓名
受保护的技术使用者:沐曦集成电路(上海)有限公司
技术研发日:2022.01.10
技术公布日:2023/7/20
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐