一种GPU资源的分配方法及系统与流程

文档序号:12596638阅读:429来源:国知局
一种GPU资源的分配方法及系统与流程

本发明涉及计算机技术领域,尤其涉及一种GPU资源的分配方法及系统。



背景技术:

随着GPU(Graphic Processing Unit,图形处理器)通用技术的发展,GPU不仅能够处理图像负载,也能够处理特定类型的通用程序。目前,当有多个不同的kernel(核)程序需要访问GPU时,一般是以序列化的方式使请求访问GPU的kernel程序按照发送请求的时间顺序逐个访问GPU。如果一个延迟很长的kernel程序正在占用GPU,当有优先级更高的kernel程序需要访问GPU时,必须等前面正在访问GPU的kernel程序以及正在等待访问GPU的kernel程序运行结束后,释放出GPU中的SM(Stream Multiprocessor,流式多处理器)资源,该优先级更高的kernel程序才能访问GPU,使得该优先级更高的kernel程序得不到及时响应,影响业务质量。

为了避免延时长的kernel程序长时间独占GPU中的SM资源,当有高优先级的kernel程序需要访问GPU时,可以查找空闲的SM,当查找到空闲的SM时,将高优先级的kernel程序分发给该空闲的SM运行。

然而,如果GPU中没有空闲的SM,则需要等待GPU中出现空闲的SM时,才能够开始运行高优先级的kernel程序,导致高优先级的kernel程序得不到及时的响应。



技术实现要素:

本发明的实施例提供一种GPU资源的分配方法及系统,可以解决高优先级的kernel程序得不到及时响应的问题。

为达到上述目的,本发明的实施例采用如下技术方案:

第一方面,本发明实施例提供一种图形处理器GPU资源的分配方法,所述方法应用于GPU资源的分配系统中,所述系统包括全局逻辑控制器以及至少两个能够与所述全局逻辑控制器通信的流式多处理器SM,所述方法包括:

所述全局逻辑控制器从核kernel状态寄存器表中确定待分发kernel程序,所述kernel状态寄存器表中包括每个未完成运行的kernel程序的优先级以及每个未完成运行的kernel程序中未分发的线程块block数量,所述待分发kernel 程序为所述kernel状态寄存器表中优先级最高且未分发的block数量不为零的kernel程序;

所述全局逻辑控制器从SM状态寄存器表中查找能够运行至少一个完整block的SM,所述SM状态寄存器表中包括每个SM中的剩余资源量以及每个SM中block的最高优先级;

当所述全局逻辑控制器未查找到能够运行至少一个完整block的SM时,从所述SM状态寄存器表中查找第一SM,所述第一SM为能够运行至少一个线程束warp的SM;

当所述全局逻辑控制器查找到所述第一SM时,将所述待分发kernel程序中的block分发给所述第一SM;

当所述全局逻辑控制器未查找到所述第一SM时,查找第二SM,所述第二SM中block的最高优先级低于所述待分发kernel程序的优先级;

当所述全局逻辑控制器查找到所述第二SM时,将所述待分发kernel程序中的block分发给所述第二SM。

在第一种可能的实施例中,结合第一方面,在所述全局逻辑控制器从SM状态寄存器表中查找能够运行至少一个完整block的SM之后,所述方法还包括:

当所述全局逻辑控制器查找到能够运行至少一个完整block的SM时,确定第一数量,所述第一数量为所述能够运行一个完整block的SM实际能够运行的block的数量;

当所述待分发kernel程序中未分发的block的数量大于所述第一数量时,将所述待分发kernel程序中所述第一数量的block分发给所述能够运行至少一个完整block的SM;

当所述待分发kernel程序中未分发的block的数量小于或等于所述第一数量时,将所述待分发kernel程序中未分发的block全部分发给所述能够运行至少一个完整block的SM。

在第二种可能的实施例中,结合第一方面中的第一种可能的实施例,在所述全局逻辑控制器将所述待分发kernel程序中的block分发给所述第二SM之后,所述方法还包括:

第二SM逻辑控制器从block状态寄存器表中确定优先级最高的block,所述第二SM逻辑控制器为所述第二SM中的SM逻辑控制器,所述block状态寄存器表包括被分发到所述第二SM中的每个block的优先级;

所述第二SM逻辑控制器查找当前的空闲硬件warp;

当所述第二SM逻辑控制器确定所述空闲硬件warp能够运行一个warp,且未接收到优先级更高的block时,将所述优先级最高的block中的一个warp分发给所述空闲硬件warp。

