基于申威芯片架构并行文件读取的数据预处理方法与流程

文档序号:16736133发布日期:2019-01-28 12:38阅读:211来源:国知局
基于申威芯片架构并行文件读取的数据预处理方法与流程

本发明涉及科学计算领域中的并行io技术,尤其涉及一种基于申威芯片架构并行文件读取的数据预处理方法。



背景技术:

科学及工程应用计算对计算资源的需求较大,且随着求解问题规模的不断增大,后摩尔时代的单机处理能力难以为继。为解决科学应用中所需计算力紧缺的问题,一种可行的方案是将科学应用移植到超算平台,借助超算平台提供大规模并行计算的优势。神威太湖之光是世界首台峰值运算速度超过10亿亿次量级的超级计算机,基于此平台并行优化的高性能应用已经连续两年夺得高性能应用领域最杰出的奖项——戈登贝尔奖。将科学计算应用程序移植到国产平台神威太湖之光,不仅可以利用神威太湖之光的超高计算能力,而且有助于建设国产超算平台的软件生态环境。

神威太湖之光采用的芯片为国产申威芯片,其内存架构为:一块申威处理器拥有32g内存,并提供两种内存运行模式,全片内存共享模式以及内存私有模式。在全片共享模式中,芯片中的四个核组共享32g内存;在私有模式中,每个核组拥有各自对应的8g内存。

移植到神威平台上的科学计算应用程序通常采用内存私有模式,即每个核组独占8g内存,这样的内存划分使得每个核组负载基本均衡,得以充分利用从核阵列的计算能力,从而提高计算效率。另外神威平台中的高速计算存储系统为自主研发的online1与online2,然而其目前并没有提供高层io库,比如hdf5和netcdf等,所以开发人员需要自主进行数据的切分与分发操作。

科学计算应用程序通常是对多维数学模型的求解,其热点通常为最近邻计算。最近邻计算中,每个计算节点对应的数据在文件中是不连续排布的,所以进程读取数据时,需要考虑数据在文件中的偏移量以及数据在文件中排布的特点。

神威平台对这种大规模并行计算中不连续数据文件的读取,主要有三种mpi(信息传递接口)方式:传统的mpi-1主从通信方式、mpi-2提出的mpi-io协同方式以及改进的mpi-io方式,其中:

(1)mpi-1主从通信方式:主进程读取数据文件,将所读取到的数据切分并通过调用mpi进程间通信函数分发给其他进程。这种主从通信方式实现较为繁琐,主从进程间通信次数频繁,且在通信过程中大部分进程处于闲置状态,导致资源的闲置,故这种方式适用于并行规模较小的情况。

(2)mpi-io协同方式:mpi-2提出了一套并行i/o接口,实现了进程间并行读写文件的方法。此方法采用了文件视图,进程可以并行地对不连续的数据进行读取。相对于mpi-1的主从通信方式,此方式消除了进程间通信的开销,整体提高了进程读取数据的速率,故这种方式适用于并行规模较大的情况。然而随着并行规模的进一步扩大,mpi自身实现的缺陷,导致性能会急剧下降。

(3)改进的mpi-io方式:对(2)中读取数据方式的一种改进是将进程分组,每组包含一定的进程数,组内又分为组主进程和组从进程,各个组主进程调用mpi-io读取文件数据,然后将数据分别通过mpi进程间通信方式传递给组从进程。对进程进行分组的方式有效降低了并行读取数据的进程规模,但是只有组主进程读取数据又导致了其读取数据量过大,从而加剧了其对内存的需求。由于大规模并行计算通常采用内存独占方式来提升计算效率,组主进程读取数据的大小受到限制,进而被迫使用过多的进程采用协同方式读取文件数据,这在很大程度上抵消了分组读取数据的效率。同时,由于组从进程对应的数据在组主进程中不连续的排布的特点,组主进程还需要进行非常的繁琐的数据分发工作。另外在实际开发过程中,并不是随时都有充足的闲置资源来满足超大规模并行计算,因此降低大规模并行计算时对数据读取的时间,具有现实意义。

目前,急需一种针对神威太湖之光平台下,对大文件的读取效率低下的解决方法。



技术实现要素:

本发明提供了一种基于申威芯片架构并行文件读取的数据预处理方法,可大大提高大文件的读取效率。

本发明提供了如下技术方案:

一种基于申威芯片架构并行文件读取的数据预处理方法,包括以下步骤:

(1)将内存运行模式设置为全片共享模式;

(2)预处理进程读取数据文件的元数据信息,根据所述的元数据信息对计算进程进行分组;

所述元数据信息包括数据文件的维度以及每个维度的长度、计算进程数以及每个计算进程需要读取的数据大小;

(3)预处理进程根据计算进程分组信息,建立对应的mpi模型,调用mpi-io并行读取函数读取数据文件;

(4)对预处理进程所读取的数据进行维度转化,使对应计算进程组中每个计算进程所对应的数据块连续排布;将维度转化后的数据写回到对应的计算进程组对应的数据文件中,并建立对应的元数据文件。

所述的数据预处理进程数小于计算进程数。本发明的预处理方法适用于基于申威芯片架构的神威太湖之光超算平台。

在本发明的数据预处理方法中,将并行计算阶段拆分为两个阶段,一个是数据预处理阶段、另一个是计算阶段。计算阶段负责求解科学计算问题,数据预处理阶段负责对大文件数据进行预处理,将计算阶段对大文件的读取改为对一组小文件的读取。因为数据预处理阶段中的mpi进程数少于计算阶段中的mpi进程数,相对于计算阶段,数据预处理阶段只需要较少的计算资源。数据预处理阶段中的进程称为预处理进程,计算阶段中进程称为计算进程。本发明的数据预处理方法主要针对数据预处理阶段。

步骤(1)中,将内存运行模式设置为全片内存共享模式后,各个核组占用节点内全部内存资源。

步骤(2)中,所述元数据信息包括数据文件的维度、每个维度的长度以及数据类型,还包括计算进程数以及每个计算进程需要读取的数据大小;所述数据大小包括数据对应在每个维度上的长度。

进一步的,步骤(2)包括:

(2-1)预处理主进程读取数据文件的元数据信息;

(2-2)将一个计算进程需要读取的数据作为一个数据块,将数据文件划分成若干个数据块,将数据文件抽象成一个网格;该网格每个维度上数据块的个数作为该网格维度的长度;

(2-3)对计算进程进行分组:

(a)确定计算进程组数:

设计算进程总数为k,预处理进程总数为m;

从m到1,按照从大到小的方式逐步调整m值,每次调整幅度为1,直至m为k的约数,停止,将此m值作为计算进程组数;

(b)对计算进程组数m做质因数分解,并按降序排列分解出的质因数;

(c)将质因数分配至合适的网格维度上:

每次寻找长度最大的网格维度,按照从大到小的顺序依次选择质因数;

若最大网格维度的长度是该质因数的倍数,则将该网格维度的长度更新为该网格维度的长度与该质因数的商,将该质因数置为0;

若最大网格维度的长度不是该质因数的倍数,则按照从大到小的顺序选择下一质因数;

(d)重复步骤(c),直至将所有的质因数分配完毕;若没有质因数分配到某个网格维度,则默认该网格维度上分配的质因数为1;

(e)每个网格维度的长度除以该网格维度上所分配的质因数之积,所得的商为一个计算进程组在该网格维度上的计算进程数,得到计算进程组的空间关系,以此对计算进程进行分组;

(2-4)预处理主进程将元数据信息和计算进程分组信息广播给其他预处理进程。

步骤(3)包括:

(3-1)预处理进程根据计算进程组的空间关系,建立对应维度和维度长度的笛卡尔通信域;

根据预处理进程在笛卡尔通信域中的坐标,每个预处理进程对应着一个计算进程组。

需要注意,在笛卡尔通信域中,预处理进程数等于计算进程组数m;笛卡尔通信域中一个预处理进程待读取的数据对应着一个计算进程组待读取的数据。

(3-2)根据元数据信息中数据类型、维度以及每个维度的长度,笛卡尔通信域中的预处理进程建立对应的mpi数据类型和文件视图;

(3-3)笛卡尔通信域中预处理进程调用mpi-io函数并行读取数据文件。

步骤(4)中,所述的维度转化是指:在预处理进程对应的计算进程组中,按照计算进程的空间关系,将该预处理进程所读取的数据顺序排布。

维度转化使得一个计算进程组中,一个计算进程所对应的数据块是连续排布的,这样计算进程在读取数据时可以连续读取所有需要的数据,避免计算进程之间交叉读取数据,降低了计算进程组中的通信次数。

进一步的,步骤(4)中,对预处理进程所读取的数据块进行维度转化具有两种方式:

(i)在预处理进程的内存中,对数据块的存放顺序进行维度转化,使一个计算进程所对应的数据块连续排布;

或,(ii)在将预处理进程中的数据写回到各计算进程的数据文件过程中,将一个计算进程所对应的所有数据块写回完成后,再写回下一计算进程所对应的所有数据块,直至数据写回完成。

在(i)方式中,维度转化在预处理进程的内存中进行,适用于预处理进程内存压力较小的情况。在(ii)方式中,在预处理进程的内存中不进行重新排布,重新排布发生在写回过程中,根据所述的映射关系,选取一个计算进程所对应的所有数据块,连续写回至该计算进程的数据文件中,该计算进程所对应的所有数据块写回完成后,再按照同样的方法写回下一计算进程所对应的所有数据块,直至完成所有数据块的写回操作。在(ii)方式中,重新排布不占用预处理进程的内存,适用于预处理进程内存压力较大的情况。

