会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 截止时间 / 一种计算资源感知的任务调度方法

一种计算资源感知的任务调度方法

申请号 CN202011053340.2 申请日 2020-09-29 公开(公告)号 CN112214319A 公开(公告)日 2021-01-12
申请人 深圳大学; 发明人 王毅; 陈家贤; 陈洁欣; 廖好; 周池; 毛睿;
摘要 本发明公开了一种计算资源感知的任务调度方法,根据任务的应用类型属性对待处理任务进行分组,将各组中不同类型的任务按截止时间进行排序,将排序后的任务根据延迟需求对不同类型的任务进行分组打包得到多个任务块,对任务块的截止时间进行更新,将任务块放入执行队列后按截止时间进行升序排序得到基本调度方案;根据待处理任务属性和计算资源,对潜在的会错过截止时间的高优先级任务进行重新调度,在保证系统吞吐率和延迟的同时充分考虑各任务属性,对执行顺序进行调整,尽量避免任务错过截止时间,充分利用多核设备并行计算优势,采用细粒度的任务调度对计算资源进行灵活分配,确保高优先级的任务不会错过截止时间,得到了高效的任务调度结果。
权利要求

1.一种计算资源感知的任务调度方法,其特征在于,包括如下步骤:

获取待处理任务对应的属性及任务执行的延迟需求,所述属性包括应用类型、任务到达时间、任务截止时间和任务的优先级;

根据应用类型对待处理任务进行分组,将各个组中不同类型的任务按截止时间进行排序,将排序后的任务根据任务执行的延迟需求,对不同类型的任务进行分组打包得到多个任务块,接着对任务块的截止时间进行更新,将任务块放入执行队列后按截止时间进行升序排序,得到基本调度方案;

根据待处理任务属性和计算资源,对基本调度方案中潜在的会错过截止时间的高优先级任务进行重新调度,得到最终的调度方案。

2.根据权利要求1所述的计算资源感知的任务调度方法,其特征在于,根据待处理任务属性和计算资源,对基本调度方案中潜在的会错过截止时间的高优先级任务进行重新调度,得到最终的调度方案的步骤,包括:步骤1:将所有待处理任务分为A、B、C、D四类,其中A类任务是优先级位于[a,maxPrior]中的任务,B类任务是优先级位于[b,a]的任务,C类任务是优先级位于[c,b]的任务,D类任务是指优先级位于[0,c]的任务,maxPrior为计算系统支持的最高优先级级别,采用taskNum[p]表示优先级为p的任务的数量,p∈[0,maxPrior],taskTotal表示所有任务的总数量,a=max(|0.9*maxPrior|,x1),其中x1满足其中x2满足

c=max(|0 .4*

max Pri or| ,x3) ,其中 x3满足

步骤S2:预先根据任务块的属性预分配对应的资源块,检查执行队列中是否存在可能逾期的任务块,判断与任务块对应的资源块的完成时间是否大于任务块中任务的最早截止时间,若存在可能预期的任务块则跳转到步骤S3,否则结束调度;

步骤S3:从执行队列中找到需要重新调度的任务块,并将预先为任务块分配的计算资源标记为资源块;

步骤S4:将待调度的资源块放入资源队列中,并按资源块的预期完成时间进行排序;

步骤S5:将资源块中待调度的任务A、B、C、D四个任务类别分别放入4个分类队列中;

步骤S6:对分类队列中的任务进行重新调度;

步骤S7:搜索是否存在需要重新调度的任务块,若存在则跳转步骤S3,否则跳转步骤S8;

步骤S8:如果分类队列中仍然存在待调度的任务,则将任务根据应用类型分组打包后插入到执行队列的队尾。

3.根据权利要求2所述的计算资源感知的任务调度方法,其特征在于,步骤S7中搜索是否存在需要重新调度的任务块的过程,包括:步骤S71:判断分类队列中是否存在A类分类队列或B类任务分类队列,若存在跳转步骤S72,否则结束流程;

步骤S72:找到分类队列中A类或B类任务中最早的截止时间;

步骤S73:对于任意满足资源块的完成时间小于任务截止时间的任务块,统计任务块中A类任务的个数aTask和B类任务的个数bTask,计算每个任务块的重要性imb,其中imb=(bTask+2*aTask)/nTask;

步骤S74:统计分类队列中A类任务的个数aTask′、B类任务的个数bTask′,计算分类队列中任务的重要性imcq,其中imcq=(bTask′+2*aTask′)/(bTask′+aTask′);

步骤S75:判断imb值最低的任务块,是否满足imb

步骤S76:将满足imb

4.根据权利要求2所述的计算资源感知的任务调度方法,其特征在于,步骤S6中对分类队列中的任务进行重新调度的过程,包括:步骤S61:判断资源队列是否为空,如果非空跳转步骤S62,否则结束流程;