在第三种可能的实施例中,结合第一方面或第一方面中上述任一种可能的实施例,所述SM状态寄存器表中包括每个SM的剩余寄存器数量、剩余硬件warp数量以及剩余共享存储空间,所述第一SM为所述剩余寄存器数量大于运行一个warp所需的寄存器数量、所述剩余硬件warp数量大于运行一个warp所需的硬件warp数量且所述剩余共享存储空间大于运行一个warp所需的共享存储空间的SM。

在第四种可能的实施例中,结合第一方面中第三种可能的实施例,在所述当所述第二SM逻辑控制器确定所述空闲硬件warp能够运行一个warp,且未接收到优先级更高的block时,将所述优先级最高的block中的一个warp分发给所述硬件warp之后,所述方法还包括:

所述第二SM逻辑控制器确定所述第二SM中有运行完成的warp时,通知所述全局逻辑控制器更新所述第二SM的剩余寄存器数量、剩余warp数量以及剩余共享存储空间;

当所述第二SM逻辑控制器确定所述运行完成的warp所属block中不存在未运行的warp时,确定所述第二SM中未运行完成的block的最高优先级,通知所述全局逻辑控制器更新所述SM状态寄存器表中的所述第二SM中block的最高优先级。

第二方面,本发明实施例提供一种图形处理器GPU资源的分配系统,所述系统包括全局逻辑控制器以及至少两个能够与所述全局逻辑控制器通信的流式多处理器SM;所述全局逻辑控制器包括:第一确定单元、第一查找单元以及第一分发单元;

所述第一确定单元,用于从核kernel状态寄存器表中确定待分发kernel程序,所述kernel状态寄存器表中包括每个未完成运行的kernel程序的优先级以及每个未完成运行的kernel程序中未分发的线程块block数量,所述待分发kernel程序为所述kernel状态寄存器表中优先级最高且未分发的block数量不为零的kernel程序;

所述第一查找单元,用于从SM状态寄存器表中查找能够运行至少一个完 整block的SM,所述SM状态寄存器表中包括每个SM中的剩余资源量以及每个SM中block的最高优先级;当未查找到能够运行至少一个完整block的SM时,从所述SM状态寄存器表中查找第一SM,所述第一SM为能够运行至少一个线程束warp的SM;

所述第一分发单元,用于当所述第一查找单元查找到所述第一SM时,将所述待分发kernel程序中的block分发给所述第一SM;

所述第一SM,用于运行所述第一分发单元分发的所述待分发kernel程序中的block;

所述第一查找单元,还用于当未查找到所述第一SM时,查找第二SM,所述第二SM中block的最高优先级低于所述待分发kernel程序的优先级;

所述第一分发单元,还用于当所述第一查找单元查找到所述第二SM时,将所述待分发kernel程序中的block分发给所述第二SM;

所述第二SM,用于运行所述第一分发单元分发的所述待分发kernel程序中的block。

在第一种可能的实施例中,结合第二方面,所述第一确定单元,还用于当所述第一查找单元查找到能够运行至少一个完整block的SM时,确定第一数量,所述第一数量为所述能够运行一个完整block的SM实际能够运行的block的数量;

所述第一分发单元,还用于当所述待分发kernel程序中未分发的block的数量大于所述第一数量时,将所述待分发kernel程序中所述第一数量的block分发给所述能够运行至少一个完整block的SM;当所述待分发kernel程序中未分发的block的数量小于或等于所述第一数量时,将所述待分发kernel程序中未分发的block全部分发给所述能够运行至少一个完整block的SM;

所述能够运行至少一个完整block的SM,用于运行所述第一分发单元分发的所述待分发kernel程序中的block。

在第二种可能的实施例中,结合第一方面中的第一种可能的实施例,所述第二SM包括第二确定单元、第二查找单元以及第二分发单元;

所述第二确定单元,用于从block状态寄存器表中确定优先级最高的block,所述block状态寄存器表包括被分发到所述第二SM中的每个block的优先级;

所述第二查找单元,用于查找当前的空闲硬件warp;

所述第二分发单元,用于确定所述空闲硬件warp能够运行一个warp,且未 接收到优先级更高的block时,将所述优先级最高的block中的一个warp分发给所述空闲硬件warp。

在第三种可能的实施例中,结合第二方面或第二方面中上述任一种可能的实施例,所述SM状态寄存器表中包括每个SM的剩余寄存器数量、剩余硬件warp数量以及剩余共享存储空间,所述第一SM为所述剩余寄存器数量大于运行一个warp所需的寄存器数量、所述剩余硬件warp数量大于运行一个warp所需的硬件warp数量且所述剩余共享存储空间大于运行一个warp所需的共享存储空间的SM。

在第四种可能的实施例中,结合第二方面中的第三种可能的实施例,所述第二SM中还包括通知单元;

