CN102929707B - 并行任务动态分配方法 - Google Patents
并行任务动态分配方法 Download PDFInfo
- Publication number
- CN102929707B CN102929707B CN201210438264.6A CN201210438264A CN102929707B CN 102929707 B CN102929707 B CN 102929707B CN 201210438264 A CN201210438264 A CN 201210438264A CN 102929707 B CN102929707 B CN 102929707B
- Authority
- CN
- China
- Prior art keywords
- task
- consumer
- host process
- allocated
- host
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Multi Processors (AREA)
- Computer And Data Communications (AREA)
Abstract
一种并行任务动态分配方法,适用于包括多级用户进程的并行***,所述多级用户进程包括至少两级主进程和普通进程。该方法包括:主进程将本级待分配的并行任务排序,形成本级待分配任务队列;接收下一级用户进程发送的任务请求消息及所请求的任务数量;从本级待分配任务队列的队首开始,按照下一级用户进程所请求的任务数量,为下一级用户进程分配任务,并更新本级待分配任务队列。本发明可提高动态任务分配的效率,以达到众多计算资源间的负载平衡。
Description
技术领域
本发明涉及高性能计算领域,尤其涉及一种大规模并行环境下的并行任务动态分配方法。
背景技术
大规模并行环境下,并行应用程序面对的计算资源众多,容易出现通信热点,产生负载不均衡现象,导致动态任务分配服务性能急剧下降,从而影响应用程序的整体效率。因此,在并行语言运行***中,如何高效实现计算任务到计算资源的动态映射以达到众多计算资源间的负载平衡,保证并行应用程序性能最佳化,成为本领域技术人员亟待解决的技术问题之一。在大规模环境下实现动态任务分配,从而影响到应用程序性能,
对于任务并行类课题,要实现动态任务分配,最直接的方式是用户利用并行消息库函数编写相应的控制程序,例如在MPI(消息传递编程模型,Message Passing Interface)程序中,选出一个主进程,通常为RANK0作为Master,其他进程向该进程发送任务请求消息,Master根据当前任务执行情况向其他进程提供任务分配服务。但这种实现方式的缺点在于:1)用户编写任务控制程序具有一定的难度,实现较为复杂;2)可扩展性存在问题,在大规模并行***上,用户进程成千上万,Master负担较重,影响程序的整体执行效率。
此外,大规模并行环境的计算资源众多,经常出现计算资源故障的现象。因此,如何保证并行程序以较小的容错代价在计算资源出现故障的情况下继续执行,也是本领域技术人员亟待解决的技术问题。
在容错方面,检查点技术是最为常见的手段之一。检查点技术是指当用户程序执行到一定阶段时,将当前用户程序执行的内存映像保留至磁盘,当故障发生时,读出最近一个检查点的内存映像,从该点重新运行用户程序。检查点容错技术需要保留完整程序的内存映像,代价较高,且大数据量的课题,需要保留的内容较多,对于平台的I/O能力有着极高的要求。此外,当有计算资源出现故障时,只能恢复到此前最近的检查点,故障产生的损失较大。
发明内容
本发明所要解决的技术问题是提高动态任务分配的效率,以达到众多计算资源间的负载平衡。
为了解决上述问题,本发明提供了一种并行任务动态分配方法,适用于包括多级用户进程的并行***;所述多级用户进程包括至少两级主进程和普通进程;该方法包括:
所述主进程将本级待分配的并行任务排序,形成本级待分配任务队列;
所述主进程接收下一级用户进程发送的任务请求消息及所请求的任务数量;
所述主进程从本级待分配任务队列的队首开始,按照下一级用户进程所请求的任务数量,为下一级用户进程分配任务,并更新本级待分配任务队列。
可选的,该方法还包括:
所述主进程从本级待分配任务队列的队首开始,根据所述主进程本身的处理能力,为主进程分配任务,并更新本级待分配任务队列;在为主进程分配任务的过程中,暂停为下一级用户进程分配任务。
可选的,还包括:
若所请求的任务数量大于所述本级待分配任务队列中的任务数量,则所述主进程向其上一级用户进程发送任务请求消息及所请求的任务数量,在接收到上一级用户进程分配的任务后更新所述本级待分配任务队列。
可选的,该方法还包括:
若在所述用户进程接收并执行任务的过程中发生故障,则将发生故障的任务回收,并排到分配该任务的用户进程所管理的待分配任务队列的队尾,以重新参与任务分配。
可选的,所述主进程包括全局主进程和区域主进程;
所述多级用户进程包括全局主进程、至少一级区域主进程和普通进程;
所述全局主进程、至少一级区域主进程和普通进程呈树状排布;其中,全局主进程为根结点;区域主进程为分支结点;普通进程为叶子结点。
可选的,在所述主用户进程将本级待分配的并行任务排序,形成待分配任务队列之前,还包括:
将所有用户进程按照全局主进程、至少一级区域主进程及普通进程分为多级用户进程。
可选的,所述将所有用户进程按照全局主进程、至少一级区域主进程及普通进程分为多级用户进程包括:
选取作为全局主进程的用户进程;
将其他用户进程分组;在各组内选取作为区域主进程的用户进程;
余下的用户进程为普通进程。
可选的,所述将其他用户进程分组包括:
将除全局主进程以外的用户进程分组以形成一级区域主进程;
或者将除全局主进程以外的用户进程分组以形成一级区域主进程,并在分组后形成的用户进程组内再进行逐级分组,以形成有上下从属关系的多级区域主进程。
可选的,所述选取作为全局主进程的用户进程包括选取逻辑进程号最小的用户进程为全局主进程;
所述在各组内选取作为区域主进程的用户进程包括选择各组内逻辑进程号最小的的用户进程为区域主进程。
可选的,该方法还包括:
所述全局主进程记录所有任务的分配情况,并根据接收任务的用户进程返回的任务完成情况,记录断点文件;
所述区域主进程记录本级待分配任务的分配情况,并根据接收任务的用户进程返回的任务完成情况,向其上一级用户进程返回本级的任务完成情况;
所述普通进程向其上一级用户进程返回普通进程本身的任务完成情况。
可选的,该方法还包括:
若所述普通进程出现故障,则将分配给该普通进程的任务回收,并排到其上一级的区域主进程管理的待分配任务队列的队尾,重新参与任务分配;
若所述区域主进程出现故障,则将分配给该区域主进程的任务回收,并排到其上一级的用户进程管理的待分配任务队列的队尾,重新参与任务分配;并从该区域主进程下一级的用户进程中选择新的区域主进程,继续为下一级用户进程分配任务;
当所述全局主进程出现故障,从其下一级的区域主进程中选择新的全局主进程,读取所述断点文件,继续分配所述断点文件未记录的未完成任务。
可选的,在所述主进程将本级待分配的并行任务排序,形成本级待分配任务队列之前,还包括:
进行初始化;所述初始化包括:记录断点文件名、记录总任务数、记录任务块大小。
可选的,所述普通进程一次请求的任务数量为一个任务块大小;
所述区域主进程一次请求的任务数量为一个任务块大小与其下级所有用户进程数的乘积;
可选的,在所述主进程将本级待分配的并行任务排序,形成本级待分配任务队列之前,还包括:为每个任务分配唯一的任务号;
所述分配任务包括:给出所分配任务的任务号。
可选的,还包括:在全局主进程的待分配任务队列之后增加一结束标记;
当接收到的任务号为所述结束标记时,并行任务分配完毕。
与现有技术相比,本发明的技术方案具有以下优点:
1、本发明通过基于排队论模型的多层动态任务分配模式,将动态任务分配服务分布至多个计算资源,降低了动态任务分配的代价,有效提高了任务分配服务的效率,从而避免了服务热点的产生,达到众多计算资源间的负载平衡。
2、可选方案中,通过对用户进程进行分组以形成树形排布,更简化上级用户进程对下级用户进程以及对任务的管理。
3、可选方案中,通过在服务端记录当前任务分配的情况,在部分计算资源出现故障的情况下,将分配给故障资源的任务回收,重新分配至健康计算资源,以保证并行应用程序能够继续正确执行,提供了容错效率,同时将故障资源带来的影响局限于一定的范围。此外,断点文件的及时更新也能有效降低故障资源带来的损失。
附图说明
图1为本发明的并行任务动态分配方法的第一具体实施方式的流程图;
图2为本发明的并行任务动态分配方法的第二具体实施方式的流程图;
图3为本发明的并行任务动态分配方法的第三具体实施方式的流程图;
图4为本发明的并行任务动态分配方法的第四具体实施方式的流程图;
图5为本发明的并行任务动态分配方法中步骤将所有用户进程分为多级用户进程的一具体实施方式的流程图;
图6为对应图5具体实施方式的第一实施例的各阶段示意图;
图7为对应图5具体实施方式的第二实施例的各阶段示意图;
图8为本发明的并行任务动态分配方法的第五具体实施方式的流程图;
图9为本发明的并行任务动态分配方法的第一实施例的各阶段示意图;
图10为本发明的并行任务动态分配方法的第二实施例的各阶段示意图;
图11为本发明的并行任务动态分配方法的第三实施例的各阶段示意图;
图12为本发明的并行任务动态分配方法的第四实施例的各阶段示意图;
图13为本发明的并行任务动态分配方法的第五实施例的各阶段示意图。
图14为本发明的并行任务动态分配方法的第六实施例的各阶段示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施的限制。
其次,本发明利用示意图进行详细描述,在详述本发明实施例时,为便于说明,所述示意图只是实例,其在此不应限制本发明保护的范围。
本发明的应用背景为任务并行类课题,即课题由众多个子任务组成,每个子任务间没有相关性,课题的正确性以各个子任务的完整执行为前提条件。
为了解决背景技术中的技术问题,本发明提供了一种并行任务动态分配方法,图1为本发明的并行任务动态分配方法的第一具体实施方式的流程图。如图1所述,本具体实施方式包括以下步骤:
执行步骤S101,主进程将本级待分配的并行任务排序,形成本级待分配任务队列。本发明通过多层次地动态分配任务,能有效缓解现有技术中所有任务都由唯一的主进程分配而导致的主进程通信热点问题。
具体地,主进程包括全局主进程及至少一级的区域主进程。所述全局主进程、至少一级区域主进程和普通进程呈树状排布。其中,全局主进程为根结点;区域主进程为分支结点;普通进程为叶子结点。所述全局主进程的待分配任务队列中包括所有的待分配并行任务,各区域主进程的待分配任务队列中的任务为其上一级用户进程(全局主进程或区域主进程)为其分配的并行任务。
需要说明的是,本领域技术人员可以理解,所述并行任务为互相之间没有相关性的任务,可由不同的处理器并行执行。在大规模并行环境下,一个计算课题通常被分解为多个并行任务,课题的正确性以各个并行任务的完整执行为前提条件。
需要说明的是,本发明对区域主进程的级数不做具体限定,操作人员可综合考虑任务分配的效率和存储空间、任务管理的开销的基础上自行决定。原则上,区域主进程的级数越多,任务分配的效率越高,同时所需的存储空间及任务管理上的开销也越大。
所述将本级待分配的并行任务排序可包括:根据本级待分配并行任务的任务号从小到大进行排序,但本发明对此不做具体限定,本领域技术人员可理解,现有技术中各种排序方式皆可应用于本发明,在此不赘。
执行步骤S102,主进程接收下一级用户进程发送的任务请求消息及所请求的任务数量。具体地,主进程只接受其下一级用户进程发送的任务请求及所请求的任务数量。以包含全局主进程、一级区域主进程及普通进程3级用户进程的并行***为例,全局主进程仅接受一级区域主进程发送的任务请求及所请求的任务数量。若普通进程申请任务,则只能向其上一级用户进程(即一级区域主进程)发送任务请求及所请求的任务数量。以包含全局主进程、一级区域主进程、二级区域主进程及普通进程4级用户进程的并行***为例,则全局主进程仅接受一级区域主进程的任务请求,一级区域主进程只接受二级区域主进程的任务请求,二级区域主进程接受普通进程的任务请求。通过上述方式,可有效控制每级用户进程与其上下级用户进程间的通信负载量。
执行步骤S103,主进程从本级待分配任务队列的队首开始,按照下一级用户进程所请求的任务数量,为下一级用户进程分配任务,并更新本级待分配任务队列。具体地,本发明采用先入先出(FIFO)的方式,为下一级用户进程分配任务。全局主进程只对其下一级用户进程(即:一级区域主进程)分配任务,各区域主进程也只对其下一级用户进程分配任务。所述下一级用户进程所请求的任务数量包括:以可并行处理的任务数量来确定一次请求的任务数量。仍以包含全局主进程、一级区域主进程及普通进程3级用户进程的并行***为例。比如:全局主进程下有2个一级区域主进程,每个一级区域主进程下都有50个普通进程,每个普通进程并行任务处理能力为10个任务。则一个普通进程向一级区域主进程一次请求的任务数量为10个,而一个一级区域主进程向全局主进程一次请求的任务数量为500个(即:10×50,任务数量×进程数)。所述更新本级待分配任务队列包括:将已分配的任务从所述本级待分配任务队列中移出,使所述本级待分配任务队列中仅包含本级未分配的任务。
本发明将原本集中于全局主进程的任务分配,多维度多层次地交由多级用户进程(即:全局主进程和区域主进程)共同分配,有效提高了任务分配的效率。同时,基于排队论模型的任务分配模式,使得动态任务分配的代价更低,效率更高。
图2为本发明的并行任务动态分配方法的第二具体实施方式的流程图。与第一具体实施方式不同的是,本具体实施方式中主进程除了为下一级用户进程分配任务之外,其本身也参与执行任务。而且本具体实施方式中,在为下一级用户进程分配任务之前,会先对本级待分配任务是否满足下一级用户进程所请求的任务数量做一预估,在满足的基础上才对下一级用户进程进行任务分配;若不满足,则先由主进程向其上一级用户进程请求任务后,再向下一级用户进程进行任务分配。
如图2所述,本具体实施方式包括以下步骤:
执行步骤S201,主进程将本级待分配的并行任务排序,形成本级待分配任务队列。
可选择执行为下一级用户进程分配任务,或者为主进程本身分配任务。即:在任务分配的服务负担不重的情况下,主进程除了为下一级用户进程分配任务之外,其本身也参与执行任务。
若为下一级用户进程分配任务,则执行步骤S202,接收下一级用户进程发送的任务请求消息及所请求的任务数量。
继续执行步骤S203,判断所请求的任务数量是否大于本级待分配任务队列中的任务数量,即:本具体实施方式中,并非是到本级待分配任务已全部分配完毕之后才向上一级用户进程请求任务的,而是须满足下一级用户进程的一次任务请求数量,无法满足时即向上一级用户进程请求任务。仍以前述包含全局主进程、一级区域主进程及普通进程3级用户进程的并行***为例。一个普通进程向一级区域主进程一次请求的任务数量为10,一个一级区域主进程向全局主进程一次请求的任务数量为500个(即:10×50,任务数量×进程数)。当一个普通进程向一级区域主进程请求任务时,会先判断此时该一级区域主进程的待分配任务对列中的任务数是否满足10个,若满足才分配,否则由该一级区域主进程先向全局主进程请求任务后,再向该普通进程分配任务。
若所请求的任务数量大于本级待分配任务队列中的任务数量,则执行步骤S204,向上一级用户进程发送任务请求消息及所请求的任务数量,在接收到上一级用户进程分配的任务后更新所述本级待分配任务队列,即:将接收到的任务排序后,加入所述本级待分配任务队列的队尾。然后返回步骤S203继续执行。
若所请求的任务数量小于或等于本级待分配任务队列中的任务数量,则执行步骤S205,从本级待分配任务队列的队首开始,按照下一级用户进程所请求的任务数量,为下一级用户进程分配任务。执行步骤S206,更新本级待分配任务队列,即:将已分配的任务从所述本级待分配任务队列中移出。
若为主进程本身分配任务,则为避免同时对主进程及下一级用户进程分配任务而导致的任务分配冲突,先执行步骤S207,暂停为下一级用户进程分配任务。执行步骤S208,从本级待分配任务队列的队首开始,根据主进程的处理能力,为主进程本身分配任务。具体地,由于是主进程为自身分配任务,待分配任务队列保存在本地,主进程可知晓自身是否尚有足够的待分配任务数量,因此在为主进程本身分配任务时,无需询问待分配任务数量是否满足分配需求。执行步骤S209,更新本级待分配任务队列,即:将已分配的任务从所述本级待分配任务队列中移出。执行步骤S210,恢复为下一级用户进程分配任务。
继续执行步骤S211,判断所有任务是否均分配完毕。若是,则结束。否则,返回步骤S202或步骤S207,继续分配任务。
图3为本发明的并行任务动态分配方法的第三具体实施方式的流程图。与第二具体实施方式不同的是,本具体实施方式中还引入了容错机制,即:当用户进程发生故障时,抛弃故障的用户进程,并回收已分配给故障用户进程的任务,重新分配给健康的用户进程。
如图3所述,本具体实施方式包括以下步骤:
执行步骤S301,主进程将本级待分配的并行任务排序,形成本级待分配任务队列。
可选择执行为下一级用户进程分配任务,或者为主进程本身分配任务。若为下一级用户进程分配任务,则执行步骤S302,接收下一级用户进程发送的任务请求消息及所请求的任务数量。执行步骤S303,判断所请求的任务数量是否大于本级待分配任务队列中的任务数量。若所请求的任务数量大于本级待分配任务队列中的任务数量,则执行步骤S304,向上一级用户进程发送任务请求消息及所请求的任务数量,在接收到上一级用户进程分配的任务后更新所述本级待分配任务队列,然后返回步骤S303继续执行。若所请求的任务数量小于或等于本级待分配任务队列中的任务数量,则执行步骤S305,从本级待分配任务队列的队首开始,按照下一级用户进程所请求的任务数量,为下一级用户进程分配任务。执行步骤S306,更新本级待分配任务队列。
若为主进程本身分配任务,则执行步骤S307,暂停为下一级用户进程分配任务。执行步骤S308,从本级待分配任务队列的队首开始,根据主进程的处理能力,为主进程本身分配任务。执行步骤S309,更新本级待分配任务队列。执行步骤S310,恢复为下一级用户进程分配任务。
执行步骤S311,判断用户进程接收并执行任务过程中是否发生故障。具体地,可由***管理程序通知底层支撑***发生故障的计算资源的物理位置,底层支撑***通过代换确定发生故障的资源的逻辑编号。
若发生了故障,则执行步骤S312,将发生故障的任务回收,并排到分配该任务的用户进程管理的待分配任务队列的队尾,以重新参与任务分配,返回步骤S302或步骤S307,继续分配任务。若未发生故障,则执行步骤S313,判断所有任务是否均分配完毕。若是,则结束。否则,返回步骤S302或步骤S307,继续分配任务。
需要说明的是,本具体实施方式还可包括:所述全局主进程记录所有任务的分配情况,并根据接收所述任务的用户进程返回的任务完成情况,记录断点文件;所述区域主进程记录本级待分配任务的分配情况,并根据接收所述任务的用户进程返回的任务完成情况,向其上一级用户进程返回本级的任务完成情况;所述普通进程向其上一级用户进程返回普通进程本身的任务完成情况。具体地,所述断点文件记录了已经执行完毕的任务,用于在所述全局主进程发生故障时,恢复到此前最近的里程碑点,以继续正确执行。所述记录断点文件可以是定时记录断点,或者已完成的任务积累至一定数量后记录断点,亦或者将两者相结合,只要满足任一情况即记录一次断点,本发明对此不做具体限定。
对应地,本具体实施方式还可包括:若所述普通进程出现故障,则将分配给该普通进程的任务回收,并排到其上一级的区域主进程管理的待分配任务队列的队尾,重新参与任务分配;若所述区域主进程出现故障,则将分配给该区域主进程的任务回收,并排到其上一级的用户进程管理的待分配任务队列的队尾,重新参与任务分配;并从该区域主进程下一级的用户进程中选择新的区域主进程,继续为下一级用户进程分配任务;当所述全局主进程出现故障,从其下一级的区域主进程中选择新的全局主进程,读取所述断点文件,继续分配所述断点文件未记录的未完成任务。
具体地,若某普通进程出现故障,则放弃该资源,不再为其分配任务,同时由于其上一级的区域主进程中保存有该普通进程的任务完成情况,可由该区域主进程将该普通进程未完成的任务继续分配给其他普通进程执行。若是某区域主进程出现故障,则从其下一级的用户进程中选出新的区域主进程,继续为下一级用户进程分配任务,同时由于其上一级的用户进程(上一级区域主进程或全局主进程)中保存有该故障区域主进程的任务完成情况,可由该上一级用户进程继续分配该故障区域主进程未完成的任务。若全局主进程出现故障,则需要从其下一级的区域主进程中选择新的全局主进程,同时读取记录的断点文件,以恢复到最近的里程碑状态,继续分配未完成任务。
图4为本发明的并行任务动态分配方法的第四具体实施方式的流程图。与第三具体实施方式不同的是,本具体实施方式在伊始增加了将用户进程分级,以形成多级用户进程的步骤。如图4所述,本具体实施方式包括以下步骤:
执行步骤S401,将所有用户进程按照全局主进程、至少一级区域主进程及普通进程分为多级用户进程。
执行步骤S402,主进程将本级待分配的并行任务排序,形成本级待分配任务队列。
可选择执行为下一级用户进程分配任务,或者为主进程分配任务。若为下一级用户进程分配任务,则执行步骤S403,接收下一级用户进程发送的任务请求消息及所请求的任务数量。执行步骤S404,判断所请求的任务数量是否大于本级待分配任务队列中的任务数量。若所请求的任务数量大于本级待分配任务队列中的任务数量,则执行步骤S405,向上一级用户进程发送任务请求消息及所请求的任务数量,在接收到上一级用户进程分配的任务后更新所述本级待分配任务队列,然后返回步骤S404继续执行。若所请求的任务数量小于或等于本级待分配任务队列中的任务数量,则执行步骤S406,从本级待分配任务队列的队首开始,按照下一级用户进程所请求的任务数量,为下一级用户进程分配任务。执行步骤S407,更新本级待分配任务队列。
若为主进程分配任务,则执行步骤S408,暂停为下一级用户进程分配任务。执行步骤S409,从本级待分配任务队列的队首开始,根据主进程的处理能力,为主进程本身分配任务。执行步骤S410,更新本级待分配任务队列。执行步骤S411,恢复为下一级用户进程分配任务。
执行步骤S412,判断用户进程接收并执行任务过程中是否发生故障,若发生了故障,则执行步骤S413,将发生故障的任务回收,并排到分配该任务的用户进程管理的待分配任务队列的队尾,以重新参与任务分配,返回步骤S403或步骤S408,继续分配任务。若未发生故障,则执行步骤S414,判断所有任务是否均分配完毕。若是,则结束。否则,返回步骤S403或步骤S408,继续分配任务。
图5为本发明的并行任务动态分配方法中步骤将所有用户进程分为多级用户进程的一具体实施方式的流程图。如图5所述,本具体实施方式包括以下步骤:
执行步骤S4011,选取作为全局主进程的用户进程。具体地,可选取逻辑进程号最小的用户进程为全局主进程,但本发明对此不作具体限定。本领域技术人员可根据其他规则选定全局主进程,比如:根据进程占用资源的多少或进程在通信网络中的物理位置等。
执行步骤S4012,将其他用户进程分组,在各组内选取作为区域主进程的用户进程。
具体地,所述将其他用户进行分组包括:将除全局主进程以外的用户进程分组以形成一级区域主进程(即:共3级用户进程,第一级为全局主进程,第二级为一级区域主进程,第三级为普通进程),或者将除全局主进程以外的用户进程分组以形成一级区域主进程,并在分组后形成的用户进程组内再进行逐级分组,以形成有上下从属关系的多级区域主进程(即:共n级用户进程,n>3,第一级为全局主进程,第二至第(n-1)为有上下从属关系的多级区域主进程,第n级为普通进程)。
所述在各组内选取作为区域主进程的用户进程包括选择各组内逻辑进程号最小的的用户进程为区域主进程,但本发明对此不作具体限定。本领域技术人员可根据其他规则选定区域主进程,比如:根据进程建立时间的先后,或进程在通信网络中的物理位置等。
执行步骤S4013,余下的用户进程为普通进程。
下面结合附图和具体实施例对本发明中“将用户进程分级”步骤做进一步说明。
图6为对应图5具体实施方式的第一实施例的各阶段示意图。
参考图6中STEP1,本实施例中一共有100个进程,其逻辑进程号分别为0~99。
继续参考图6中STEP2,选取其中逻辑进程号最小的进程(即:进程0)为全局主进程,将该100个进程分为2级,即:全局主进程(进程0)和其他用户进程(进程1~99)。
继续参考图6中STEP3,对其他用户进程(进程1~99)进行分组,分为2组。用户进程组(进程1~45)为第一组,用户进程组(进程46~99)为第二组。
继续参考图6中STEP4,在第一组内选取逻辑进程号最小的进程(即:进程1)为区域主进程,余下的进程为(进程2~45)普通进程。在第二组内选取逻辑进程号最小的进程(即:进程46)为区域主进程,余下的进程为(进程47~99)普通进程。
至此,所有用户进程分级完毕,形成了包括1个全局主进程、2个区域主进程及其他97个普通进程在内的3级用户进程。
图7为对应图5具体实施方式的第二实施例的各阶段示意图。与前一实施例不同的是,本实施例中通过组内逐级分组,形成了多级用户进程。
参考图7中STEP1’,本实施例中同样有100个进程,其逻辑进程号分别为0~99。
继续参考图7中STEP2’,选取其中逻辑进程号最小的进程(即:进程0)为全局主进程,将该100个进程分为2级,即:全局主进程(进程0)和其他用户进程(进程1~99)。
继续参考图7中STEP3’,对其他用户进程(进程1~99)进行分组,分为2组。用户进程组(进程1~45)为第一组,用户进程组(进程46~99)为第二组。
继续参考图7中STEP4’,在第一组内选取逻辑进程号最小的进程(即:进程1)为一级区域主进程,并形成第一用户进程组(进程2~45)。在第二组内选取逻辑进程号最小的进程(即:进程46)为一级区域主进程,并形成第二用户进程组(进程47~99)。
继续参考图7中STEP5’,对第一用户进程组(进程2~45)进行再分组,分为2组,用户进程组(进程2~30)为第一组,用户进程组(进程31~45)为第二组;对第二用户进程组(进程47~99)进行再分组,分为2组,用户进程组(进程47~60)为第一组,用户进程组(进程61~99)为第二组。
继续参考图7中STEP6’,在用户进程组(进程2~30)内选取逻辑进程号最小的进程(即:进程2)为二级区域主进程,余下的进程为(进程3~30)普通进程。在用户进程组(进程31~45)内选取逻辑进程号最小的进程(即:进程31)为二级区域主进程,余下的进程为(进程32~45)普通进程。在用户进程组(进程46~60)内选取逻辑进程号最小的进程(即:进程47)为二级区域主进程,余下的进程为(进程48~60)普通进程。在用户进程组(进程61~99)内选取逻辑进程号最小的进程(即:进程61)为二级区域主进程,余下的进程为(进程62~99)普通进程。
至此,所有用户进程分级完毕,形成了包括1个全局主进程、2个一级区域主进程、4个二级区域主进程及其他93个普通进程在内的4级用户进程。
需要说明的是,以上实施例旨在说明本发明用户进程分级的步骤,采用的进程数和区域主进程级数较少,不应理解为对本发明的进程数量及分级数量的限定。实际上,在大规模并行环境下,一个计算课题由众多个子任务组成,其进程数可数以万计。而对区域主进程的级数,如前述可由操作人员权衡分配效率及存储空间、管理开销而最终确定。
图8为本发明的并行任务动态分配方法的第五具体实施方式的流程图。与第四具体实施方式不同的是,本具体实施方式在将用户进程分级,以形成多级用户进程之前,还包括初始化的步骤。如图8所述,本具体实施方式包括以下步骤:
执行步骤S501,进行初始化。具体地,所述初始化包括:记录断点文件名、记录总任务数、记录任务块大小。进一步地,所述任务块大小为普通进程一次请求的任务数量。所述区域主进程一次请求的任务数量为一个任务块大小与其下级所有用户进程数的乘积。
执行步骤S502,将所有用户进程按照全局主进程、至少一级区域主进程及普通进程分为多级用户进程。
执行步骤S503,主进程将本级待分配的并行任务排序,形成本级待分配任务队列。
需要说明的是,在所述主进程将本级待分配的并行任务排序,形成本级待分配任务队列之前,还包括:为每个任务分配唯一的任务号;所述分配任务包括:给出所分配任务的任务号。在形成全局主进程的待分配任务队列后,还包括:在全局主进程的待分配任务队列之后增加一结束标记;当接收到的任务号为所述结束标记时,并行任务分配完毕。比如:从自然数1开始连续为每个任务分配任务号,即:第一个任务的任务号为1,...,第n个任务的任务号为n。在全局主进程的待分配任务队列(即包括了所有的待分配任务)之后增加一结束标记,该结束标记为-2。则当用户进程分配到任务号为-2的任务时,即表明所有任务已分配完毕。
继续参考图8,可选择执行为下一级用户进程分配任务,或者为主进程分配任务。若为下一级用户进程分配任务,则执行步骤S504,接收下一级用户进程发送的任务请求消息及所请求的任务数量。执行步骤S505,判断所请求的任务数量是否大于本级待分配任务队列中的任务数量。若所请求的任务数量大于本级待分配任务队列中的任务数量,则执行步骤S506,向上一级用户进程发送任务请求消息及所请求的任务数量,在接收到上一级用户进程分配的任务后更新所述本级待分配任务队列,然后返回步骤S505继续执行。若所请求的任务数量小于或等于本级待分配任务队列中的任务数量,则执行步骤S507,从本级待分配任务队列的队首开始,按照下一级用户进程所请求的任务数量,为下一级用户进程分配任务。执行步骤S508,更新本级待分配任务队列。
若为主进程分配任务,则执行步骤S509,暂停为下一级用户进程分配任务。执行步骤S510,从本级待分配任务队列的队首开始,根据主进程的处理能力,为主进程本身分配任务。执行步骤S511,更新本级待分配任务队列。执行步骤S512,恢复为下一级用户进程分配任务。
执行步骤S513,判断用户进程接收并执行任务过程中是否发生故障,若发生了故障,则执行步骤S514,将发生故障的任务排回收,并到分配该任务的用户进程管理的待分配任务队列的队尾,以重新参与任务分配,返回步骤S504或步骤S509,继续分配任务。若未发生故障,则执行步骤S515,判断所有任务是否均分配完毕。若是,则结束。否则,返回步骤S504或步骤S509,继续分配任务。
下面结合附图和具体实施例对本发明的技术方案做进一步说明。
图9为本发明的并行任务动态分配方法的第一实施例的各阶段示意图。该实施例中,一共有1000个无相关性的任务(任务号为0~999)需要分配给100个进程(逻辑进程号为0~99)并行执行。该100个进程分为3级,即:由进程0为全局主进程,进程1和进程46为区域主进程,进程2~进程45、进程47~进程99为普通进程。其中,全局主进程(进程0)和区域主进程(进程1、进程46)具备任务分配能力。
参考图9中STEP101,全局主进程(进程0)将1000个任务按照任务号从小到大排序,形成全局主进程的待分配任务队列。并且在该队列的最末增加了结束标记(数值为-2)。
继续参考图9中STEP102,普通进程(进程2)向其上一级的用户进程(即:区域主进程-进程1)发送任务请求,进程1的本级待分配任务队列此时为空。因此,进程1继续向其上一级的用户进程(即:全局主进程-进程0)请求任务。全局主进程-进程0向区域主进程-进程1分配了本级待分配任务队列的前100个任务(即:任务号为0~99的任务),并更新了全局主进程的本级待分配任务队列为任务号100~999的900个任务。
同样,另一区域主进程-进程46也分配到了全局主进程-进程0向其分配的任务号为100~199的100个任务。同时,全局主进程的本级待分配任务队列被更新为任务号200~999的800个任务。
继续参考图9中STEP103,全局主进程-进程0还为自身分配了任务号为200的任务,同时全局主进程的本级待分配任务队列被更新为任务号201~999的任务。
此时区域主进程的待分配任务序列中已有足够的任务可分配,因此区域主进程-进程1为其下一级的普通进程-进程2~进程45分配了任务号为0~43的任务。为清楚明了,本实施例中每个用户进程一次仅请求1个任务,因此普通进程-进程2被分配到了任务号为0的任务,普通进程-进程3被分配到了任务号为1的任务,...,普通进程-进程45被分配到了任务号为43的任务。区域主进程-进程1的本级待分配任务队列被更新为任务号44~99任务。同时,区域主进程-进程1本身也被分配到1个任务(任务号为44),并更新了区域主进程-进程1的本级待分配任务队列为任务号45~99的任务。
另一区域主进程-进程46也开始往其下一级的普通用户进程-进程47~99分配任务,同时也为区域主进程-进程46本身分配任务。从图9的STEP103中,我们可以看出,区域主进程-进程46及其下的普通进程执行任务速度较快,区域主进程-进程46待分配任务队列中的任务已经分配完毕,此时已为空。若普通进程-进程47~99再向区域主进程-进程46请求任务,则区域主进程-进程46需要向其上一级的全局主进程-进程0请求任务后,才能往下继续分配。
继续参考图9的STEP10X,继续上述动态任务分配,直到有一个用户进程接收到了任务号为结束标记(即:-2)的任务,表明所有的任务已分配完毕。
图10为本发明的并行任务动态分配方法的第二实施例的各阶段示意图。与第一实施例不同的是,本实施例中的用户进程为4级。
本实施例中,也同样有1000个无相关性的任务(任务号为0~999)需要分配给100个进程(逻辑进程号为0~99)并行执行。该100个进程分为4级,即:第一级为全局主进程-进程0,第二级为一级区域主进程-进程1和进程46,第三级为二级区域主进程-进程2、进程31、进程47和进程61,第四级为余下的93个普通进程-进程3~30、进程32~45、进程48~60和进程62~99。其中,全局主进程(进程0)、一级区域主进程(进程1、进程46)、二级区域主进程(进程2、进程31、进程47和进程61)具备任务分配能力。
参考图10中STEP201,全局主进程(进程0)将1000个任务按照任务号从小到大排序,形成全局主进程的待分配任务队列。并且在该队列的最末增加了结束标记(数值为-2)。
继续参考图10中STEP202,普通进程(进程3)向其上一级的用户进程(即:二级区域主进程-进程2)发送任务请求。但此时进程2的本级待分配任务队列为空,无任务可分配。因此,进程2继续向其上一级的用户进程(即:一级区域主进程-进程1)请求任务。但此时进程1的本级待分配任务队列也为空,无任务可分配。因此,进程1继续向其上一级的用户进程(即:全局主进程-进程0)请求任务。
全局主进程-进程0向区域主进程-进程1分配了本级待分配任务队列中的前100个任务(即:任务号为0~99的任务),并更新了全局主进程的本级待分配任务队列为任务号100~999的900个任务。
同样,根据另一个一级区域主进程-进程46的任务请求,全局主进程-进程0向其分配了本级待分配任务队列中前100个任务(即:任务号为100~199的1任务)。同时,全局主进程的本级待分配任务队列被更新为任务号200~999的800个任务。
继续参考图10中STEP203,全局主进程-进程0还为自身分配了任务号为200的任务,同时全局主进程的本级待分配任务队列被更新为任务号201~999的任务。
此时一级区域主进程的待分配任务序列中已有足够的任务可分配,因此一级区域主进程-进程1先为自身分配了任务号为0的任务,并更新了一级区域主进程-进程1的待分配任务队列为任务号1~99的任务。
接着,一级区域主进程-进程1为其下一级的二级区域主进程-进程2分配了其待分配任务序列中的前30个任务(即:任务号为1~30的任务),同时更新了一级区域主进程-进程1的待分配任务队列为任务号31~99的任务。
一级区域主进程-进程1还为其下一级的另一个二级区域主进程-进程31分配了30个任务(即:任务号为31~60的任务),同时更新了一级区域主进程-进程1的待分配任务队列为任务号61~99的任务。
同时,另一个一级区域主进程-进程46也开始为其下一级的二级区域主进程分配任务。
一级区域主进程-进程46先为自身分配了任务号为100的任务,并更新了一级区域主进程-进程46的待分配任务队列为任务号101~99的任务。
接着,一级区域主进程-进程46为二级区域主进程-进程47分配了任务号为101~120的任务,同时更新了一级区域主进程-进程46的待分配任务队列为任务号121~199的任务。
一级区域主进程-进程46还为其下一级的另一个二级区域主进程-进程61分配了任务号为121~170的任务,同时更新了一级区域主进程-进程46的待分配任务队列为任务号171~199的任务。
继续参考图10中的STEP204,二级区域主进程-进程2为其下一级的普通进程-进程3~进程30分配任务。普通进程-进程3被分配到了任务号为1的任务,普通进程-进程4被分配到了任务号为2的任务,...,普通进程-进程30被分配到了任务号为28的任务。二级区域主进程-进程2的本级待分配任务队列被更新为任务号29~30任务。
同时,二级区域主进程-进程2还为其自身分配了任务号为29的任务,因此其本级待分配任务队列中仅剩下了任务号为30的一个任务。
另一二级区域主进程-进程31也开始往其下一级的普通用户进程-进程32~45分配任务。普通进程-进程32被分配到了任务号为31的任务,普通进程-进程33被分配到了任务号为32的任务,...,普通进程-进程45被分配到了任务号为44的任务。二级区域主进程-进程31的本级待分配任务队列被更新为任务号45~60的任务。
同时,二级区域主进程-进程31还为其自身分配了任务号为45的任务,因此其本级待分配任务队列被更新为任务号46~60的任务。
另一二级区域主进程-进程47也开始往其下一级的普通用户进程-进程48~60分配任务。普通进程-进程48被分配到了任务号为101的任务,普通进程-进程49被分配到了任务号为102的任务,...,普通进程-进程60被分配到了任务号为113的任务。二级区域主进程-进程47的本级待分配任务队列被更新为任务号114~120的任务。
同时,二级区域主进程-进程47还为其自身分配了任务号为114的任务,因此其本级待分配任务队列被更新为任务号115~120任务。
另一二级区域主进程-进程61也开始往其下一级的普通用户进程-进程62~99分配任务。普通进程-进程62被分配到了任务号为121的任务,普通进程-进程63被分配到了任务号为122的任务,...,普通进程-进程99被分配到了任务号为158的任务。二级区域主进程-进程61的本级待分配任务队列被更新为任务号159~170的任务。
同时,二级区域主进程-进程61还为其自身分配了任务号为159的任务,因此其本级待分配任务队列被更新为任务号160~170任务。
至此,每个用户进程都被分配到了任务。之后,在任务完成后,继续往复上述动态任务分配,直到有一个用户进程接收到了任务号为结束标记(即:-2)的任务,则所有的任务已分配完毕,在此不再赘述。
图11为本发明的并行任务动态分配方法的第三实施例的各阶段示意图;本实施例中具体示出了容错的过程。
本实施例采用第一实施例一样的用户进程分级,即:一共有1000个无相关性的任务(任务号为0~999)需要分配给100个进程(逻辑进程号为0~99)并行执行。该100个进程分为3级,即:进程0为全局主进程,进程1和进程46为区域主进程,进程2~进程45、进程47~进程99为普通进程。其中,全局主进程(进程0)和区域主进程(进程1、进程46)具备任务分配能力。
参考图11中STEP301,全局主进程已经将任务号为0~99的任务分给了区域主进程-进程1,将任务号为100~199的任务分给了区域主进程-进程46,将任务号为200的任务分给了自身,因此全局主进程-进程0的待分配任务队列为任务号201~999的任务。
区域主进程-进程1将任务号为0的任务分配给了普通进程-进程2,...,将任务号为43的任务分配给了普通进程-进程45,将任务号为44的任务分配给了自身,因此区间主进程-进程1的待分配任务队列为任务号45~99的任务。
区域主进程-进程46也向其下一级的普通进程分配任务。区域主进程-进程46及其下的普通进程执行任务速度较快,区域主进程-进程46待分配任务队列中的任务已经分配完毕,此时已为空。区域主进程-进程46自身在执行任务号为100的任务,普通进程-进程47在执行任务号为131的任务,...,普通进程-进程99在执行任务号为199的任务。
此时,发现普通进程-进程45在执行任务号为43的任务时,出现了故障。
继续参考图11的STEP302,区域主进程-进程1收回了分配给故障资源-进程45的任务号为43的任务,将其加到区域主进程-进程1的待分配任务队列的队尾,从新参与分配。在进程45重新启动之前,区域主进程-进程1都不会再为其分配任务。目前,总共有99个用户进程继续完成剩下的并行任务。
继续参考图11的STEP303,此时发现区域主进程-进程1也发生了故障。
继续参考图11的STEP304,全局主进程-进程0收回了分配给区域主进程-进程1的尚未完成的任务(即:任务号为0~99的任务),加到全局主进程-进程0的待分配任务队列的队尾,从新参与分配。在进程1重新启动之前,全局主进程-进程0都不会再为其分配任务。目前,总共有98个用户进程继续完成剩下的并行任务。
同时,在原区域主进程-进程1的下一级普通进程中,选取进程2担任新的区域主进程。全局主进程-进程0会根据新的区域主进程-进程2的任务请求,为其分配任务。
图12为本发明的并行任务动态分配方法的第四实施例的各阶段示意图;与第一实施例不同的是,本实施例在所述具备任务分配能力的用户进程将本级待分配的并行任务排序,形成本级待分配任务队列之前,还包括了将所有用户分级的步骤。具体参考图12的STEP401,本实施例中,一共有1000个无相关性的任务(任务号为0~999)需要分配给100个进程(逻辑进程号为0~99)并行执行。
继续参考图12的STEP402,逻辑进程号0~99的100个用户进程被分为3级:第一级为1个全局主进程(进程0),第二级为2个区域主进程(进程1、进程46),第三极为97个普通进程(进程2~进程45、进程47~进程99)。具体分为多级的方法已在前述实施例中予以说明,此处不再赘述。
本实施例的其他各步与图9所示的第一实施例基本一致,可参考第一实施例,此处不再赘述。
图13为本发明的并行任务动态分配方法的第五实施例的各阶段示意图。本实施例具体示出了记录断点文件的过程。本实施例采用第一实施例一样的用户进程分级,即:一共有1000个无相关性的任务(任务号为0~999)需要分配给100个进程(逻辑进程号为0~99)并行执行。该100个进程分为3级,即:进程0为全局主进程,进程1和进程46为区域主进程,进程2~进程45、进程47~进程99为普通进程。其中,全局主进程(进程0)和区域主进程(进程1、进程46)具备任务分配能力。
参考图13中STEP501,全局主进程已经将任务号为0~99的任务分给了区域主进程-进程1,将任务号为100~199的任务分给了区域主进程-进程46,将任务号为200的任务分给了自身,因此全局主进程-进程0的待分配任务队列为任务号201~999的任务。
区域主进程-进程1将任务号为0的任务分配给了普通进程-进程2,...,将任务号为43的任务分配给了普通进程-进程45,将任务号为44的任务分配给了自身,因此区间主进程-进程1的待分配任务队列为任务号45~99的任务。
区域主进程-进程46将任务号为101的任务分配给了普通进程-进程47,...,将任务号为153的任务分配给了普通进程-进程99,将任务号为100的任务分配给了自身,因此区间主进程-进程46的待分配任务队列为任务号154~199的任务。
由于此时还没有完成的任务,所以断点文件为空。
继续参考图13的STEP502,全局主进程-进程0陆续完成了10个任务(任务号为200~209),在执行任务号为210的任务。因此,将已完成的任务号为200~209的10个任务记录到断点文件中。
继续参考图13的STEP503,区域主进程-进程46完成了向全局主进程-进程0请求的100个任务(任务号为100~199)。因此,将已完成的任务号为100~199的100个任务记录到断点文件中。
全局主进程-进程0又向区域主进程-进程46分配了90个任务(任务号为211~299),全局主进程-进程0的待分配任务队列为任务号为300~999的任务。
区域主进程-进程46为自身分配了任务号为211的任务,为其下一级的普通进程-进程47~99分配了任务号为212~264的任务,区域主进程-进程46的待分配任务队列为任务号为265~299的任务。
若在所有任务都执行完毕之前,全局主进程-进程0发生了故障,则会读取最近记录的断点文件,以恢复到最近的检查点,继续分配和执行在断点文件中未记录的尚未执行完毕的任务。
图14为本发明的并行任务动态分配方法的第六实施例的各阶段示意图。与第五实施例不同的是,本实施例所述具备任务分配能力的用户进程将本级待分配的并行任务排序,形成本级待分配任务队列之前,还包括了:进行初始化,将所有用户分级的步骤。
参考图14的STEP601,所述初始化包括:记录断点文件名为File,记录总任务数为1000个,以及记录任务块大小为1个。
继续参考图14的STEP602,本实施例中的1000个无相关性的任务(任务号为0~999)需要分配给100个进程(逻辑进程号为0~99)并行执行。
继续参考图14的STEP603,逻辑进程号0~99的100个用户进程被分为3级:第一级为1个全局主进程(进程0),第二级为2个区域主进程(进程1、进程46),第三极为97个普通进程(进程2~进程45、进程47~进程99)。具体分为多级的方法已在前述实施例中予以说明,此处不再赘述。此时,由于还没有完成的任务,所以断点文件File为空。
本实施例的其他步骤与图13所示的第五实施例基本一致,可参考第五实施例,此处不再赘述。
需要说明的是,通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请的部分或全部可借助软件并结合必需的通用硬件平台来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可包括其上存储有机器可执行指令的一个或多个机器可读介质,这些指令在由诸如计算机、计算机网络或其他电子设备等一个或多个机器执行时可使得该一个或多个机器根据本发明的实施例来执行操作。机器可读介质可包括,但不限于,软盘、光盘、CD-ROM(紧致盘-只读存储器)、磁光盘、ROM(只读存储器)、RAM(随机存取存储器)、EPROM(可擦除可编程只读存储器)、EEPROM(电可擦除可编程只读存储器)、磁卡或光卡、闪存、或适于存储机器可执行指令的其他类型的介质/机器可读介质。
本申请可用于众多通用或专用的计算***环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器***、基于微处理器的***、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何***或设备的分布式计算环境等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本发明通过基于排队论模型的多层动态任务分配模式,将动态任务分配服务分布至多个计算资源,降低了动态任务分配的代价,有效提高了任务分配服务的效率,从而避免了服务热点的产生,达到众多计算资源间的负载平衡。
本发明还通过对用户进程进行分组以形成树形排布,以更简化上级用户进程对下级用户进程以及对任务的管理。
本发明还通过在服务端记录当前任务分配的情况,在部分计算资源出现故障的情况下,将分配给故障资源的任务回收,重新分配至健康计算资源,以保证并行应用程序能够继续正确执行,提供了容错效率,同时将故障资源带来的影响局限于一定的范围。此外,断点文件的及时更新也能有效降低故障资源带来的损失。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
Claims (13)
1.一种并行任务动态分配方法,其特征在于,该方法适用于包括多级用户进程的并行***;所述多级用户进程包括主进程和普通进程,所述主进程包括全局主进程以及至少一级区域主进程,所述全局主进程、至少一级区域主进程和普通进程呈树状排布;其中,全局主进程为根结点,所述全局主进程记录所有任务的分配情况,并根据接收任务的用户进程返回的任务完成情况,记录断点文件;区域主进程为分支结点,所述区域主进程记录本级待分配任务的分配情况,并根据接收任务的用户进程返回的任务完成情况,向其上一级用户进程返回本级的任务完成情况;普通进程为叶子结点,所述普通进程向其上一级用户进程返回普通进程本身的任务完成情况;
该方法包括:
所述主进程将本级待分配的并行任务排序,形成本级待分配任务队列;
所述主进程接收下一级用户进程发送的任务请求消息及所请求的任务数量;
所述主进程从本级待分配任务队列的队首开始,按照下一级用户进程所请求的任务数量,为下一级用户进程分配任务,并更新本级待分配任务队列。
2.如权利要求1所述的并行任务动态分配方法,其特征在于,该方法还包括:
所述主进程从本级待分配任务队列的队首开始,根据所述主进程本身的处理能力,为主进程分配任务,并更新本级待分配任务队列;在为主进程分配任务的过程中,暂停为下一级用户进程分配任务。
3.如权利要求1或2所述的任一种并行任务动态分配方法,其特征在于,还包括:
若所请求的任务数量大于所述本级待分配任务队列中的任务数量,则所述主进程向其上一级用户进程发送任务请求消息及所请求的任务数量,在接收到上一级用户进程分配的任务后更新所述本级待分配任务队列。
4.如权利要求3所述的并行任务动态分配方法,其特征在于,该方法还包括:
若在所述用户进程接收并执行任务的过程中发生故障,则将发生故障的任务回收,并排到分配该任务的用户进程所管理的待分配任务队列的队尾,以重新参与任务分配。
5.如权利要求1所述的并行任务动态分配方法,其特征在于,在所述主进程将本级待分配的并行任务排序,形成本级待分配任务队列之前,还包括:
将所有用户进程按照全局主进程、至少一级区域主进程及普通进程分为多级用户进程。
6.如权利要求5所述的并行任务动态分配方法,其特征在于,所述将所有用户进程按照全局主进程、至少一级区域主进程及普通进程分为多级用户进程包括:
选取作为全局主进程的用户进程;
将其他用户进程分组;在各组内选取作为区域主进程的用户进程;
余下的用户进程为普通进程。
7.如权利要求6所述的并行任务动态分配方法,其特征在于,所述将其他用户进程分组包括:
将除全局主进程以外的用户进程分组以形成一级区域主进程;
或者将除全局主进程以外的用户进程分组以形成一级区域主进程,并在分组后形成的用户进程组内再进行逐级分组,以形成有上下从属关系的多级区域主进程。
8.如权利要求7所述的并行任务动态分配方法,其特征在于,
所述选取作为全局主进程的用户进程包括选取逻辑进程号最小的用户进程为全局主进程;
所述在各组内选取作为区域主进程的用户进程包括选择各组内逻辑进程号最小的用户进程为区域主进程。
9.如权利要求1所述的并行任务动态分配方法,其特征在于,该方法还包括:
若所述普通进程出现故障,则将分配给该普通进程的任务回收,并排到其上一级的区域主进程管理的待分配任务队列的队尾,重新参与任务分配;
若所述区域主进程出现故障,则将分配给该区域主进程的任务回收,并排到其上一级的用户进程管理的待分配任务队列的队尾,重新参与任务分配;并从该区域主进程下一级的用户进程中选择新的区域主进程,继续为下一级用户进程分配任务;
当所述全局主进程出现故障,从其下一级的区域主进程中选择新的全局主进程,读取所述断点文件,继续分配所述断点文件未记录的未完成任务。
10.如权利要求1所述的并行任务动态分配方法,其特征在于,在所述主进程将本级待分配的并行任务排序,形成本级待分配任务队列之前,还包括:
进行初始化;所述初始化包括:记录断点文件名、记录总任务数、记录任务块大小。
11.如权利要求10所述的并行任务动态分配方法,其特征在于,
所述普通进程一次请求的任务数量为一个任务块大小;
所述区域主进程一次请求的任务数量为一个任务块大小与其下级所有用户进程数的乘积。
12.如权利要求10所述的并行任务动态分配方法,其特征在于,在所述主进程将本级待分配的并行任务排序,形成本级待分配任务队列之前,还包括:为每个任务分配唯一的任务号;
所述分配任务包括:给出所分配任务的任务号。
13.如权利要求12所述的并行任务动态分配方法,其特征在于,还包括:
在全局主进程的待分配任务队列之后增加一结束标记;
当接收到的任务号为所述结束标记时,并行任务分配完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210438264.6A CN102929707B (zh) | 2012-11-06 | 2012-11-06 | 并行任务动态分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210438264.6A CN102929707B (zh) | 2012-11-06 | 2012-11-06 | 并行任务动态分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102929707A CN102929707A (zh) | 2013-02-13 |
CN102929707B true CN102929707B (zh) | 2015-10-07 |
Family
ID=47644515
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210438264.6A Active CN102929707B (zh) | 2012-11-06 | 2012-11-06 | 并行任务动态分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102929707B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105471595A (zh) * | 2014-06-09 | 2016-04-06 | 株式会社日立制作所 | 一种故障处理管理装置和管理方法 |
CN104793992B (zh) * | 2015-04-21 | 2018-05-01 | 浙江大学 | 一种基于任务分解的并行任务处理方法 |
CN104932936A (zh) * | 2015-06-05 | 2015-09-23 | 北京奇虎科技有限公司 | 数据处理方法与*** |
CN105573850B (zh) * | 2015-11-09 | 2018-12-28 | 广州多益网络股份有限公司 | 多进程交互方法、***和服务器 |
CN105607956B (zh) * | 2016-01-06 | 2019-06-04 | 北京京东尚科信息技术有限公司 | 一种计算机中的任务分配方法及*** |
CN107133086B (zh) * | 2016-02-29 | 2020-09-04 | 阿里巴巴集团控股有限公司 | 基于分布式***的任务处理方法、装置和*** |
CN106055401B (zh) * | 2016-06-13 | 2019-02-26 | 北京唯智佳辰科技发展有限责任公司 | 海量计算粗颗粒并行的自动启停及计算任务动态分配方法 |
CN108241534A (zh) * | 2016-12-27 | 2018-07-03 | 阿里巴巴集团控股有限公司 | 一种任务处理、分配、管理、计算的方法以及装置 |
CN107992356B (zh) * | 2017-12-13 | 2021-09-14 | 深圳壹账通智能科技有限公司 | 区块链事务区块处理方法、电子装置及可读存储介质 |
CN108198027A (zh) * | 2017-12-29 | 2018-06-22 | 珠海国芯云科技有限公司 | 基于物联网的超市智能排队结算顺序调度方法及装置 |
CN108197808B (zh) * | 2017-12-29 | 2023-10-20 | 广东溢达纺织有限公司 | 生产任务分配方法、装置和*** |
CN108984297A (zh) * | 2018-06-28 | 2018-12-11 | 中国建设银行股份有限公司 | 任务执行方法及装置 |
CN108900631B (zh) * | 2018-07-27 | 2021-11-16 | 创新先进技术有限公司 | 一种消息分配方法、装置及分布式*** |
CN110990165B (zh) * | 2019-11-15 | 2020-10-09 | 北京连山科技股份有限公司 | 多路并发传输***中多用户同时工作的方法及传输服务器 |
CN113448719B (zh) * | 2020-03-27 | 2024-06-18 | 北京沃东天骏信息技术有限公司 | 分布式任务处理*** |
CN111583003B (zh) * | 2020-05-08 | 2022-03-29 | 国网吉林省电力有限公司 | 一种资金集中管控过程中海量财务处理事务并行执行方法 |
CN115118768B (zh) * | 2022-06-27 | 2024-07-02 | 平安壹钱包电子商务有限公司 | 一种任务分发方法、装置、存储介质及电子设备 |
CN117851076B (zh) * | 2024-03-08 | 2024-05-28 | 中国电子信息产业集团有限公司第六研究所 | 一种硬件资源的调度方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101069161A (zh) * | 2004-12-01 | 2007-11-07 | 索尼计算机娱乐公司 | 调度方法、调度装置和多处理器*** |
CN101887367A (zh) * | 2010-06-22 | 2010-11-17 | 天津大学 | 一种多级并行化编程方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9390130B2 (en) * | 2008-12-12 | 2016-07-12 | Hewlett Packard Enterprise Development Lp | Workload management in a parallel database system |
-
2012
- 2012-11-06 CN CN201210438264.6A patent/CN102929707B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101069161A (zh) * | 2004-12-01 | 2007-11-07 | 索尼计算机娱乐公司 | 调度方法、调度装置和多处理器*** |
CN101887367A (zh) * | 2010-06-22 | 2010-11-17 | 天津大学 | 一种多级并行化编程方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102929707A (zh) | 2013-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102929707B (zh) | 并行任务动态分配方法 | |
Polo et al. | Performance-driven task co-scheduling for mapreduce environments | |
US9542223B2 (en) | Scheduling jobs in a cluster by constructing multiple subclusters based on entry and exit rules | |
CN103534687B (zh) | 聚簇数据格网中的可扩展集中动态资源分配 | |
JP6241300B2 (ja) | ジョブスケジューリング装置、ジョブスケジューリング方法、およびジョブスケジューリングプログラム | |
CN103180830B (zh) | 中央处理器资源分配方法和计算节点 | |
CN105573660B (zh) | 用于改善分簇磁盘阵列的性能的方法和装置 | |
CN107864211B (zh) | 集群资源调度方法及*** | |
CN111538586A (zh) | 集群gpu资源管理调度***、方法以及计算机可读存储介质 | |
US10333859B2 (en) | Multi-tenant resource coordination method | |
CN110249311A (zh) | 云计算***中针对虚拟机的资源管理 | |
WO2011148563A1 (ja) | 情報処理システム | |
CN109783237A (zh) | 一种资源配置方法及装置 | |
CN103197976A (zh) | 异构***的任务处理方法及装置 | |
CN103946831A (zh) | 用于模板的成本感知的选择以供应共享资源的***、方法和程序产品 | |
CN103699334A (zh) | 用于管理虚拟机磁盘的方法和*** | |
CN104317742A (zh) | 一种优化空间管理的自动精简配置方法 | |
CN103810047A (zh) | 动态改善逻辑分区的存储器亲和性 | |
JP5672386B2 (ja) | 計算機およびリソース検索方法 | |
CN103297499A (zh) | 一种基于云平台的调度方法及*** | |
JP2021056955A (ja) | 分散型ストレージシステム及びデータ移動方法 | |
CN112269641A (zh) | 一种调度方法、装置、电子设备及存储介质 | |
CN110119405B (zh) | 分布式并行数据库资源管理方法 | |
CN114356543A (zh) | 一种基于Kubernetes的多租户机器学习任务资源调度方法 | |
JP2022539955A (ja) | タスクスケジューリング方法及び装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |