一种任务调度处理方法及装置与流程

文档序号:12887021阅读:391来源:国知局
一种任务调度处理方法及装置与流程

本发明属于调度控制领域,尤其涉及一种任务调度处理方法及装置。



背景技术:

cuda是一种由nvidia推出的通用并行计算架构,该架构使gpu能够解决复杂的计算问题,它包含了cuda指令集架构(isa)以及gpu内部的并行计算引擎;由于gpu具有远远高于cpu的浮点运算能力和内存带宽,同时由于其高度的并行性,非常适合于大规模数据处理。

但是,目前在cpu上进行任务处理,且写入到全局内存globalmemory的数据数量很大(8192bit),大大影响了任务处理效率。

因此,迫切需要提供一种利用gpu性能,实现高效的任务调度处理方案来解决上述技术问题。



技术实现要素:

本发明提供一种任务调度处理方法及装置,以解决上述问题。

本发明提供一种任务调度处理方法,包括以下步骤:在全局内存中建立映射表;其中,所述映射表包括任务名称、任务对应的调度单元、任务对应的执行函数;所述调度单元调用所述执行函数,对所述任务进行处理。

本发明提供一种任务调度处理装置,包括处理器,适于实现各指令;存储设备,适于存储多条指令,所述指令适于由所述处理器加载并执行;

在全局内存中建立映射表;其中,所述映射表包括任务名称、任务对应的调度单元、任务对应的执行函数;

所述调度单元调用所述执行函数,对所述任务进行处理。

本发明实施例提供的技术方案:在全局内存中建立映射表;其中,所述映射表包括任务名称、任务对应的调度单元、任务对应的执行函数;所述调度单元调用所述执行函数,对所述任务进行处理。通过在gpu上对多个任务进行科学管理调度,大大提高了任务执行效率。

本发明实施例提供的技术方案:将任务处理结果存储至共享内存;其中,所述全局内存、所述共享内存均位于图形处理器gpu。通过使用在gpu上的共享内存进行数据的操作,大大提高的处理速度,提高了任务执行效率。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1所示为本发明实施例1的任务调度处理方法流程图;

图2所示为本发明实施例2的任务调度处理装置结构图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

图1所示为本发明实施例1的任务调度处理方法流程图,包括以下步骤:

步骤101:在全局内存中建立映射表;其中,所述映射表包括任务名称、任务对应的调度单元、任务对应的执行函数;

步骤102:所述调度单元调用所述执行函数,对所述任务进行处理。

进一步地,将任务处理结果存储至共享内存;其中,所述全局内存、所述共享内存均位于图形处理器gpu。

进一步地,若所述任务被划分为多个子任务,则所述映射表还包括:子任务名称、子任务对应的调度子单元、子任务对应的执行函数;

所述调度子单元调用所述子任务对应的执行函数,对所述子任务进行处理。

其中,建立共享内存数组并将共享内存数组地址传给所述执行函数;

所述调度子单元调用所述子任务对应的执行函数,并将子任务处理结果传输至所述共享内存数组中选择的同一地址的共享内存。

进一步地,所述调度子单元调用所述子任务对应的执行函数,通过运行多个线程,对所述子任务进行处理。

其中,所述多个线程对应同一地址的共享内存。

下面进行详细说明:

本发明实施例充分利用众核并行计算形式对矩阵向量乘法进行加速,在全局内存globalmemory中建立映射表,并确定执行函数即kernel函数,对于共享内存sharedmemory,采用静态分配的方式对多任务进行分配。

进一步地,在全局内存中建立映射表;其中,所述映射表包括任务名称、任务对应的调度单元、任务对应的执行函数。

若所述任务被划分为多个子任务,则所述映射表还包括:子任务名称、子任务对应的调度子单元、子任务对应的执行函数。

本发明实施例的实施,关键环节之一为:a)确定某个调度子单元block执行哪个任务的哪个分块;b)任务在映射表中的排布要求满足约束条件的拓扑顺序,c)对于block的维数不一致情况,按照较大维度选取,让其他较小的block添加空线程补足,保证block维数和维度的合理性。