所述通知单元,用于当确定所述第二SM中有运行完成的warp时,通知所述全局逻辑控制器更新所述第二SM的剩余寄存器数量、剩余warp数量以及剩余共享存储空间;当所确定所述运行完成的warp所属block中不存在未运行的warp时,确定所述第二SM中未运行完成的block的最高优先级,通知所述全局逻辑控制器更新所述SM状态寄存器表中的所述第二SM中block的最高优先级。

本发明实施例提供的GPU资源的分配方法及系统,全局逻辑控制器从kernel状态寄存器表中确定待分发kernel程序,从SM状态寄存器表中查找能够运行至少一个完整block的SM,当未查找到能够运行至少一个block的SM时,则继续查找能够运行至少一个warp的第一SM,将待分发kernel程序中的一个block分发给第一SM,当未查找到第一SM时,将待分发kernel程序中的block分发给第二SM。与现有技术中必须等待GPU中有空闲的SM时,才能将高优先级kernel中的block分发给该SM而导致高优先级的kernel程序得不到及时响应相比,本发明实施例中,当未查找到能够运行至少一个block的SM时,不是等待其他kernel程序释放资源,而是查找能够运行至少一个warp的第一SM,由于warp比block小,所以运行完一个warp比运行完一个block更快,所以更容易查找到能够运行至少一个warp的SM,查找到之后就可以将待分发kernel程序的一个block分发给第一SM,无需等待低优先级的kernel程序运行完一个block,当未查找到能够运行至少一个warp的第一SM时,将待分发kernel程序中的block分发给第二SM,减少了分发block的等待时间,提高了高优先级的kernel程序的响应速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种GPU资源的分配系统的逻辑结构示意图;

图2为本发明实施例提供的一种GPU资源的分配方法的流程图;

图3为本发明实施例提供的另一种GPU资源的分配方法的流程图;

图4为本发明实施例提供的另一种GPU资源的分配方法的流程图;

图5为本发明实施例提供的另一种GPU资源的分配方法的流程图;

图6为本发明实施例提供的另一种GPU资源的分配系统的逻辑结构示意图;

图7为本发明实施例提供的另一种GPU资源的分配系统的逻辑结构示意图;

图8为本发明实施例提供的一种GPU资源的分配装置的逻辑结构示意图;

图9为本发明实施例提供的一种GPU资源的分配装置的逻辑结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施应用于GPU资源的分配系统中,如图1所示,该系统包括全局调度器101以及能够与全局调度器101通信的至少两个SM 102。

其中,全局调度器101包括:全局逻辑控制器1011、kernel状态寄存器表1012以及SM状态寄存器表1013。

SM102包括:SM逻辑控制器1021以及block(线程块)状态寄存器表1022。

全局调度器101,用于将kernel程序分发给SM102运行。

全局逻辑控制器1011,用于根据kernel状态寄存器表1012以及SM状态寄存器表1013将kernel程序以block为粒度或者以warp(线程束)为粒度分发给SM102。

需要说明的是,在本发明实施例中kernel(核)程序为能够在GPU上运行的程序,一个kernel程序包含至少两个block(线程块),一个block包含至少两 个warp(线程束),warp为至少两个GPU线程组成的一组线程,一般情况下,一个warp由32个GPU线程组成。

kernel状态寄存器表1012,用于存储每个未完成运行的kernel程序信息。

其中,kernel程序信息包括kernel程序的优先级、运行该kernel程序需要的寄存器数量、运行该kernel程序需要的共享存储空间、该kernel程序中还未分发的block数量。

SM状态寄存器表1013,用于存储每个SM102当前的剩余资源量以及每个SM中block的最高优先级。

其中,每个SM102当前的剩余资源量包括剩余的寄存器数量、剩余的硬件warp数量以及剩余的共享存储空间。

SM102,用于运行全局调度器101分发的kernel程序。

SM逻辑控制器1021,用于根据block状态寄存器表将block中的warp分发给硬件warp运行。

block状态寄存器表1022,用于存储每个block的运行情况。

其中,block的运行情况包括block的优先级、block所属kernel的编号,block在kernel中的编号,block中未运行部分所需的寄存器数和所需的共享存储空间,以及block中还未分发的warp数。

为了加快高优先级的kernel程序的响应速度,本发明实施例提供一种GPU资源的分配方法,该方法应用于图1所示的GPU资源分配系统中,如图2所示,该方法包括:

201、全局逻辑控制器从kernel状态寄存器表中确定待分发kernel程序。

其中,kernel状态寄存器表中包括每个未完成运行的kernel程序的优先级以及每个未完成运行的kernel程序中未分发的block数量,待分发kernel程序为kernel状态寄存器表中优先级最高且未分发的block数量不为零的kernel程序。

202、全局逻辑控制器从SM状态寄存器表中查找能够运行至少一个完整block的SM,SM状态寄存器表中包括每个SM中的剩余资源量以及每个SM中block的最高优先级。

其中,SM状态寄存器表中具体包括每个SM的剩余寄存器数量、剩余硬件warp数量以及剩余共享存储空间以及每个SM中block的最高优先级,block的优先级与block所属kernel的优先级相同。

需要说明的是,一个SM中可能会存在多个未运行完成的block,且这些block 属于相同或者不同的kernel程序,全局逻辑控制器为了合理的分发block,需确定同一SM中每个block的优先级,从而确定这些block中最高的优先级,再将该SM中block最高优先级存储在SM状态寄存器表中。

能够运行至少一个完整block的SM为剩余寄存器数量大于运行一个block所需的寄存器数量、剩余硬件warp数量大于运行一个block所需的硬件warp数量且剩余共享存储空间大于运行一个block所需的共享存储空间的SM。

举例说明,例如运行一个block需要36kb的寄存器,而一个SM中只剩下20kb的寄存器,则该SM不能运行一个block。

203、当全局逻辑控制器未查找到能够运行至少一个完整block的SM时,从SM状态寄存器表中查找第一SM,第一SM为能够运行至少一个warp的SM。

可以理解的是,第一SM为剩余寄存器数量大于运行一个warp所需的寄存器数量、剩余硬件warp数量大于运行一个warp所需的硬件warp数量且剩余共享存储空间大于运行一个warp所需的共享存储空间的SM。

需要说明的是,当运行一个block需要36kb寄存器,而剩余资源量最多的SM只剩余12kb的寄存器时,全局逻辑控制器查找不到能够运行至少一个block的SM,而运行一个warp只需要6kb寄存器,此时剩余12kb寄存器的SM可以运行两个warp,即全局逻辑控制器能够查找到第一SM。

204、当全局逻辑控制器查找到第一SM时,将待分发kernel程序中的block分发给第一SM。

其中,如果第一SM的剩余资源只能运行一个warp,则将待分发kernel程序中的block分发给第一SM后,第一SM会将block中的warp逐个运行。

205、当全局逻辑控制器未查找到第一SM时,查找第二SM,第二SM中block的最高优先级低于待分发kernel程序的优先级。

206、当全局逻辑控制器查找到第二SM时,将待分发kernel程序中的block分发给第二SM。

值得说明的是,为了避免当前确定的待分发kernel程序中的block抢占SM中正在运行的优先级更高的kernel程序所占用的资源,该优先级更高的kernel程序未分发的block数为0,但是已分发的block还未运行结束,当全局逻辑控制器未查找到能够运行一个warp的SM时,需将SM状态寄存器表中存储的每个SM中block的最高优先级与步骤201中确定的待分发kernel程序的优先级相比较,将SM中block的最高优先级低于该待分发kernel程序的优先级的SM确 定为第二SM,再将待分发kernel程序中的block分发给第二SM。

此外,需要说明的是,第二SM的数量为至少一个,在第二SM中的剩余资源不足以运行一个warp时,也将待分发kernel程序中的block分发给第二SM,可以减少分发block等待的时间,将待分发kernel程序中的block分发给第二SM之后,第二SM中有warp运行结束就可以开始运行该待分发kernel程序中的block。

本发明实施例提供的GPU资源的分配方法,全局逻辑控制器从kernel状态寄存器表中确定待分发kernel程序,从SM状态寄存器表中查找能够运行至少一个完整block的SM,当未查找到能够运行至少一个block的SM时,则继续查找能够运行至少一个warp的第一SM,将待分发kernel程序中的一个block分发给第一SM,当未查找到第一SM时,将待分发kernel程序中的block分发给第二SM。与现有技术中必须等待GPU中有空闲的SM时,才能将高优先级kernel中的block分发给该SM而导致高优先级的kernel程序得不到及时响应相比,本发明实施例中,当未查找到能够运行至少一个block的SM时,不是等待其他kernel程序释放资源,而是查找能够运行至少一个warp的第一SM,由于warp比block小,所以运行完一个warp比运行完一个block更快,所以更容易查找到能够运行至少一个warp的SM,查找到之后就可以将待分发kernel程序的一个block分发给第一SM,无需等待低优先级的kernel程序运行完一个block,当未查找到能够运行至少一个warp的第一SM时,将待分发kernel程序中的block分发给第二SM,减少了分发block的等待时间,提高了高优先级的kernel程序的响应速度。

作为对上述实施例的补充,在本发明实施例提供的另一种实现方式中,如图3所示,在上述步骤202、全局逻辑控制器从SM状态寄存器表中查找能够运行至少一个完整block的SM之后,如果查找到能够运行至少一个完整block的SM,则执行下述步骤207至209。

207、当全局逻辑控制器查找到能够运行至少一个完整block的SM时,确定第一数量,第一数量为能够运行一个完整block的SM实际能够运行的block的数量。

其中,第一数量为全局逻辑控制器通过能够运行至少一个完整block的SM中的SM状态寄存器表确定的。全局逻辑控制器能够根据SM状态寄存器表中存储的SM的剩余资源量以及运行一个block所需的资源量计算出该SM实际能够 运行的block数量。

208、当待分发kernel程序中未分发的block的数量大于第一数量时,将待分发kernel程序中第一数量的block分发给能够运行至少一个完整block的SM。

其中,kernel状态寄存器表中还包括每个未完成运行的kernel中未完成分发的block数量。

值得说明的是,当待分发kernel程序中未分发的block数量大于第一数量时,说明查找到的SM的剩余资源不足以运行待分发kernel程序中的未分发的block,所以先将第一数量的block分发给该SM,当有block运行完成释放出SM中的资源后,再将该kernel中剩余的block分发给SM。

209、当待分发kernel程序中未分发的block的数量小于或等于第一数量时,将待分发kernel程序中的未分发的block全部分发给能够运行至少一个完整block的SM。

值得说明的是,在上述步骤204、206、208以及209向全局逻辑控制器向SM分发block后,都需要更新kernel状态寄存器中待分发kernel程序中未分发的block数量。

本发明实施例提供的GPU资源的分配方法,当全局逻辑控制器查找到能够运行至少一个block的SM时,确定第一数量,当待分发kernel程序中未分发的block的数量大于第一数量时,将待分发kernel程序中第一数量的block分发给能够运行至少一个完整block的SM;当待分发kernel程序中未分发的block的数量小于或等于第一数量时,将待分发kernel程序中的全部block分发给能够运行至少一个完整block的SM。在能够查找到运行至少一个block的SM时,将待分发kernel中尽可能多的block分发给该SM,可以使待分发kernel得到及时的响应,提高了高优先级的kernel程序的响应速度。

在全局逻辑控制器将block分发给SM后,SM需合理的将block中的warp分发运行,所以本发明另一实施例提供了在步骤204、当全局逻辑控制器查找到第二SM时,将待分发kernel程序中的一个block分发给第二SM之后,第二SM逻辑控制器分发warp的方法,如图4所示,该方法包括:

401、第二SM逻辑控制器从block状态寄存器表中确定优先级最高的block,第二SM逻辑控制器为第二SM中的SM逻辑控制器,block状态寄存器表包括被分发到第二SM中的每个block的优先级。

结合图1所示的GPU资源的分配系统,全局逻辑控制器连接于至少两个 SM,当全局逻辑控制器将待分发kernel程序中的一个block分发给第二SM后,第二SM中的第二SM逻辑控制器需将该block中的warp分发给硬件warp运行。

由于第二SM中还正在运行其他kernel中的block,或者还有其他kernel中的block正在等待运行,所以第二SM逻辑控制器需要从block状态寄存器表中确定优先级最高的block,优先运行优先级最高的block中的warp。

值得说明的是,block状态寄存器中存储的block的优先级为block所属kernel的优先级,同一kernel中的block的优先级是相同的。

402、第二SM逻辑控制器查找当前的空闲硬件warp。

需要说明的是,当第二SM逻辑控制器查找到空闲硬件warp时,则执行下述步骤403;当第二SM逻辑控制器未查找到空闲硬件warp时,则重复查找动作,直到查找到空闲的硬件warp再继续执行下述步骤403。

由于第二SM中还有低优先级的kernel程序正在运行,所以,等待低优先级的kernel程序中有warp运行结束后,就会有硬件warp恢复空闲状态,此时第二SM逻辑控制器就能够查找到空闲硬件warp,高优先级的kernel程序中的warp即可占用该硬件warp。

403、当第二SM逻辑控制器确定空闲硬件warp能够运行一个warp,且未接收到优先级更高的block时,将优先级最高的block中的一个warp分发给空闲硬件warp,并更新block状态寄存器表。

其中,判断空闲硬件warp是否能够运行一个warp的方法为:判断第二SM中的寄存器数量是否足够运行一个warp,如果足够,且此时第二SM未接收到优先级更高的block时,则将此时优先级最高的block中的一个warp分发给查找到的空闲硬件warp;如果不够,则继续等待,直到有warp运行结束,寄存器数量足够运行一个warp时,再向该空闲硬件warp分发一个warp。

值得说明的是,将优先级最高的block中的一个warp分发给空闲硬件warp后,还需判断该优先级最高的block是否分发完毕,若是,则重新执行上述步骤401至403;若否,则重新执行上述步骤402至403。