步骤S62:从资源队列头部取出一个资源块;

步骤S63:按A类、B类、C类、D类的顺序访问分类队列中的每个队列,用type代表当前访问队列的类别;

步骤S64:判断分类队列中的每个队列是否都已经访问过,如果还有存在未访问的队列PQ[type],则跳转步骤S65,否则跳转步骤S67;

步骤S65:从队列PQ[type]中取出截止时间晚于资源块完成时间的任务集合Tset[type];

步骤S66:将任务集合Tset[type]中的任务分配到资源块中,跳转步骤S64;

步骤S67:将任务集合中未调度的任务放回分类队列中。

5.根据权利要求4所述的计算资源感知的任务调度方法,其特征在于,步骤S66中将任务集合Tset[type]中的任务分配到资源块的过程,包括:步骤S661:将任务集合Tset[type]中的任务根据应用类型和对应的根据任务执行的延迟需求进行重新分组打包,得到任务碎片,对于任务碎片中的任务,若当前分类队列CQ[type]对应A类或B类任务,则将任务按任务优先级进行排序;若CQ[type]对应C类任务,则将任务按照到任务达时间进行排序;若CQ[type]对应D类任务,则将任务的顺序随机打乱;

步骤S662:将任务碎片按照集合中任务个数nTask进行降序排序,并放入任务碎片队列中;

步骤S663:将资源块放入资源碎片列表;

步骤S664:判断任务碎片队列是否为空,若非空则跳转步骤S665,否则结束流程;

步骤S665:从任务碎片队列头部取出任务碎片TaskFrag;

步骤S666:判断资源碎片列表是否遍历完毕,若遍历完毕则跳转步骤S667,否则跳转至步骤S6610;

步骤S667:从资源碎片队列中获取尚未访问的碎片ResFrag;

步骤S668:根据资源碎片ResFrag对任务碎片TaskFrag进行规整化;

步骤S669:计算资源碎片ResFrag和任务碎片TaskFrag的亲和度affinity,跳转到步骤S666;

步骤S6610:将任务碎片TaskFrag放入与之亲和度最高的资源碎片中;如果TaskFrag找不到合适的资源碎片,则将TaskFrag中的任务放回任务集合Tset[type]中;

步骤S6611:如果步骤S668或步骤S6610中产生额外的资源碎片或任务碎片,则将它们分别放入对应的资源或任务碎片队列中,跳转到步骤S664。

6.根据权利要求5所述的计算资源感知的任务调度方法,其特征在于,步骤S668中根据资源碎片ResFrag对任务碎片TaskFrag进行规整化的过程,包括:对于给定的任务碎片和资源碎片,如果存在任务数量nTask>nPE,nPE为给定资源块、碎片的可用处理核数,则每个处理器核需要处理一个以上的任务,如果nTask%nPE!=0,说明在任务碎片处理过程中,有处理器核会处于空转状态,此时需对任务碎片进行规整化;

如果(nTask%nPE)/nPE≤thrCut,thrCut表示任务块划分的阈值,对任务碎片TaskFrag进行切割,切割成任务大小为nPE-(nTask%nPE)的碎片,切割后需要对任务数量nTask、期望花费时间tCost值进行更新,同时切割会额外产生任务大小为nTask%nPE的碎片;如果(nTask%nPE)/nPE>thrCut,则不会对任务碎片TaskFrag进行任何处理。

7.根据权利要求5所述的计算资源感知的任务调度方法,其特征在于,步骤S669中计算资源碎片ResFrag和任务碎片TaskFrag的亲和度affinity的过程,包括:当任务碎片的预期完成时间tCost小于或等于资源碎片的可用时间限制tLimit时,分成四种不同的具体情况:第一种情况:任务碎片的处理器核占用数uPE等于资源碎片的可用处理器核数nPE,任务的预期花费时间也恰好等于资源的可用时间限制,亲和度affinity=3+nTask/nPE;

第二种情况:任务碎片的处理器核占用数uPE等于资源碎片的可用处理器核数nPE,任务的预期花费时间小于资源的可用时间限制,亲和度affinity=2+nTask/nPE,这类情况下资源碎片会分割出一个新的资源碎片;

第三种情况:任务碎片的处理器核占用数uPE小于资源碎片的可用处理器核数nPE,任务的预期花费时间恰好等于资源的可用时间限制,亲和度affinity=2,这类情况下资源碎片会分割出一个新的资源碎片;

第四种情况:任务碎片的处理器核占用数、预期花费时间都分别小于资源碎片的可用处理器核数、可用时间限制,亲和度affinity=1,这类情况下资源碎片会分割出两个新的资源碎片。

