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

使用MPI 计算积分

我们现在使用MPI 来对一个SIN 函数进行定积分求面积的计算。

简单说下定积分,定积分根据将X划分为一个一个的小梯形,将面积球和之后近似于目标面积。

2017-01-22 22-49-57 的屏幕截图

 

如上图所示,我们需要的是使用MPI 将整个图形分解成N 个梯形,其中每一个梯形的面积开一个进程来计算,然后使用MPI 的规约求和函数来计算最终的结果。

这里还有几个小点需要注意。

关于IO处理。

我们的程序是SPMD 类型的,程序只需要编写一次然后多进程执行罢了,但是如果我们需要输入数据呢?比如使用scanf 来输入数据?

解决方法:给0号进程编写scanf 函数,其他的进程使用 MPI_Send 来接受变量。

MPI_Reduce

2017-01-24 14-07-33 的屏幕截图

全局规约函数,很简单,最核心的是第五个参数操作符参数,根据不同的参数我们可以实现不同的功能。

MPI 中定义的规约操作符

MPI_MAX               最大值

MPI_MIN                最小值
MPI_SUM               累加和
MPI_PROD            累乘积
MPI_LAND            逻辑与
MPI_BAND            按位于
MPI_LOR               逻辑或
MPI_BOR               按位或
MPI_LXOR            逻辑异或
MPI_BXOR            按位异或
MPI_MAXLOC      求最大值和位置
MPI_MINLOC       求最小值和位置

 

集和通信与点对点通信

1.在通信子中的所有进程都必须调用相同的集和通信函数

2.每个进程传递给MPI集合通信函数的参数必须是相融的

3.参数output_data_p 只用在dest_process 上。

4.点对点通信函数是通过标签和通信子来匹配的。集合通信函数不使用标签,只通过通信子和调用顺序来进行匹配。

本文固定链接: http://zmrlinux.com/2017/01/24/%e4%bd%bf%e7%94%a8mpi-%e8%ae%a1%e7%ae%97%e7%a7%af%e5%88%86/ | Kernel & Me

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