值得说明的是,在上述步骤205、当全局逻辑控制器查找到第一SM时,将待分发kernel程序中的block分发给第一SM之后,第一SM的SM逻辑控制器分发warp的方法与第二SM逻辑控制器分发warp的方法相同,此处不再赘述。

本发明实施例提供的GPU资源的分配方法,第二SM逻辑控制器首先查找空闲硬件warp,当查找到空闲硬件warp且此时第二SM能够运行一个warp时, 就将优先级最高的block中的一个warp分发给硬件warp运行,无需等待第二SM中有能够运行整个block的资源后再将整个block分发给硬件warp运行,减少了等待时间,提高了高优先级kernel程序的响应速度。

为了减少SM中的空闲资源,提高SM的资源利用率,以加快高优先级kernel程序的响应速度,在本发明实施例提供的另一种实现方式中,如图5所示,该方法还包括:

501、当第二SM逻辑控制器确定第二SM中有运行完成的warp时,通知全局逻辑控制器更新SM状态寄存器表中的第二SM的剩余寄存器数量、剩余硬件warp数量以及剩余共享存储空间。

可以理解的是,当运行完一个warp时,运行该warp所需的寄存器、硬件warp以及共享存储都会被释放,所以需要实时更新SM状态寄存器表中的第二SM的剩余寄存器数量、剩余硬件warp数量以及剩余共享存储空间,以便于全局逻辑控制器及时为该SM下发block。

502、当第二SM逻辑控制器确定运行完成的warp所属block中不存在未运行的warp时,确定第二SM中未运行完成的block的最高优先级,通知全局逻辑控制器更新SM状态寄存器表中的第二SM中block的最高优先级。

值得说明的是,当运行完成的warp所属block中还存在未运行完成的warp时,则第二SM等待下一个warp运行完成后,再执行步骤501。

本发明实施例提供的GPU资源的分配方法,当第二逻辑控制器确定有运行完成的warp时,通知全局逻辑控制器更新SM状态寄存器表,且第二逻辑控制器及时通知全局逻辑控制器更新SM状态寄存器表中的第二SM中block的最高优先级,使得全局逻辑控制器可以根据更新后的SM状态寄存器表,及时向SM下发高优先级kernel中的block,提高了SM的资源利用率,同时加快了高优先级的kernel程序的响应速度。

结合图2至图5所示的GPU资源的分配方法,本发明实施例还提供一种GPU资源的分配系统,如图6所示,该系统包括全局逻辑控制器601以及至少两个能够与所述全局逻辑控制器601通信的流式多处理器SM;全局逻辑控制器包括:第一确定单元6011、第一查找单元6012以及第一分发单元6013。

需要说明的是,该系统中的SM可以为能够运行至少一个完整block的SM602,第一SM603或者第二SM604。

其中,第一SM603为为能够运行至少一个warp的SM,第二SM中block 的最高优先级低于待分发kernel程序的优先级。待分发kernel程序为kernel状态寄存器表中优先级最高且未分发的block数量不为零的kernel程序。

图6中示出了能够运行至少一个完整block的SM602,第一SM603以及第二SM604,由于这三种SM是根据SM中的剩余资源量确定的,所以存在这三种SM可能不同时存在的情况,此外该系统中SM中的数量也不限于图6中示出的三个。

第一确定单元6011,用于从核kernel状态寄存器表中确定待分发kernel程序,kernel状态寄存器表中包括每个未完成运行的kernel程序的优先级以及每个未完成运行的kernel程序中未分发的线程块block数量。

第一查找单元6012,用于从SM状态寄存器表中查找能够运行至少一个完整block的SM602,SM状态寄存器表中包括每个SM中的剩余资源量以及每个SM中block的最高优先级;当未查找到能够运行至少一个完整block的SM602时,从SM状态寄存器表中查找第一SM603。

第一分发单元6013,用于当第一查找单元6012查找到第一SM603时,将待分发kernel程序中的block分发给第一SM603。

第一SM603,用于运行第一分发单元6013分发的待分发kernel程序中的block。

第一查找单元6012,还用于当未查找到第一SM603时,查找第二SM604。

第一分发单元6013,还用于当第一查找单元6012查找到第二SM604时,将待分发kernel程序中的block分发给第二SM604。

第二SM604,用于运行第一分发单元6013分发的待分发kernel程序中的block。

在本发明另一实施例中,第一确定单元6011,还用于当第一查找单元6012查找到能够运行至少一个完整block的SM时,确定第一数量,第一数量为能够运行一个完整block的SM实际能够运行的block的数量。

第一分发单元6013,还用于当待分发kernel程序中未分发的block的数量大于第一数量时,将待分发kernel程序中第一数量的block分发给能够运行至少一个完整block的SM602;当待分发kernel程序中未分发的block的数量小于或等于第一数量时,将待分发kernel程序中未分发的block全部分发给能够运行至少一个完整block的SM602。

