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

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

本发明属于高性能计算领域,尤其涉及一种任务处理方法及装置。



背景技术:

随着大数据时代的不断发展,大规模数据对于科学计算与科学统计起着关键作用,而矩阵乘是大型科学计算中较为普及的一种算法。并且随着数据集的增加和计算复杂度的提升,科学实现中对算法性能的要求也越来越高,算法性能的提升对推进工程、项目的研究进度起着至关重要的作用,而限于计算机硬件资源内存、计算速度等的限制,对于完成某个大规模矩阵的运算,单台机器上实现往往需要数十天甚至数月的时间,并且对于内存容量较小的计算平台,其能力不足以支撑大规模数据集的存储,严重情况下往往会导致程序的崩溃,从而限制了大规模数据集计算的实现。

传统的矩阵算法实现一般基于单个计算节点上各矩阵元素的乘积依次求和,且采用串行的计算方式,即顺序读取数据,等待前一步计算完成才开始下一步的计算。假如所要计算的矩阵规模为上万阶,采用串行方式实现两个矩阵相乘法所带来的时间复杂度及所消耗的成本可想而知。

因此,迫切需要提供一种高效、低成本的任务处理方案来解决上述技术问题。



技术实现要素:

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

本发明实施例提供一种任务处理方法。上述方法包括以下步骤:通过多个数据节点并行读取对应的矩阵子数据集并分别将所述矩阵子数据集的计算任务划分为多个子任务即多个子矩阵块;

所述数据节点将所述子矩阵块分配至对应的计算节点并由所述计算节点执行并行计算。

本发明实施例提供一种任务处理装置,包括读取模块、划分模块、分配计算模块;其中,所述读取模块通过所述划分模块与所述分配计算模块相连;

所述读取模块,用于通过多个数据节点并行读取对应的矩阵子数据集;

所述划分模块,用于分别将所述矩阵子数据集的计算任务划分为多个子任务即多个子矩阵块;

所述分配计算模块,用于将所述子矩阵块分配至对应的计算节点并由所述计算节点执行并行计算。

通过以下方案:通过多个数据节点并行读取对应的矩阵子数据集并分别将所述矩阵子数据集的计算任务划分为多个子任务即多个子矩阵块;所述数据节点将所述子矩阵块分配至对应的计算节点并由所述计算节点执行并行计算即文件的并行读取和任务的并行执行,实现了高效、低成本的任务处理,大大增强了用户体验。

通过以下方案:所述子矩阵块包含大于1的行数且行数为连续,使得计算节点将计算结果一次性发送给数据节点,减少了通信次数,从而减少通信开销。

附图说明

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

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

图2所示为本发明实施例2的设计架构图;

图3所示为本发明实施例3的主从进程任务分配实施过程图;

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

具体实施方式

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

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

步骤101:通过多个数据节点并行读取对应的矩阵子数据集并分别将所述矩阵子数据集的计算任务划分为多个子任务即多个子矩阵块;

进一步地,通过多个数据节点并行读取对应的矩阵子数据集的过程为:

多个数据节点分别通过对应的数据读取主进程打开存放矩阵的文件,返回一个文件句柄;

计算每个数据读取主进程对应的矩阵文件中的偏移量,获得每个数据读取主进程所要读取的矩阵子数据集在矩阵文件中的逻辑位置;

所述数据读取主进程根据所要读取的矩阵子数据集在矩阵文件中的逻辑位置,读取对应的矩阵子数据集。

优选地,多个数据节点并行读取对应的矩阵子数据集后,存储于内存中。

进一步地,所述数据节点根据计算节点数量,将所述矩阵子数据集平均划分为多个子矩阵块并发送至对应的计算节点。

优选地,所述子矩阵块包含大于1的行数且行数为连续。

若所述数据节点读取的矩阵子数据集的行数为m,计算节点个数为child_process,则分配每个计算节点per_rank=m/child_process行,

对于余下的extra=m%child_process行,将extra行平均分配到1至extra号计算节点,1至extra号计算节点每个进程增加一行。

步骤102:所述数据节点将所述子矩阵块分配至对应的计算节点并由所述计算节点执行并行计算。