8.根据权利要求5所述的计算资源感知的任务调度方法,其特征在于,步骤S669中计算资源碎片ResFrag和任务碎片TaskFrag的亲和度affinity的过程,包括:当任务碎片的预期完成时间tCost大于资源碎片的可用时间限制tLimit时,需要对任务碎片进行进一步的“拉伸”或“分割”操作,使得tCost′

第二种情况,任务碎片的处理器核占用数uPE等于资源碎片的可用处理器核数nPE,对任务碎片进行切割,重新估算最多可以处理的任务数量nTask’,若nTask’=0,则亲和度affinity=-∞,否则affinity=-nPE/nTask′。

9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行如权利要求1-8任一项所述的计算资源感知的任务调度方法。

10.一种计算机设备,其特征在于,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行如权利要求1-8任一项所述的计算资源感知的任务调度方法。

说明书全文

一种计算资源感知的任务调度方法

技术领域

[0001] 本发明涉及数据处理技术领域,具体涉及一种计算资源感知的任务调度方法。

背景技术

[0002] 深度学习技术广泛应用于图像识别、自然语言处理、推荐系统等领域。传统的冯诺依曼架构的通用处理器由于存储计算的分离而效率低下,这使得它很难满足深度学习应用不断增长的计算速度和能效需求。因此,许多高效的深度学习处理器架构被提出并广泛应用于深度学习应用的推理加速中。深度学习处理器等设备往往能够通过分批处理大量的深度学习推理任务来达到最佳的吞吐率,这些设备可以通过神经网络中权重参数的复用、向量矩阵等数值运算的优化、主机与设备间通信开销的优化等手段来提高设备的利用率,批量处理更加注重吞吐率,使得该模式在任务延迟上不具备优势。
[0003] 在延迟敏感的系统中,为任务设置较大的批大小往往会损害单个任务的处理延迟,所以实际应用中任务常常划分成较小的批大小进行分批处理。一种常用的调度方法是动态自适应批大小,它通过为任务设置一个执行时间阈值,例如100毫秒,并在该时间阈值内处理尽可能多的任务,来平衡设备的吞吐率和延迟,但是这种方法存在下述问题:
[0004] 该方法没有很好地考虑不同任务的优先级和截止时间,简单地进行批量打包会使得不同优先级和截止时间的任务掺杂在一起,导致高优先级的任务错过截止时间,而低优先级的任务却被提前处理,是一种粗粒度的任务调度方法,它没考虑到利用多核处理设备的优势,没有对任务进行灵活地分配,无法进一步确保高优先级的任务不会错过截止时间。

发明内容

