发明内容
本发明目的在于,提供一种用于异构计算平台的数据包重用系统,提高了异构计算平台中GPU资源的利用率以及任务处理效率。
根据本发明一方面,提供了一种用于异构计算平台的数据包重用系统,包括CPU、GPU、GPU主命令缓冲区、GPU从命令缓冲区、至少一个重用GPU任务图,其中,所述CPU、GPU均能够访问GPU主命令缓冲区、GPU从命令缓冲区,所述重用GPU任务图为至少被分发执行两次的GPU任务图,GPU任务图包括多个任务节点信息以及任务节点之间的依赖关系信息;
所述CPU在进行任务分发时,用于按照任务执行顺序生成常规数据包和启动数据包,并按照任务执行顺序将常规数据包和启动数据包存储在所述GPU主命令缓冲区中,其中,所述常规数据包包括非GPU任务图的任务数据包和非重用GPU任务图的任务数据包,所述启动数据包用于控制启动可重用任务图对应的数据包,在首次分发至重用GPU任务图之前,基于所述重用GPU任务图生成重用GPU可执行图,将所述重用GPU可执行图存储在所述GPU从命令缓冲区,当需要分发重用GPU任务图时,在所述GPU主命令缓冲区存储指向对应重用GPU可执行图的启动数据包;
所述GPU执行CPU分发的任务时,按照任务执行顺序依次读取所述GPU主命令缓冲区中的常规数据包和启动数据包进行执行,当读取至启动数据包时,从所述GPU从命令缓冲区获取重用GPU可执行图对应执行队列的任务数据包和控制数据包进行执行。
本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明提供的一种用于异构计算平台的数据包重用系统可达到相当的技术进步性及实用性,并具有产业上的广泛利用价值,其至少具有以下有益效果:
本发明所述系统CPU对于重用GPU任务图仅需生成一次重用GPU可执行图,通过设置GPU从命令缓冲区,将重用GPU可执行图存储在GPU从命令缓冲区中,通过在GPU主命令缓冲区设置对应的启动数据包来重复调用重用GPU可执行图,减小了CPU侧对GPU任务图的更新和重复启用的开销,大大缩减了多次执行重用GPU可执行图的平均执行时间,且减小了对GPU主命令缓冲区的资源占用,提高了异构计算平台中GPU资源的利用率以及任务处理效率。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种用于异构计算平台的数据包重用系统,包括CPU、GPU、GPU主命令缓冲区、GPU从命令缓冲区、至少一个重用GPU任务图,其中,所述CPU、GPU均能够访问GPU主命令缓冲区、GPU从命令缓冲区。作为一种示例,GPU主命令缓冲区具体可设置为环形缓冲区(Ring Buffer,简称RB),环形缓冲区设置为先入先出模式。GPU从命令缓冲区具体可设置为间接缓冲区(Indirect Buffer,简称IB)。所述重用GPU任务图为至少被分发执行两次的GPU任务图,GPU任务图包括多个任务节点信息以及任务节点之间的依赖关系信息。如图1所示示例,GPU任务图中包括A、B、C、D、E五个任务节点,任务节点之间的有向线段表示任务节点之间的依赖关系,例如,任务节点B、任务节点C需要等到任务节点A执行完才可以执行,任务节点D需要等到任务节点B、任务节点C执行完才可以执行。任务节点E需要等到任务节点D执行完才可以执行。
所述GPU主命令缓冲区、GPU从命令缓冲区设置在CPU对应的系统内存中,或者设置在GPU对应的系统内存中。
所述CPU在进行任务分发时,用于按照任务执行顺序生成常规数据包和启动数据包,并按照任务执行顺序将常规数据包和启动数据包存储在所述GPU主命令缓冲区中,其中,所述常规数据包包括非GPU任务图的任务数据包和非重用GPU任务图的任务数据包,所述启动数据包用于控制启动可重用任务图对应的数据包,其中,非重用GPU任务图为仅被分发执行一次的GPU任务图。可以理解的是,CPU在进行任务分发时可能涉及到单个的任务数据包,也可能涉及到由多个任务数据包和任务数据包之间的依赖关系组成的GPU任务图。仅需要分发一次的GPU任务图,为非重用GPU任务图。需要分发执行多次的GPU任务图为重用GPU任务图。
在首次分发至重用GPU任务图之前,基于所述重用GPU任务图生成重用GPU可执行图,将所述重用GPU可执行图存储在所述GPU从命令缓冲区,当需要分发重用GPU任务图时,在所述GPU主命令缓冲区存储指向对应重用GPU可执行图的启动数据包。需要说明的是,现有技术中,CPU需要在每次需要分发重用GPU任务图时,生成一次重用GPU可执行图。本申请与现有技术中生成GPU可执行图的时间节点和方式均不相同。本申请是在首次分发至重用GPU任务图之前的任意时间,提前生成重用GPU可执行图,且只需生成一次,存储在GPU从命令缓冲区,后续仅需在GPU主命令缓冲区存储指向所述重用GPU可执行图的启动数据包即可,即减小了GPU主命令缓冲区的占用空间,且减少了CPU生成重用GPU可执行图的次数,减少了计算资源,提高了CPU和GPU的交互效率。
作为一种实施例,所述GPU可执行图包括至少一个执行队列,每一执行队列包括任务数据包和控制数据包,所述GPU任务图中的每一任务节点对应一个任务数据包,每一队列中的任务数据包按顺序执行,所述控制数据包用于关联位于不同执行队列中的任务数据包之间的依赖关系。
作为一种实施例,所述GPU可执行图包括第i执行队列和第i+1执行队列,i的取值范围为1到M-1,M-1为所述GPU可执行图的总队列数,M≥2,第i执行队列包括第j任务数据包、第e数据包,第i+1队列包括第k任务数据包、第h任务数据包,其中,第k任务数据包依赖于第j任务数据包,第e数据包依赖于第h任务数据包,j、k、e、h的取值范围为1到N,N为GPU可执行图对应的任务数据包总数,k>j,e>h。在第i执行队列中,第e数据包之前的数据包设置为第eh控制数据包,当第h任务数据包执行完成后,第eh控制数据包控制第e数据包执行。在第i+1执行队列中,第k任务数据包之前的数据包设置为第kj控制数据包,当第j任务数据包执行完成后,第kj控制数据包控制第k任务数据包执行;若在第i+1执行队列中,在第kj控制数据包之前还存在第s任务数据包,则第kj控制数据包需要在第s任务数据包以及第j任务数据均质性完成后,控制第k任务数据包执行,s的取值范围为1到N。
图1所示的GPU任务图生成的GPU可执行图如图2所示,A任务数据包、B任务数据包、D任务数据包、E任务数据包位于GPU可执行图的第一个队列中,C任务数据包在GPU可执行图的第二个队列中,基于图1中节点之间的依赖关系,在C任务数据包之前设置“Wait A”,“Wait A”需要在A任务数据包完成之后,控制执行C任务数据包。在B任务数据包和D任务数据包之间设置控制数据包“Wait C”,“Wait C”需要在B任务数据包和C任务数据包均执行完成后,再控制执行D任务数据包。
作为一种实施例,GPU主命令缓冲区中也可设置Y个执行队列,Y为重用GPU可执行图对应的最大执行队列数,GPU主命令缓冲区中的执行队列和GPU可执行图中的执行队列相对应。当CPU分发至重用GPU任务图对应的任务数据包时,在GPU主命令缓冲区中的每一执行队列设置指向GPU从命令缓冲区中对应队列的启动数据包。
以图2所示的重用可执行图为例,对应在GPU主命令缓冲区中的启动数据包分布如图3所示。图3中,IB Queue#1表示GPU可执行图的第一个执行队列,IB Queue#2表示GPU可执行图的第二个执行队列,RB Queue#1表示GPU主命令缓冲区中第一个执行队列,RB Queue#2表示GPU主命令缓冲区中第二个执行队列。Execute IB CMDs1表示指向IB Queue#1的启动数据包,Execute IB CMDs2表示指向IB Queue#2的启动数据包。GPU主命令缓冲区中第一个执行队列中的X1、X2、X3为单独生成的常规数据包。
作为一种实施例,所述GPU执行CPU分发的任务时,按照任务执行顺序依次读取所述GPU主命令缓冲区中的常规数据包和启动数据包进行执行,当读取至启动数据包时,从所述GPU从命令缓冲区获取重用GPU可执行图对应执行队列的任务数据包和控制数据包进行执行。可以理解的是,通过读取启动数据包的控制信息可以在GPU从命令缓冲区中获取GPU可执行图对应执行队列的任务数据包和控制数据包。
在一些应用场景中,对于重用GPU可执行图不仅限于完全重用,也可以对其中的部分任务数据包进行局部更改来重用,局部更改也无需重新生成GPU可执行图,仅需局部调整,局部更改具体可包括,更改每一任务数据包的参数,也可以是关闭和开启某一数据包。
作为一种实施例,所述CPU还用于向GPU从命令缓冲区发送目标参数修改指令,所述目标参数修改指令包括目标任务数据包标识、目标参数和目标参数值,基于目标任务数据包标识确定目标任务数据,将目标任务数据中的目标参数的值更新为所述目标参数值。需要说明的是,现有技术中,当涉及参数修改时,需要重新生成GPU任务图和GPU可执行图,需要耗费CPU大量的计算资源,本申请只需对GPU从命令缓冲区中的目标任务数据中的目标参数更新即可,节省了CPU的计算资源,提高了GPU和CPU的交互效率。
作为一种实施例,所述重用GPU可执行图中包括至少一个可开关任务数据包,当所述可开关任务数据包无需执行时,所述CPU生成空数据包,将可开关任务数据包替换为空数据包。现有技术中,当需要关闭或开启某一任务数据时,均需要重新生成GPU任务图和GPU可执行图,需要耗费CPU大量的计算资源。为了节省CPU的计算资源,提高了GPU和CPU的交互效率,本申请提供以下四种实施例进行说明:
实施例一、
所述重用GPU可执行图中包括至少一个可开关任务数据包,可开关任务数据包包括开关比特(bit)位,当开关比特位设置为第一标识时,可开关任务数据包为开启状态;当开关比特位设置为第二标识时,可开关任务数据包为关闭状态;第一标识设置为0,第二标识设置为1,或者,第一标识设置为1,第二标识设置为0。
实施例二、
本申请通过CPU生成空数据包替换可开关任务数据包,实现可开关任务数据包的关闭,通过重新生成可开关任务数据包,替换空数据包,实现可开关任务数据包的开启,节省了CPU的计算资源,提高了GPU和CPU的交互效率
实施例三、
所述重用GPU可执行图中包括至少一个可开关任务数据包,每一可开关任务数据包之前设置一个对应的开关控制数据包,若所述可开关任务数据包需要处于开启状态,则CPU将开关控制数据包中的预设地址为设置指向第一地址空间;若可开关任务数据包需要处于关闭状态,则CPU将开关控制数据包中的预设地址为设置指向第二地址空间。通过设置开关控制数据包控制某一可开关任务数据包的开关,实现了对重用GPU可执行图的局部更改,节省了CPU的计算资源,提高了GPU和CPU的交互效率。
实施例四、
所述重用GPU可执行图中包括W个位于同一队列中的连续的可开关任务数据包,W≥2,连续的可开关任务数据包中,首个可开关任务数据包之前设置一个对应的开关控制数据包,所述开关控制数据包包括地址信息和数量信息,若所述地址信息设置为指向第一地址空间,则W个位于同一队列中的连续的可开关任务数据包全部处于开启状态;若所述地址信息设置为指向第二地址空间,则读取数量信息中的数值X,将W个位于同一队列中的连续的可开关任务数据包的前X个任务数据包设置为关闭状态。通过设置包括地址信息和数量信息开关控制数据包,实现了对连续多个可开关任务数据包开启和关闭的控制,节省了CPU的计算资源,提高了GPU和CPU的交互效率。
作为一种优选实施例,所述重用GPU任务图的重用次数超过预设阈值。需要说明的是,构建GPU从命令缓冲区、启动数据包等也需要消耗CPU资源和时间,若重用GPU任务图的重用次数过少,则可能无法减少CPU的开销,无法缩短重用GPU任务图的平均执行时间,因此,当所述重用GPU任务图的重用次数超过预设阈值是,再采用本发明实施例所述系统,能够显著缩短重用GPU任务图的平均执行时间,减少CPU的开销。
本发明实施例所述系统CPU对于重用GPU任务图仅需生成一次重用GPU可执行图,通过设置GPU从命令缓冲区,将重用GPU可执行图存储在GPU从命令缓冲区中,通过在GPU主命令缓冲区设置对应的启动数据包来重复调用重用GPU可执行图,减小了CPU侧对GPU任务图的更新和重复启用的开销,大大缩减了多次执行重用GPU可执行图的平均执行时间,且减小了对GPU主命令缓冲区的资源占用,提高了异构计算平台中GPU资源的利用率以及任务处理效率。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭示如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。