进一步地,所述计算节点完成所述子矩阵块的计算后,将计算结果发送至对应的数据节点。

进一步地,从所述数据节点中选择一个数据节点,作为用于统计的数据节点;

所述用于统计的数据节点对从其他数据节点中获取的计算结果进行汇总并存储。

本发明实施例所提出的方法一方面通过并行文件读取的方式将大规模数据集划分成众多矩阵子数据集,解决内存限制问题,另一方面通过将矩阵子数据集的计算任务划分为多个子任务,实现多个计算子任务的并行执行,从而提高算法基于大规模数据集下的计算效率。

(1)对于大规模数据集的处理,采用并行文件读取的方式,利用并行文件i/o技术,当矩阵存放于文件中,在集群多节点情况下,选择几个节点作为数据节点从文件中通过指定显示偏移,读取文件中不同位置的数据,将大矩阵数据集划分,每个数据节点从矩阵文件中获取整个矩阵数据集的一部分子集,如果多个数据节点并行读取数据则这多个节点可同时作为mpi主进程进行数据分发与管理。这种方式一方面可解决矩阵规模太大,单节点内存不足以存储整个矩阵容量的问题,同时又利用并行文件偏移地址读取的方式实现各数据节点并行读取数据,提高文件的访问效率。

(2)对于串行矩阵计算效率低下的问题,采用多个子任务划分的方式,在集群多节点系统中,利用mpi多进程通信技术将(1)中各数据节点并行读取的矩阵子数据集的计算任务划分成多个子任务,即将矩阵划分为多个子矩阵块,分配至不同的进程处理,处理子矩阵块的进程所在的节点为计算节点(主进程所在的节点为数据节点,从进程所在的节点为计算节点),各计算节点间的计算任务并行执行。

本发明实施例提供一套有效的主进程、从进程协同管理方法,主进程完成任务的划分、数据的分发与搜集工作,从进程完成子数据集的并行计算,若有多个数据节点并行读取数据,则可以认为有多个主进程,每个主进程负责多个从进程(即每个数据节点负责多个计算节点)。

(3)本发明实施例所提出的矩阵乘优化方法可运行于大规模集群平台,利用mpi技术,针对大规模数据集,采用多个数据节点并行文件读取的方式,通过设置偏移地址,不同数据节点同时获取文件不同位置的子数据集,这样既可提高文件读取效率,又解决了单节点内存有限不足以存储整个数据集的问题。同时为了提高算法的计算效率,利用mpi多进程协同合作的方式,将某一矩阵数据集的计算任务划分为多个子矩阵块的计算,各从进程负责其中某一子矩阵块,各从进程间并行完成对应子矩阵块的计算。

(4)本发明实施例的显著特点是在大规模集群系统中,针对大规模数据集,在单节点机器不足以存储整个数据集的情况下,设置多个数据节点并行读取对应子数据集,对于不同数据节点中的矩阵数据,划分为多个子矩阵块,子矩阵块被分配至多个计算节点并行完成不同子矩阵块的处理,各节点间协同工作,最后由数据节点统一完成通信的管理与结果数据的整理。

下面进行详细说明:

基于集群系统的大规模矩阵乘的优化方法中,分为数据节点与计算节点,当单个节点内存不足以存储数据集时,多个节点采用并行文件工/o的方式,文件中通过指定显示偏移不同节点读取文件中不同位置的数据,这些节点称为数据节点。不同于传统的mpi程序,本发明实施例所实现的mpi程序中存在多个“主进程”,即数据节点中并行读取文件的每个进程我们称为主进程,为了提高计算效率,各主进程将所获得的子数据集再次划分(及将数据节点中的矩阵子数据集划分为多个子矩阵块),分配至相应计算节点(从进程所在的节点我们称为计算节点),多个计算节点获取子矩阵块后并行执行计算,替代矩阵划分之前的串行计算,通过两次并行(数据读取并行与数据计算并行)与两次划分(大规模数据集划分为子数据集与矩阵块划分为子矩阵块),实现基于集群平台大规模矩阵乘的算法优化。本发明实施例的实现框架如图2所示,各个数据节点从数据库中获取矩阵子数据集即sub_dataset;各数据节点负责不同的计算节点(计算节点获取对应的子矩阵块,例如:sub1,并将计算结果res返回给对应的数据节点),最后的计算结果由其中一个数据节点进行统一汇总(res_dataset)和存储。