[0005] 因此,本发明要解决的技术问题在于克服现有技术中任务调度方法未全面考虑任务属性及计算资源情况对任务调度效果差的缺陷,从而提供一种计算资源感知的任务调度方法。
[0006] 为达到上述目的,本发明提供如下技术方案:
[0007] 第一方面,本发明实施例提供一种计算资源感知的任务调度方法,包括如下步骤:
[0008] 获取待处理任务对应的属性及任务执行的延迟需求,所述属性包括应用类型、任务到达时间、任务截止时间和任务的优先级;
[0009] 根据应用类型对待处理任务进行分组,将各个组中不同类型的任务按截止时间进行排序,将排序后的任务根据任务执行的延迟需求,对不同类型的任务进行分组打包得到多个任务块,接着对任务块的截止时间进行更新,将任务块放入执行队列后按截止时间进行升序排序,得到基本调度方案;
[0010] 根据待处理任务属性和计算资源,对基本调度方案中潜在的会错过截止时间的高优先级任务进行重新调度,得到最终的调度方案。
[0011] 在一实施例中,根据待处理任务属性和计算资源,对基本调度方案中潜在的会错过截止时间的高优先级任务进行重新调度,得到最终的调度方案的步骤,包括:
[0012] 步骤1:将所有待处理任务分为A、B、C、D四类,其中A类任务是优先级位于[a,maxPrior]中的任务,B类任务是优先级位于[b,a]的任务,C类任务是优先级位于[c,b]的任务,D类任务是指优先级位于[0,c]的任务,maxPrior为计算系统支持的最高优先级级别,采用taskNum[p]表示优先级为p的任务的数量,p∈[0,maxPrior],taskTotal表示所有任务的总数量,a=max(|0.9*maxPrior|,x1),其中x1满足b=max0 .7*maxPrior ,x2,其中x2满足
c=max(|0 .4*
maxPrior,x3,其中x3满足
[0013] 步骤S2:预先根据任务块的属性预分配对应的资源块,检查执行队列中是否存在可能逾期的任务块,判断与任务块对应的资源块的完成时间是否大于任务块中任务的最早截止时间,若存在可能预期的任务块则跳转到步骤S3,否则结束调度;
[0014] 步骤S3:从执行队列中找到需要重新调度的任务块,并将预先为任务块分配的计算资源标记为资源块;
[0015] 步骤S4:将待调度的资源块放入资源队列中,并按资源块的预期完成时间进行排序;
[0016] 步骤S5:将资源块中待调度的任务A、B、C、D四个任务类别分别放入4个分类队列中;
[0017] 步骤S6:对分类队列中的任务进行重新调度;
[0018] 步骤S7:搜索是否存在需要重新调度的任务块,若存在则跳转步骤S3,否则跳转步骤S8;
[0019] 步骤S8:如果分类队列中仍然存在待调度的任务,则将任务根据应用类型分组打包后插入到执行队列的队尾。
[0020] 在一实施例中,步骤S7中搜索是否存在需要重新调度的任务块的过程,包括:
[0021] 步骤S71:判断分类队列中是否存在A类分类队列或B类任务分类队列,若存在跳转步骤S72,否则结束流程;
[0022] 步骤S72:找到分类队列CQ中A类或B类任务中最早的截止时间;
[0023] 步骤S73:对于任意满足资源块的完成时间小于任务截止时间的任务块,统计任务块中A类任务的个数aTask和B类任务的个数bTask,计算每个任务块的重要性imb,其中imb=(bTask+2*aTask)/nTask;
[0024] 步骤S74:统计分类队列中A类任务的个数aTask′、B类任务的个数bTask′,计算分类队列中任务的重要性imcq,其中imcq=(bTask′+2*aTask′)/(bTask′+aTask′);
[0025] 步骤S75:判断imb值最低的任务块,是否满足imb
[0026] 步骤S76:将满足imb
[0027] 在一实施例中,步骤S6中对分类队列中的任务进行重新调度的过程,包括:
[0028] 步骤S61:判断资源队列是否为空,如果非空跳转步骤S62,否则结束流程;
[0029] 步骤S62:从资源队列头部取出一个资源块;
[0030] 步骤S63:按A类、B类、C类、D类的顺序访问分类队列中的每个队列,用type代表当前访问队列的类别;
[0031] 步骤S64:判断分类队列中的每个队列是否都已经访问过,如果还有存在未访问的队列PQ[type],则跳转步骤S65,否则跳转步骤S67;
[0032] 步骤S65:从队列PQ[type]中取出截止时间晚于资源块完成时间的任务集合Tset[type];
[0033] 步骤S66:将任务集合Tset[type]中的任务分配到资源块中,跳转步骤S64;
[0034] 步骤S67:将任务集合中未调度的任务放回分类队列中。
[0035] 在一实施例中,步骤S66中将任务集合Tset[type]中的任务分配到资源块的过程,包括:
[0036] 步骤S661:将任务集合Tset[type]中的任务根据应用类型和对应的根据任务执行的延迟需求进行重新分组打包,得到任务碎片,对于任务碎片中的任务,若当前分类队列CQ[type]对应A类或B类任务,则将任务按任务优先级进行排序;若CQ[type]对应C类任务,则将任务按照到任务达时间进行排序;若CQ[type]对应D类任务,则将任务的顺序随机打乱;
[0037] 步骤S662:将任务碎片按照集合中任务个数nTask进行降序排序,并放入任务碎片队列中;
[0038] 步骤S663:将资源块放入资源碎片列表;
[0039] 步骤S664:判断任务碎片队列是否为空,若非空则跳转步骤S665,否则结束流程;
[0040] 步骤S665:从任务碎片队列头部取出任务碎片TaskFrag;
[0041] 步骤S666:判断资源碎片列表是否遍历完毕,若遍历完毕则跳转步骤S667,否则跳转至步骤S6610;
[0042] 步骤S667:从资源碎片队列中获取尚未访问的碎片ResFrag;
[0043] 步骤S668:根据资源碎片ResFrag对任务碎片TaskFrag进行规整化;
[0044] 步骤S669:计算资源碎片ResFrag和任务碎片TaskFrag的亲和度affinity,跳转到步骤S666;
[0045] 步骤S6610:将任务碎片TaskFrag放入与之亲和度最高的资源碎片中;如果TaskFrag找不到合适的资源碎片,则将TaskFrag中的任务放回任务集合Tset[type]中;
[0046] 步骤S6611:如果步骤S668或步骤S6610中产生额外的资源碎片或任务碎片,则将它们分别放入对应的资源或任务碎片队列中,跳转到步骤S664。
[0047] 在一实施例中,步骤S668中根据资源碎片ResFrag对任务碎片TaskFrag进行规整化的过程,包括:
[0048] 对于给定的任务碎片和资源碎片,如果存在任务数量nTask>nPE,nPE为给定资源块、碎片的可用处理核数,则每个处理器核需要处理一个以上的任务,如果nTask%nPE!=0,说明在任务碎片处理过程中,有处理器核会处于空转状态,此时需对任务碎片进行规整化;
[0049] 如果(nTask%nPE)/nPE≤thrCut,thrCut表示任务块划分的阈值,对任务碎片TaskFrag进行切割,切割成任务大小为nPE-(nTask%nPE)的碎片,切割后需要对任务数量nTask、期望花费时间tCost值进行更新,同时切割会额外产生任务大小为nTask%nPE的碎片;如果(nTask%nPE)/nPE>thrCut,则不会对任务碎片TaskFrag进行任何处理。
[0050] 在一实施例中,步骤S669中计算资源碎片ResFrag和任务碎片TaskFrag的亲和度affinity的过程,包括:当任务碎片的预期完成时间tCost小于或等于资源碎片的可用时间限制tLimit时,分成四种不同的具体情况:
[0051] 第一种情况:任务碎片的处理器核占用数uPE等于资源碎片的可用处理器核数nPE,任务的预期花费时间也恰好等于资源的可用时间限制,亲和度affinity=3+nTask/nPE;
[0052] 第二种情况:任务碎片的处理器核占用数uPE等于资源碎片的可用处理器核数nPE,任务的预期花费时间小于资源的可用时间限制,亲和度affinity=2+nTask/nPE,这类情况下资源碎片会分割出一个新的资源碎片;
[0053] 第三种情况:任务碎片的处理器核占用数uPE小于资源碎片的可用处理器核数nPE,任务的预期花费时间恰好等于资源的可用时间限制,亲和度affinity=2,这类情况下资源碎片会分割出一个新的资源碎片;
[0054] 第四种情况:任务碎片的处理器核占用数、预期花费时间都分别小于资源碎片的可用处理器核数、可用时间限制,亲和度affinity=1,这类情况下资源碎片会分割出两个新的资源碎片。
[0055] 步骤S669中计算资源碎片ResFrag和任务碎片TaskFrag的亲和度affinity的过程,包括:当当任务碎片的预期完成时间tCost大于资源碎片的可用时间限制tLimit时,需要对任务碎片进行进一步的“拉伸”或“分割”操作,使得tCost′
[0056] 第一种情况,任务碎片的处理器核占用数uPE小于资源碎片的可用处理器核数nPE,使用任务拉伸的处理策略,同一个任务可以由多个处理器核协同完成,经过拉伸操作后,uPE=nPE;若此时存在tCost′≤tLimit,则亲和度affinity=-nPE/nTask,否则affinity=-∞;
[0057] 第二种情况,任务碎片的处理器核占用数uPE等于资源碎片的可用处理器核数nPE,对任务碎片进行切割,重新估算最多可以处理的任务数量nTask’,若nTask’=0,则亲和度affinity=-∞,否则affinity=-nPE/nTask′。
[0058] 第二方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行本发明实施例第一方面的计算资源感知的任务调度方法。
[0059] 第三方面,本发明实施例提供一种计算机设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行本发明实施例第一方面的计算资源感知的任务调度方法。
[0060] 本发明技术方案,具有如下优点:
[0061] 本发明提供的一种计算资源感知的任务调度方法,首先获取待处理任务对应的属性及任务执行的延迟需求,属性包括应用类型、任务到达时间、任务截止时间和任务的优先级根据任务的应用类型属性对待处理任务进行分组,将各组中不同类型的任务按截止时间进行排序,将排序后的任务根据延迟需求对不同类型的任务进行分组打包得到多个任务块,对任务块的截止时间进行更新,将任务块放入执行队列后按截止时间进行升序排序得到基本调度方案;根据待处理任务属性和计算资源,对潜在的会错过截止时间的高优先级任务进行重新调度,得到最终的调度方案。本发明实施例提供的方法,在保证系统吞吐率和延迟的同时充分考虑各任务属性,对执行顺序进行调整,尽量避免任务错过截止时间,充分利用多核设备并行计算优势,采用细粒度的任务调度对计算资源进行灵活分配,进一步确保高优先级的任务不会错过截止时间,得到了高效的任务调度结果。

附图说明

[0062] 为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0063] 图1为本发明实施例中提供的资源块或资源碎片的可用处理器核数nPE和是可用时间限制tLimit的属性关系;
[0064] 图2为本发明实施例中提供的计算资源感知的任务调度方法的一个具体示例的工作流程图;
[0065] 图3为本发明实施例中对基本调度方案进行重新调度的流程图;
[0066] 图4为本发明实施例中搜索是否存在需要重新调度的任务块过程的流程图;
[0067] 图5为本发明实施例提供的对分类队列中的任务进行重新调度的过程的流程图;
[0068] 图6为本发明实施例提供的将任务集合中的任务分配到资源块的过程的流程图;
[0069] 图7为本发明实施例提供的对任务碎片进行规整化的示意图;
[0070] 图8为本发明实施例提供的计算机设备一个具体示例的组成图。