另外,预先在kernel开始的时候,申请一个足够大的sharedmemory数组,其大小至少应该等于每个任务所需要的sharedmemory用量的最大值;每个任务单独写成一个函数,将sharedmemory数组地址传给这个函数,函数中需要使用sharedmemory的时候,直接在这个数组中静态分配使用。

在cuda架构下,显示芯片执行时的最小单位是线程thread;数个thread可以组成一个调度子单元block。一个block中的thread能存取同一块共享内存sharedmemory,而且可以快速进行同步的动作。

每一个block所能包含的thread数目是有限的。执行相同程序的block,可以组成grid。不同block中的thread无法存取同一个共享内存,因此无法直接互通或进行同步。因此,不同block中的thread能合作的程度是比较低的。不过,利用这个模式,可以让程序不用担心显示芯片实际上能同时执行的thread数目限制。

每个thread都有自己的一份register和localmemory的空间。同一个block中的每个thread则有共享的一份sharememory。此外,所有的thread(包括不同block的thread)都共享一份全局内存globalmemory、常量内存constantmemory、和纹理内存texturememory。不同的grid则有各自的globalmemory、constantmemory和texturememory。

最适合利用cuda处理的问题,是可以大量并行化的问题,才能有效隐藏内存的延迟latency,并有效利用显示芯片上的大量执行单元。使用cuda时,同时有数千个thread在执行是很正常的。因此,解决cuda大量并行化的问题,可以使cuda达到最好的效率。

利用_shared_声明的变量表示这是sharedmemory,是一个block中每个thread都共享的内存。它会使用在gpu上的内存,所以存取的速度相当快,不需要担心latency的问题。_syncthreads()是一个cuda的内部函数,表示block中所有的thread都要同步到这个点,才能继续执行。在本发明实施例中,由于之后要把所有thread计算的结果进行加总,所以需要确定每个thread都已经把结果写到shared[]里面。

对于矩阵规模为10000的运算,修改后的cuda程序在teslam40上执行需要的时间为0.316032ms,速度大于完全不在gpu上进行加总的版本,由于在cpu上进行加总的版本,写入到globalmemory的数据数量很大(8192bit),也对效率会有影响,因此,速度上明显优于cpu上的计算。

同时,对于采用cublas库加速的矩阵向量乘运算结果,当矩阵规模为10000时,cuda+cublsa(cublassgemv)所需时间为1.651712ms,运行时间小于常规sharedmemory模式,大于改进后的cudasharedmemory,显示出了这个加速方法在计算速度上的优越性。

图2所示为本发明实施例2的任务调度处理装置结构图,包括处理器,适于实现各指令;存储设备,适于存储多条指令,所述指令适于由所述处理器加载并执行;

在全局内存中建立映射表;其中,所述映射表包括任务名称、任务对应的调度单元、任务对应的执行函数;

所述调度单元调用所述执行函数,对所述任务进行处理。

进一步地,将任务处理结果存储至共享内存。

进一步地,若所述任务被划分为多个子任务,则所述映射表还包括:子任务名称、子任务对应的调度子单元、子任务对应的执行函数;

所述调度子单元调用所述子任务对应的执行函数,对所述子任务进行处理。

进一步地,建立共享内存数组并将共享内存数组地址传给所述执行函数;

所述调度子单元调用所述子任务对应的执行函数,并将子任务处理结果传输至所述共享内存数组中选择的同一地址的共享内存。

本发明实施例提供的技术方案:在全局内存中建立映射表;其中,所述映射表包括任务名称、任务对应的调度单元、任务对应的执行函数;所述调度单元调用所述执行函数,对所述任务进行处理。通过在gpu上对多个任务进行科学管理调度,大大提高了任务执行效率。

本发明实施例提供的技术方案:将任务处理结果存储至共享内存;其中,所述全局内存、所述共享内存均位于图形处理器gpu。通过使用在gpu上的共享内存进行数据的操作,大大提高的处理速度,提高了任务执行效率。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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