当前位置: 首页 > 并行计算基础 > 正文

MPI 几个重要的的API

MPI_Allreduce:

在之前的积分计算中,我们的方法是将最终结果汇聚到0号进程中,但是如何让每一个进程都能保存最终的结果呢?

MPI 提供了这样的一个函数MPI_Allreduce.

2017-01-25 22-40-09 的屏幕截图

这个操作与MPI_reduce 相同,只是少了dest_process 参数,因为所有的进程都能接受到这个结果。

 

广播:

字面意思,在一个集和通信中,如果属于一个进程的数据被发送到通信子中所有的进程,这样的集和通信就叫做广播。

MPI 提供这样的一个广播函数。

2017-01-25 22-45-17 的屏幕截图

简单来说,进程号为source_proc 的进程将data_p 所引用的内存内容发送给了通信子COMM中的所有进程。

例如一个修改的GET_input.

数据划分方法:

块划分,循环划分,块-循环划分。

散射:

散射也就是数据分发,所以有这样的一个函数,0号进程读入整个向量,但只将分量发送给需要分量的其他进程。

2017-01-25 23-01-57 的屏幕截图

如果通信子包含comm_sz个进程,那么此API将会把send_buf_p 所引用的数据分成comm_sz 份,第一份是0号进程,第二分给1号进程,其他以此类推。但是这种分发方式只适用于块划分的方法。

关于聚焦:

MPI_gather 函数将向量的所有分量都收集到0号进程上。

2017-01-25 23-12-49 的屏幕截图

在0号进程中,由send_buf_p所引用的内存区的数据存储在recv_buf_p 的第一个块中,在1号进程中,由send_buf_p所引用的内存区数据存储在recv_buf_p 的第二个块里,以此类推。

全局聚焦函数:

将一个向量通知到所有的进程。

2017-01-25 23-20-11 的屏幕截图

 

本文固定链接: http://zmrlinux.com/2017/01/25/mpi-%e5%87%a0%e4%b8%aa%e9%87%8d%e8%a6%81%e7%9a%84%e7%9a%84api/ | Kernel & Me

该日志由 root 于2017年01月25日发表在 并行计算基础 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: MPI 几个重要的的API | Kernel & Me
【上一篇】
【下一篇】