多个数据节点(即多个数据读取主进程)并行读取文件的实施方式如下,首先调用mpi_file_open(comm,filename…),每个进程都打开存放矩阵的文件,返回一个文件句柄,各个进程对文件的操作都通过句柄来实现。计算每个进程对应矩阵文件中的偏移量,得到每个进程所需数据在矩阵文件中的逻辑位置,这样各个进程(数据节点)可获取矩阵数据集的一部分(即子数据集),各数据读取进程通过调用mpi_file_read_at()分别读文件中矩阵的不同部分,这样每个数据节点将获取的子矩阵数据集存放于各自内存中进行下一步计算操作。

前面提到,本发明实施例所实现的方法中是利用mpi多进程技术将数据集二次划分,第一次划分是多个数据节点(主进程)并行读取大规模数据集中的子数据集并存储于内存中,第二次划分即数据节点将矩阵子数据集再次划分为多个子矩阵块,各子矩阵块的计算被分配至对应的计算节点(从进程),计算节点之间并行执行子矩阵块的计算,实现将一个大规模数据集的串行计算转换为为多个计算节点针对子矩阵块的并行计算。在多个数据节点并行读取数据集的条件下,每个数据节点对应多个计算节点,数据节点作为一个主进程将矩阵子数据集平均划分为多个子矩阵块发送至相应计算节点(计算节点作为从进程),计算节点在并行完成子矩阵块的计算后,将计算结果统一发送至对应数据节点,各数据节点完成数据的分配和搜集,最后选择一个数据节点完成结果数据的汇总与存储。

对于数据节点(主进程)划分子矩阵块至计算节点(从进程)实现并行计算的实施过程如图3所示,主要包括以下关键点:

主进程进行子矩阵块平均划分,并发送连续数行数据至从进程;

从进程并行计算子矩阵块,计算结果发送至主进程;

主进程接收从进程的反馈数据,结果汇总与存储。

另外,在子矩阵块划分与发送过程中,为保证内存连续读取,主进程发送给每个从进程的数据都需是矩阵中连续的几行,各从进程接收主进程数据后进行计算,然后将计算结果一次性发送给主进程,这样可减少通信次数,从而减少通信开销。对于余数的处理,若当前矩阵行数为m,从进程个数为child_process,则首先每个从进程会得到per_rank=m/child_process行,对于余下的extra=m%child_process行,为保证各进程处理的负载均衡,将extra行平均分配到1至extra号进程,1至extra号进程每个进程增加一行,即主进程向1至extra号从进程每个发送m/num_process+1行数据,向extra至child_process进程发送m/child_process行数据。

图4所示为本发明实施例4的任务处理装置结构图,包括读取模块、划分模块、分配计算模块;其中,所述读取模块通过所述划分模块与所述分配计算模块相连;

所述读取模块,用于通过多个数据节点并行读取对应的矩阵子数据集;

所述划分模块,用于分别将所述矩阵子数据集的计算任务划分为多个子任务即多个子矩阵块;

所述分配计算模块,用于将所述子矩阵块分配至对应的计算节点并由所述计算节点执行并行计算。

进一步地,所述子矩阵块包含大于1的行数且行数为连续。

通过以下方案:通过多个数据节点并行读取对应的矩阵子数据集并分别将所述矩阵子数据集的计算任务划分为多个子任务即多个子矩阵块;所述数据节点将所述子矩阵块分配至对应的计算节点并由所述计算节点执行并行计算即文件的并行读取和任务的并行执行,实现了高效、低成本的任务处理,大大增强了用户体验。

通过以下方案:所述子矩阵块包含大于1的行数且行数为连续,使得计算节点将计算结果一次性发送给数据节点,减少了通信次数,从而减少通信开销。

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

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