能够运行至少一个完整block的SM602,用于运行第一分发单元6013分发 的待分发kernel程序中的block。

在本发明另一实施例中,如图7所示,第二SM604包括第二确定单元6041、第二查找单元6042、第二分发单元6043以及通知单元6044。

需要说明的是,第二确定单元6041、第二查找单元6042、第二分发单元6043以及通知单元6044具体位于第二SM604中的第二SM逻辑控制器中。

第二确定单元6041,用于从block状态寄存器表中确定优先级最高的block,block状态寄存器表包括被分发到第二SM604中的每个block的优先级。

第二查找单元6042,用于查找当前的空闲硬件warp。

第二分发单元6043,用于确定空闲硬件warp能够运行一个warp,且未接收到优先级更高的block时,将优先级最高的block中的一个warp分发给空闲硬件warp。

值得说明的是,能够运行至少一个个完整block的SM602以及第一SM603与第二SM604的组成结构相同,在本发明实施例中不再一一说明。

需要说明的是,SM状态寄存器表中包括每个SM的剩余寄存器数量、剩余硬件warp数量以及剩余共享存储空间,第一SM603为剩余寄存器数量大于运行一个warp所需的寄存器数量、剩余硬件warp数量大于运行一个warp所需的硬件warp数量且剩余共享存储空间大于运行一个warp所需的共享存储空间的SM。

通知单元6044,用于当确定第二SM604中有运行完成的warp时,通知全局逻辑控制器更新第二SM604的剩余寄存器数量、剩余warp数量以及剩余共享存储空间;当所确定运行完成的warp所属block中不存在未运行的warp时,确定第二SM604中未运行完成的block的最高优先级,通知全局逻辑控制器601更新SM状态寄存器表中的第二SM604中block的最高优先级。

本发明实施例提供的GPU资源的分配系统,全局逻辑控制器中的第一确定单元从kernel状态寄存器表中确定待分发kernel程序,第一查找单元从SM状态寄存器表中查找能够运行至少一个完整block的SM,当未查找到能够运行至少一个block的SM时,则继续查找能够运行至少一个warp的第一SM,第一分发单元将待分发kernel程序中的一个block分发给第一SM,当未查找到第一SM时,将待分发kernel程序中的block分发给第二SM。与现有技术中必须等待GPU中有空闲的SM时,才能将高优先级kernel中的block分发给该SM而导致高优先级的kernel程序得不到及时响应相比,本发明实施例中,当未查找到能够运 行至少一个block的SM时,不是等待其他kernel程序释放资源,而是查找能够运行至少一个warp的第一SM,由于warp比block小,所以运行完一个warp比运行完一个block更快,所以更容易查找到能够运行至少一个warp的SM,查找到之后就可以将待分发kernel程序的一个block分发给第一SM,无需等待低优先级的kernel程序运行完一个block,当未查找到能够运行至少一个warp的第一SM时,将待分发kernel程序中的block分发给第二SM,减少了分发block的等待时间,提高了高优先级的kernel程序的响应速度。

本发明实施例还提供一种GPU资源的分配装置,如图8所示,该装置中包括全局逻辑控制器以及至少两个能够与全局逻辑控制器通信的SM。其中,SM可以为能够运行至少一个完整block的SM或者第一SM。全局逻辑控制器可包括存储器81、收发器82、处理器83和总线84,其中,存储器81、收发器82、处理器83通过总线84通信连接。

存储器81可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器81可以存储操作系统和其他应用程序。在通过软件或者固件来实现本发明实施例提供的技术方案时,用于实现本发明实施例提供的技术方案的程序代码保存在存储器81中,并由处理器83来执行。

收发器82用于装置与其他设备或通信网络(例如但不限于以太网,无线接入网(Radio Access Network,RAN),无线局域网(Wireless Local Area Network,WLAN)等)之间的通信。

处理器83可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。

总线84可包括一通路,在装置各个部件(例如存储器81、收发器82和处理器83)之间传送信息。

应注意,尽管图8所示的硬件仅仅示出了存储器81、收发器82和处理器83以及总线84,但是在具体实现过程中,本领域的技术人员应当明白,该终端还包含实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当明白,还可包含实现其他功能的硬件器件。

具体的,图8所示的全局逻辑控制器用于实现图6实施例所示的系统时, 该装置中的处理器83,与存储器81和收发器82耦合,用于控制程序指令的执行,具体用于从核kernel状态寄存器表中确定待分发kernel程序,kernel状态寄存器表中包括每个未完成运行的kernel程序的优先级以及每个未完成运行的kernel程序中未分发的线程块block数量,待分发kernel程序为kernel状态寄存器表中优先级最高且未分发的block数量不为零的kernel程序;从SM状态寄存器表中查找能够运行至少一个完整block的SM,SM状态寄存器表中包括每个SM中的剩余资源量以及每个SM中block的最高优先级;当未查找到能够运行至少一个完整block的SM时,从SM状态寄存器表中查找第一SM,第一SM为能够运行至少一个线程束warp的SM。

收发器82,用于当查找到第一SM时,将待分发kernel程序中的block分发给第一SM。

处理器83,还用于当未查找到第一SM时,查找第二SM,第二SM中block的最高优先级低于待分发kernel程序的优先级。

收发器82,还用于当查找到第二SM时,将待分发kernel程序中的block分发给第二SM。

存储器81,还用于存储kernel状态寄存器表和SM状态寄存器表。

处理器83,还用于当查找到能够运行至少一个完整block的SM时,确定第一数量,第一数量为能够运行一个完整block的SM实际能够运行的block的数量。

收发器82,还用于当待分发kernel程序中未分发的block的数量大于第一数量时,将待分发kernel程序中第一数量的block分发给能够运行至少一个完整block的SM;当待分发kernel程序中未分发的block的数量小于或等于第一数量时,将待分发kernel程序中未分发的block全部分发给能够运行至少一个完整block的SM。

在本发明在本发明另一实施例中,如图9所示,第二SM包括存储器91、收发器92、处理器93和总线94,其中,存储器91、收发器92、处理器93通过总线94通信连接。

存储器91可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器91可以存储操作系统和其他应用程序。在通过软件或者固件来实现本发明实施例提供的技术方案时,用于实现本发明实施例提供的技术方案的程序代码保存在 存储器91中,并由处理器93来执行。

收发器92用于装置与其他设备或通信网络(例如但不限于以太网,无线接入网(Radio Access Network,RAN),无线局域网(Wireless Local Area Network,WLAN)等)之间的通信。

处理器93可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。

总线94可包括一通路,在装置各个部件(例如存储器91、收发器92和处理器93)之间传送信息。

应注意,尽管图9所示的硬件仅仅示出了存储器91、收发器92和处理器93以及总线94,但是在具体实现过程中,本领域的技术人员应当明白,该终端还包含实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当明白,还可包含实现其他功能的硬件器件。

具体的,图9所示的第一SM用于实现图6和图7实施例所示的系统时,该装置中的处理器93,与存储器91和收发器92耦合,用于控制程序指令的执行,具体用于从block状态寄存器表中确定优先级最高的block,block状态寄存器表包括被分发到第二SM中的每个block的优先级;查找当前的空闲硬件warp。

收发器92,还用于当确定空闲硬件warp能够运行一个warp,且未接收到优先级更高的block时,将优先级最高的block中的一个warp分发给空闲硬件warp。

值得说明的是,SM状态寄存器表中包括每个SM的剩余寄存器数量、剩余硬件warp数量以及剩余共享存储空间,第一SM为剩余寄存器数量大于运行一个warp所需的寄存器数量、剩余硬件warp数量大于运行一个warp所需的硬件warp数量且剩余共享存储空间大于运行一个warp所需的共享存储空间的SM。

收发器92,还用于当确定第二SM中有运行完成的warp时,通知全局逻辑控制器更新第二SM的剩余寄存器数量、剩余warp数量以及剩余共享存储空间;当确定运行完成的warp所属block中不存在未运行的warp时,确定第二SM中未运行完成的block的最高优先级,通知全局逻辑控制器更新SM状态寄存器表中的第二SM中block的最高优先级。

本发明实施例提供的GPU资源的分配装置,全局逻辑控制器中的处理器从 kernel状态寄存器表中确定待分发kernel程序,从SM状态寄存器表中查找能够运行至少一个完整block的SM,当未查找到能够运行至少一个block的SM时,则继续查找能够运行至少一个warp的第一SM,收发器将待分发kernel程序中的一个block分发给第一SM,当未查找到第一SM时,将待分发kernel程序中的block分发给第二SM。与现有技术中必须等待GPU中有空闲的SM时,才能将高优先级kernel中的block分发给该SM而导致高优先级的kernel程序得不到及时响应相比,本发明实施例中,当未查找到能够运行至少一个block的SM时,不是等待其他kernel程序释放资源,而是查找能够运行至少一个warp的第一SM,由于warp比block小,所以运行完一个warp比运行完一个block更快,所以更容易查找到能够运行至少一个warp的SM,查找到之后就可以将待分发kernel程序的一个block分发给第一SM,无需等待低优先级的kernel程序运行完一个block,当未查找到能够运行至少一个warp的第一SM时,将待分发kernel程序中的block分发给第二SM,减少了分发block的等待时间,提高了高优先级的kernel程序的响应速度。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中, 也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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