第4次实验2并行计算中节点间的Reduce操作_第1页
第4次实验2并行计算中节点间的Reduce操作_第2页
第4次实验2并行计算中节点间的Reduce操作_第3页
第4次实验2并行计算中节点间的Reduce操作_第4页
第4次实验2并行计算中节点间的Reduce操作_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、3.5并行计算中节点间的Reduce操作Map/Reduce是Google引以自豪的技术之一,Map/Reduce技术被认为能很好的实现计算的并行化,成 为云计算中的一项重要技术,我们姑且不论Map/Reduce技术是否会成为未来云计算的主流技术,其实 Map/Reduce也不是Google的创新,在MPI中就一直提供对各节点数据的归约(Reduce)操作,可以方便 的完成多个节点向主节点的归约,并提供了相应的函数支持。云计算从技术的角度看就是从并行计算一步 步走过来的。本节我们将来看看在MPI中是如何实现Reduce操作的。本节中我们以采用Monte-Carlo法计算函数积分的例子来说明MP

2、I中Reduce函数的使用方法。我们采用这一方法来计算 = 2在0到10之间的积分值。具体计算方法如图3.4:图3.4 Monte-Carlo计算积分的方法该算法的思想是通过随机数把函数划分成小的矩形块,通过求矩形块的面积和来对积分值,我们生成n个0到10之间的随机数,求出该随机数所对应的函数值作为矩形的高,由于随机数在n很大时会近似平 均分布在0到10区间,所以矩形的宽取相同的值为10,对所有的矩形块求和即可得函数的积分值。MPI函数说明:1.归约函数 int MPI_Reduce(void *sendbuf,void *recvbuf,int count,MPI_Datatype data

3、type,MPI_Op op,int root,MPI_Comm comm)参数描述:sendbuf为数据发送缓冲区;recvbuf为数据接收缓冲区;count为发送的数据个数;datatype为发送的数据类型;op为执行的归约操作;root指定根节点;comm为通讯域MPI_Reduce提供了多种归约操作,如下表:MPI中的归约名含义MPI_MAX求最大值MPI_MIN 求最小值MPI_SUM 求和MPI_PROD 求积MPI_LAND 逻辑与MPI_BAND 按位与MPI_LOR逻辑或MPI_BOR按位或MPI_LXOR逻辑异或MPI_BXOR按位异或MPI_MAXLOC最大值且相应位置M

4、PI_MINLOC最小值且相应位置并行源代码:程序3.7/*文件名 inte.c*/#define N 100000000#include #include #include #include mpi.hint main(int argc, char* argv)int myid,numprocs;int i;double local=0.0;double inte,tmp=0.0,x;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &myid);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);srand

5、(int)time(0);/设置随机数种子/*各节点分别计算一部分积分值*/*以下代码在不同节点运行的结果不同*/for(i=myid;iN;i=i+numprocs)x=10.0*rand()/(RAND_MAX+1.0);/求 函数值tmp=x*x/N;local=tmp+local;/各节点计算面积和计算总的面积和,得到积分值MPI_Reduce(&local,&inte,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);if(myid=0)printf(The integal of x*x=%16.15fn,inte);MPI_Finalize();运行结果

6、:The integal of x*x=33.333451312647291程序说明:以上程序通过随机数将积分区域划分为100000000个小的区域,各节点计算一部分小矩形的面积,最 后通过MPI_Reduce()函数对所有节点的计算结果进行归约求和得到最后的积分值,归约的过程就是各节点 向主节点发送数据,由主节点接收数据并完成指定的计算操作,这一思想与云计算中的Map/Reduce思想 类似,都是将任务分配到各节点计算最后由主节点汇总结果。程序通过myid和numpros参数的配合使同 一段程序在不同的节点运行时完成不同部分的积分工作,这利用了MPI并行编程中变量分布式存储的原 理,不同的节

7、点其myid值是不同的。可见在MPI中会出现相同的代码在不同的节点执行时结果不一样的 情况,这在串行程序中是不会出现的,大家要注意理解。3.6用MPI的六个基本函数实现Reduce函数功能我们前面说过采用MPI的六个基本函数几乎可以实现大部份的并行计算功能,但为了方便程序设计人 员实际上MPI为我们提供了大量的函数可供使用,但这些功能我们大多可以采用这六个函数来实现。本节 就为大家演示如何用基本函数实现MPI中的MPI_Reduce()函数的部分功能,我们所选的问题同样是采用 随机数方式计算积分,但我们并不保证MPICH 一定是这样实现的。并行源代码:程序3.8/*文件名 myreduce.c

8、*/#define N 100000000#include #include #include #include mpi.h”void Myreduce(double *sendbuf, double *recvbuf,int count,int root);/定义自己的 reduce 函数int main(int argc, char* argv)int myid,numprocs;int i;double local=0.0;double inte,tmp=0.0,x;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &myid);M

9、PI_Comm_size(MPI_COMM_WORLD,&numprocs);/*采用归约对y=x*x在1,10区间求积分*/srand(int)time(0);for(i=myid;iN;i=i+numprocs)x=10.0*rand()/(RAND_MAX+1.0);tmp=x*x/N;local=tmp+local;Myreduce(&local,&inte,1,0);/调用自定义的规约函数if(myid=0)printf(The integal of x*x=%16.15fn”,inte);MPI_Finalize();/*自定义的归约函数,sendbuf发送缓冲区,recvbuf接

10、收缓冲区,count数据个数,root指定根节点*/*该函数实现归约求和的功能*/void Myreduce(double *sendbuf,double *recvbuf,int count,int root)MPI_Status status;int i;int myid,numprocs;*recvbuf=0.0;MPI_Comm_rank(MPI_COMM_WORLD, &myid);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);double *tmp;/非root节点向root节点发送数据if(myid!=root)MPI_Send(sendbuf,

11、count,MPI_DOUBLE,root,99,MPI_COMM_WORLD);/root节点接收数据并对数据求和,完成规约操作if(myid=root)*recvbuf=*sendbuf;for(i=0;inumprocs;i+)if(i!=root)MPI_Recv(tmp,count,MPI_DOUBLE,i,99,MPI_COMM_WORLD,&status);*recvbuf=*recvbuf+*tmp;运行结果:The integal of x*x=33.332395313332192程序说明:本示例程序中我们自定义了一个归约函数Myreduce(),所用到的MPI函数没有超过6个基本函数,该 函数包括4个参数,第一个参数sendbuf为各节点的发送缓冲区,第二个参数recvbuf为根节点的接收缓冲 区,第三个参数count为每个节点发送的数据个数,第四个参数root为需要指定的接收数据并归约数据的 根节点。该函数没有给出具体的归约操作,默认为对所有数据做求和的归约操作。程序执行到这一函数后 将各自节点的指定数据向根节点发送,并由根节点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论