具体实施方式

[0071] 下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0072] 此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
[0073] 实施例1
[0074] 本发明实施例提供一种计算资源感知的任务调度方法,可以应用于进行深度学习推理任务的图形处理器和深度学习加速器等设备上,在改善系统吞吐率和延迟的同时,还保证了高优先级的任务不会错过截止时间,适用于提供人工智能应用技术的移动终端计算加速设备、边缘计算服务器、云计算数据中心等。其中,待处理任务是数据处理系统需要处理的工作,每个任务都具有四个属性,包括任务的应用类型appType,任务到达时间tArrival,任务截止时间tDead以及任务的优先级taskPrior,其中优先级使用非负整数表示,且taskPrior∈[0,maxPrior],maxPrior代表系统支持的最高优先级。资源是指的是数据处理系统的计算资源,包括各种运算单元和它相应的可用时间段。
[0075] 在本发明实施例中,引入了资源块、资源碎片和任务块、任务碎片的概念,对系统的计算资源和任务进行更灵活、高效的调度。将初始调度方案中的一个个独立的任务集合称为任务块,将每个任务块占据的计算资源称为资源块。对任务块进行拆分组合,将生成的新的任务集合称为任务碎片。类似的,资源块也会被拆分成更小的粒度,将生成的粒度更小的计算资源称为资源碎片。
[0076] 每个资源块或资源碎片都具有四个属性。图1中展示了两个属性nPE和tLimit,其中nPE是可用处理器核数和tLimit是可用时间限制。除此之外,它还具有开始时间tStart和完成时间tEnd两个属性,其中tLimit=tEnd-tStart。
[0077] 每个任务块或任务碎片具有三个的属性,分别是任务数量nTask、期望花费时间tCost和占用处理核数uPE。其中tCost和uPE都是根据任务的处理模式、任务数量nTask和给定资源块、碎片的可用处理核数nPE确定。本发明实施例默认将单个任务交给单个处理器核处理,以避免多个处理器核同时处理相同任务带来的通信开销,该模式称为默认处理模式。在默认处理模式下,如果nTask
[0078] 具体的,本发明实施例提供的计算资源感知的任务调度方法,如图2所示,包括如下步骤:
[0079] 步骤S10:获取待处理任务对应的属性及任务执行的延迟需求,所述属性包括应用类型、任务到达时间、任务截止时间和任务的优先级。
[0080] 在本发明实施例中,待处理任务对应的属性为上述的四个任务属性,包括任务的应用类型appType,任务到达时间tArrival,任务截止时间tDead以及任务的优先级taskPrior;任务执行的延迟需求根据任务需求设置的,例如云服务提供商,希望任务从开始执行到执行结束的预期时间(在1秒内),可以通过实验测试得到1秒内能够处理的某特定类型应用的最大任务数量,即该类应用的最佳批大小。可能对于应用A,1秒内最多能够执行8个任务;而对于应用B,1秒内最多能够执行16个任务;那么就将A应用任务,8个任务为一小组进行打包;B应用任务,16个任务为一小组进行打包。
[0081] 步骤S20:根据应用类型对待处理任务进行分组,将各个组中不同类型的任务按截止时间进行排序,将排序后的任务根据任务执行的延迟需求,对不同类型的任务进行分组打包得到多个任务块,接着对任务块的截止时间进行更新,将任务块放入执行队列后按截止时间进行升序排序,得到基本调度方案。
[0082] 例如,待处理任务为32个,将这32个任务按照4种类型分为8组,每个组内按照任务截止时间进行排序,得到8组排序后的任务,然后根据任务执行的延迟需求,使用各个组中对应的最佳批大小对不同类型的任务进行分组打包,得到多个任务块,对任务块的截止时间进行更新,任务块的截止时间取决于任务块中截止时间的任务,然后将任务块放入执行队列EQ后按截止时间进行升序排序,得到基本调度方案。
[0083] 步骤S30:根据待处理任务属性和计算资源,对基本调度方案中潜在的会错过截止时间的高优先级任务进行重新调度,得到最终的调度方案。
[0084] 本发明实施例,进行重新调度的流程,如图3所示,包括:
[0085] 步骤S1:将所有待处理任务分为A、B、C、D四类,其中A类任务是优先级位于[a,maxPrior]中的任务,B类任务是优先级位于[b,a]的任务,C类任务是优先级位于[c,b]的任务,D类任务是指优先级位于[0,c]的任务,maxPrior为计算系统支持的最高优先级级别,采用taskNum[p]表示优先级为p的任务的数量,p∈[0,maxPrior],taskTotal表示所有任务的总数量,a=max(|0.9*maxPrior|,x1),其中x1满足b=max0 .7*maxPrior ,x2,其中x2满足
c=max(|0 .4*
maxPrior,x3,其中x3满足
[0086] 步骤S2:预先根据任务块的属性预分配对应的资源块,检查执行队列EQ中是否存在可能逾期的任务块,判断与任务块对应的资源块的完成时间是否大于任务块中任务的最早截止时间,若存在可能预期的任务块则跳转到步骤S3,否则结束调度;
[0087] 步骤S3:从执行队列EQ中找到需要重新调度的任务块,并将预先为任务块分配的计算资源标记为资源块;
[0088] 步骤S4:将待调度的资源块放入资源队列RQ中,并按资源块的预期完成时间进行排序;
[0089] 步骤S5:将资源块中待调度的任务A、B、C、D四个任务类别分别放入4个分类队列CQ中;
[0090] 步骤S6:对分类队列CQ中的任务进行重新调度;
[0091] 步骤S7:搜索是否存在需要重新调度的任务块,若存在则跳转步骤S3,否则跳转步骤S8;
[0092] 步骤S8:如果分类队列CQ中仍然存在待调度的任务,则将任务根据应用类型分组打包后插入到执行队列EQ的队尾。
[0093] 在一实施例中,如图4所示,上述步骤S7中搜索是否存在需要重新调度的任务块的过程,包括:
[0094] 步骤S71:判断分类队列CQ中是否存在A类分类队列或B类任务分类队列,若存在跳转步骤S72,否则结束流程;
[0095] 步骤S72:找到分类队列CQ中A类或B类任务中最早的截止时间eDead。
[0096] 步骤S73:对于任意满足资源块的完成时间tEnd
[0097] 步骤S74:统计分类队列中A类任务的个数aTask′、B类任务的个数bTask′,计算分类队列中任务的重要性imcq,其中imcq=(bTask′+2*aTask′)/(bTask′+aTask′);
[0098] 步骤S75:判断imb值最低的任务块,是否满足imb
[0099] 步骤S76:将满足imb
[0100] 在一实施例中,如图5所示,步骤S6中对分类队列中的任务进行重新调度的过程,包括:
[0101] 步骤S61:判断资源队列RQ是否为空,如果非空跳转步骤S62,否则结束流程;
[0102] 步骤S62:从资源队列RQ头部取出一个资源块Block;
[0103] 步骤S63:按A类、B类、C类、D类的顺序访问分类队列中的每个队列,用type代表当前访问队列的类别;
[0104] 步骤S64:判断分类队列中的每个队列是否都已经访问过,如果还有存在未访问的队列PQ[type],则跳转步骤S65,否则跳转步骤S67;
[0105] 步骤S65:从队列PQ[type]中取出截止时间晚于资源块完成时间tEnd的任务集合Tset[type];
[0106] 步骤S66:将任务集合Tset[type]中的任务分配到资源块中,跳转步骤S64。
[0107] 步骤S67:将任务集合中未调度的任务放回分类队列中。
[0108] 在一实施例中,如图6所示,步骤S66中将任务集合Tset[type]中的任务分配到资源块的过程,包括:
[0109] 步骤S661:将任务集合Tset[type]中的任务根据应用类型和对应的根据任务执行的延迟需求进行重新分组打包,得到任务碎片,对于任务碎片中的任务,若当前CQ[type]对应A类或B类任务,则将任务按任务优先级进行排序;若CQ[type]对应C类任务,则将任务按照到任务达时间进行排序;若CQ[type]对应D类任务,则将任务的顺序随机打乱;
[0110] 步骤S662:将任务碎片按照集合中任务个数nTask进行降序排序,并放入任务碎片队列TQ中;
[0111] 步骤S663:将资源块放入资源碎片列表FQ。
[0112] 步骤S664:判断任务碎片队列TQ是否为空,若非空则跳转步骤S665,否则结束流程;
[0113] 步骤S665:从任务碎片队列TQ头部取出任务碎片TaskFrag;
[0114] 步骤S666:判断资源碎片列表是否遍历完毕,若遍历完毕则跳转步骤S667,否则跳转至步骤S6610;
[0115] 步骤S667:从资源碎片队列FQ中获取尚未访问的碎片ResFrag;
[0116] 步骤S668:根据资源碎片ResFrag对任务碎片TaskFrag进行规整化;
[0117] 步骤S669:计算资源碎片ResFrag和任务碎片TaskFrag的亲和度affinity,跳转到步骤S666;
[0118] 步骤S6610:将任务碎片TaskFrag放入与之亲和度最高的资源碎片中;如果TaskFrag找不到合适的资源碎片;,则将TaskFrag中的任务放回Tset[type]中;
[0119] 步骤S6611:如果步骤S668或步骤S6610中产生额外的资源碎片或任务碎片,则将它们分别放入对应的资源或任务碎片队列中,跳转到步骤S664。
[0120] 在本实施例中,步骤S668中在默认处理模式下,对于给定的任务碎片和资源碎片,如果存在任务数量nTask>nPE,则每个处理器核需要处理一个以上的任务,如果此时存在nTask除以nPE得到的余数不等于零,即nTask%nPE!=0,说明在任务碎片处理过程中,有处理器核会处于空转状态,在该情况下,需对任务碎片进行规整化;
[0121] 具体的,如图7(a)所示,如果(nTask%nPE)/nPE≤thrCut,thrCut表示任务块划分的阈值,比如现在有10个任务和4个处理器核,10除以4=2余2(商是2余数是2),说明前两轮4个处理器核是忙着的,到了第三轮,有2个处理器忙,有2个处理器闲着,如果最后一轮忙着的处理器比例太少小于上述的阈值,则把10个任务组成的任务块细分成8个任务的块+2个任务组成的块,即对任务碎片TaskFrag进行切割,切割成任务大小为nPE-(nTask%nPE)的碎片,切割后需要对任务数量nTask、期望花费时间tCost值进行更新,同时切割会额外产生任务大小为nTask%nPE的碎片;如图7(b)所示,如果(nTask%nPE)/nPE>thrCut,则不会对任务碎片TaskFrag进行任何处理,它将整个任务碎片视为一个规整的矩形(即忽视阴影缺角部分),在一实施例中,任务块划分的阈值thrCut取68%,仅作为举例,不以此为限。
[0122] 在本实施例中,步骤S669按资源碎片的使用时间限制是否大于或等于任务碎片的预期花费时间,资源碎片与任务碎片的亲和度计算方式可以分成两类:
[0123] 第一类:当tCost≤tLimit时,该情况又可以细分成四种不同的具体情况:
[0124] 第一种情况:uPE=nPE and tCost=tLimit,这类情况下,任务碎片的处理器核占用数等于资源碎片的可用处理器核数,任务的预期花费时间也恰好等于资源的可用时间限制。这类情况下,亲和度affinity=3+nTask/nPE。
[0125] 第二种情况:uPE=nPE and tCost
[0126] 第三种情况:uPE=nPE and tCost
[0127] 第四种情况:uPE
[0128] 第二类:当tCost>tLimit时,该情况下由于任务碎片的预期完成时间大于资源碎片的可用时间限制,所以需要对任务碎片进行进一步的“拉伸”或“分割”操作,使得tCost′
[0129] 第一种情况:uPE
[0130] 第二种情况:uPE=nPE,在这类情况下,对任务碎片进行切割,系统会根据给定资源碎片的nPE,tLimit信息,重新估算最多可以处理的任务数量nTask’。若nTask’=0,则亲和度affinity=-∞,否则,affinity=-nPE/nTask′。
[0131] 本发明实施例提供的任务调度方法,在保证系统吞吐率和延迟的同时充分考虑各任务属性,对执行顺序进行调整,尽量避免任务错过截止时间,充分利用多核设备并行计算优势,采用细粒度的任务调度对计算资源进行灵活分配,进一步确保高优先级的任务不会错过截止时间,得到了高效的任务调度结果。
[0132] 实施例2
[0133] 本发明实施例提供一种计算机设备,如图8所示,该设备可以包括处理器51和存储器52,其中处理器51和存储器52可以通过总线或者其他方式连接,图8以通过总线连接为例。
[0134] 处理器51可以为中央处理器(Central Processing Unit,CPU)。处理器51还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
[0135] 存储器52作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的对应的程序指令/模块。处理器51通过运行存储在存储器52中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例1中的计算资源感知的任务调度方法。
[0136] 存储器52可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器51所创建的数据等。此外,存储器52可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器52可选包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至处理器51。上述网络的实例包括但不限于互联网、企业内部网、企业内网、移动通信网及其组合。
[0137] 一个或者多个模块存储在存储器52中,当被处理器51执行时,执行实施例1中的计算资源感知的任务调度方法。
[0138] 上述计算机设备具体细节可以对应参阅实施例1中对应的相关描述和效果进行理解,此处不再赘述。
[0139] 本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random Access Memory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;存储介质还可以包括上述种类的存储器的组合。
[0140] 显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本发明创造的保护范围之中。