如何在函数里面进行MPI分步计算?

如何在函数里面进行MPI分步计算?,第1张

刚接触MPI,说说自己的看法。

文件读取和初始化 *** 作可以在MPI_Init之前执行的。建议核心函数还是放在MPI结构中辩拦衫。如

void preProcess()//执行文件读取和初始衡桥化携腔 *** 作

MPI_Init(&argc,&argv)

...

    core(*,*,*...)//参数中应该含有进程id,这样core函数就并行化了

...

其实文件读取和初始化 *** 作也是可以并行实现的,目前还不会。

mpi的意思信息传递接口;多点接口;作业指导书;磁粉检验等。

MPI是一个多义词,mpi的意思有:信息传递接口;多点接口;作业指导书;磁粉检验;最大允许进入量(吸入量,输入量);平均d着点洞敬;平均撞击点等等。MPI是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。

MPI是一个信息传递应用程序接口,包括协议和和语义说明。MPI是多点接口的简称,是西门子公司开发的用于PLC之间通讯的保密的协议等。

MPI是作业指导书,指的是在外企里为指导作业员能够按要求进行加工都要由相关的工程师做一些作业指导书来进行指导,以便产线在换人或换线时仍能正确 *** 作的一种文件。

双语例句:

1、纳吵慎The numerical experiments for the algorithm on MPI environment based on LAN are made.

分析了算法的复碰答杂性,给出了基于局域网的MPI异构环境下数值实验结果。

2、The parallel version of the Linpack benchmark requires that an MPI library be installed.

基准的并行版本要求安装一个 MPI库。

3、OpenMP for mixed MPI and parallel matrix multiplication to solve the problem.

并行矩阵乘法,用于mpi和openMP混合并行求解矩阵乘法问题。

4、The hesitation effects of large injection mould are researched and analysed based on MPI.

利用专业模流分析软件MPI对大型注塑模具的滞流效应进行了分析、研究。

5、Batch mode: Via MPI, using the MPI4PY wrappers on a cluster

批处理模式:通过MPI,在集群上使用MPI4PY包装器。

在 上一篇 中我们介绍了 mpi4py 中的文件互 *** 作性,下面我们将介绍 mpi4py 中获得高性能 I/O 的方法和建议。

MPI 在底层实现中可充分利用集合 *** 作和非连续数据读/蚂简咐写进行面向文件系统/设备的特殊优化。因此使用 MPI I/O *** 作,最重要的就是要活用其提供的几个特征:单次非连续数据访问,集合 *** 作,非阻塞 *** 作,理解并灵活设置适合文件系统特征的各 hint,等。

由于底层可能提供的优化措施,应尽量使更多的进程参与 I/O *** 作而不是将其集中在一个进程上。对非连续 I/O,应定义相应的派生数据类型描述“非连续性”,进而再利用集合 *** 作让多个进程一起提交数据 I/O 请求。通常情况下应用程序都有自己的计算模式进而也可找出其 I/O 访问特征,要针对不同的 I/O 特征结合底层硬件设计相应的执行模型。对相同的 I/O 访问特征,也能以不同的发起方式提交给 I/O 系统,比如说使用哪一个具体的读/写方法及怎样调用该读/写方法等。

一般可以将 I/O 访问模式分为 4 个级别

我们以一个具体的例子来讲解这四个不同的访问级别。考虑一个以块状形式分布在16 个进程上的二维数组,具体的分布情况如下图所示:

这个数组作为一个整体以行优先的顺序存储在一个文件中,如上图所示,文件中首先是 0 号进程本地子数组的第一行,紧接着是 1 号进程本地子数组的第一行,然后是 2 号进程本地子数组的第一闷纯行,然后是 3 号进程本地子数组的第一行,接下来是 0 号进程本地子数组的第二行,1 号进程本地子数组的第二行,等等。现在每个进程要从这个文件中读取该进程本地的数据。可以看出,每个进程的本地数据都是以不连续的小块方式存储于文件的不同位置。

对这个例子,4 个级别的访问模式分别为:

级别 0:各个进程按照类似 Unix/Linux 中 I/O *** 作方式独立地一次读取本地子数组的一行。具体来说,像下面这样:

级别 1:基本同级别 0,不过采用集合 I/O *** 作。具体来说,像下面这样:

级别 2:各个进程定义派生数据类型作为 filetype 描述数据分布方式,然后独立访问自己负责的数据块。具体来说,像下面这样:

级别 3:基本同级别 2,不过采用集合 I/O *** 作。具体来说,像下面这样:

这 4 个级别的访问模式代表着逐步更多数据量的单次 I/O 请求,就像下图所示:

每次 I/O 请求的数据量越大,MPI 实现就有更大的机会来产生更高的性能。因此只要可能,用户应该尽量使用级别 3 的数据访问模式。

当应用程序的每个进程只需要访问文件中单独一整块连续的数据,级别 0 和级别 2 将变的等价,级别 1 和级别 3 也等价,此时用咐宴户没有必要定义派生数据类型,直接使用级别0 或级别 1 也能取得高的性能。

有了上述讨论的访问特征信息,MPI IO 的底层实现可实施如下优化:

下面给出使用例程。

运行结果如下:

以上介绍了 mpi4py 中获得高性能 I/O 的方法和建议,在 下一篇 中我们将介绍 mpi4py 并行读/写 numpy npy 文件的方法。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12269081.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存