进一步的,步骤(4)中,所述的元数据文件包括:计算进程组中每个计算进程所对应数据的起始位置以及数据量、数据类型。

与现有技术相比,本发明的有益效果为:

(1)通过采用全片内存共享模式读取文件数据,将数据的读取从独占模式中仅有的8gb内存提升到数据预处理方法可使用的32gb内存,并减少mpi-io并行读取数据的进程数,进而提高了性能;

(2)对预处理阶段中获取的数据进行维度转化,mpi-io获取的数据对于计算阶段中的进程并不是连续存储的,预处理进程根据对应的计算进程组中,依次将计算进程对应的不连续的数据排布改为连续存储,这简化了计算阶段中计算进程对数据的读取操作,降低了计算进程组中的通信次数;

(3)每个预处理进程将其所读取到的数据写入到其对应的小文件中,并为每个小文件创建对应的元数据文件。在计算阶段中每个小文件对应一组计算进程。本发明将大规模同时读取一个文件,转化成每组计算进程分别读取一个小文件,消除了计算阶段中大规模调用mpi-io对同一个文件读取数据的操作。

附图说明

图1为本发明数据预处理方法的流程示意图;

图2为对计算进程进行分组的流程示意图;

图3为数据读取的流程示意图;

图4为数据写回流程示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步详细描述,需要指出的是,以下所述实施例旨在便于对本发明的理解,而对其不起任何限定作用。

本发明基于申威芯片架构并行文件读取的数据预处理方法,包括以下步骤:

(1)将内存运行模式设置为全片内存共享模式;

(2)预处理进程根据待读取文件的元数据信息,对计算进程进行分组。

(3)建立对应mpi模型以及预处理进程与计算进程组的映射关系,并行读取数据文件。

(4)对数据进行维度转化并写回到对应的计算进程组对应的数据文件,创建数据文件对应的元数据文件。

假设,待读取文件是大小为1024×1024的二维矩阵,计算进程规模为16×16,预处理进程规模为4×4,每个计算进程获取一个小的二维矩阵,即一个计算进程获取64×64的子矩阵,一个预处理进程读取的数据对应着4×4个计算进程读取的数据。

本发明的预处理方法通过四个模块实现:大内存开启启动模块、映射关系模块、数据读取模块、维度转化模块,其流程如图1所示,包括以下步骤:

(1)大内存开启启动模块中提交命令中包含-master选项,一个预处理进程独占32gb内存。

(2)映射关系模块中建立预处理进程和计算进程组的对应关系,如图2所示。具体步骤如下:

(2-1)根据元数据信息可知数据维度为2,每个维度的长度为1024,计算进程数为16×16个。

每个计算进程待读取的数据量为64×64,对应在二维矩阵上的各个维度长度皆为64。

(2-2)对计算进程进行分组,方法以如下的伪代码进行表达:

计算进程分组数为m,每个进程组对应在空间维度上的长度保存在l[0...n-1]中。

数据文件存储二维矩阵,每个维度的长度为1024,每个计算进程对应着64×64的子矩阵,以64为每个维度的单位长度,将数据文件抽象成每个维度长度为16的二维空间,根据伪代码可知计算进程组数为16,每个计算进程组对应每个维度的长度为4,即每个计算进程组在每个维度上包含4个计算进程。

(2-3)将计算进程分组信息以及数据信息广播给其余预处理进程。

(3)在数据读取模块中,根据待读取文件的元数据内容,调用mpi-io对待读取文件进行并行读取,如图3所示。具体步骤如下:

(3-1)根据计算进程组之间的空间关系,建立对应的二维mpi笛卡尔通信域,每个维度的长度为4,根据二维坐标每个预处理进程对应一个计算进程组的数据。二维空间上的每个点对应着一个预处理进程。

(3-2)每个预处理进程根据每个维度的待读取数据的长度和数据类型建立对应的数据结构(mpi_type_create)以及文件视图(mpi_file_set_view)。

(3-3)调用mpi-io并行读取函数(mpi_file_read_at_all或mpi_file_read_all等函数)读取数据文件。

(4)数据写回模块将每个预处理进程中数据进行维度转化并写回到对应计算进程组的数据文件中,并创建对应的元数据文件,如图4所示。具体步骤如下:

(4-11)如果预处理进程中内存压力大,那么在数据写回模块中,按对应的计算进程组内序号顺序,依次将每个计算进程对应的数据写入该计算进程组的数据文件;

(4-12)如果预处理进程中内存压力不大,那么根据计算进程组中序号大小,重新排布内存中的数据,使得一个计算进程对应的数据由二维的不连续排布,变为连续的排布。

(4-2)预处理进程为对应的计算进程组创建元数据文件,元数据文件中包括对应计算进程组中每个进程对应数据的起始位置以及偏移量,还有数据类型信息。

以上所述的实施例对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的具体实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。

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