预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共39页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

MPI并行程序设计消息传递编程基础消息传递编程基础消息传递编程基础消息传递编程基础消息传递编程基础使用三路协议的同步send和recv调用消息传递编程基础进程P ———————————————— M=10; sendMtoQ; M=20;消息传递编程基础进程P —————————————————————— M=10; sendMtoQ; 执行某些不会改变Q的计算 waitforMtobesent M=20;消息传递编程基础消息传递编程基础消息传递编程基础消息传递编程基础MPI并行程序设计#include“mpi.h” intfoo(inti){...} intmain(intargc,char*argv[]) { inti,tmp,sum=0,group_size,my_rank,N;MPI_Statusstatus; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&group_size); MPI_Comm_rank(MPI_COMM_WORLD,&my_rank); if(my_rank==0) { printf(“N=“);scanf(“%d”,&N); for(i=1;i<group_size;i++) S1: MPI_Send(&N,1,MPI_INT,i,i,MPI_COMM_WORLD;); for(i=my_rank;i<N;i+=group_size) sum+=foo(i); for(i=1;i<group_size;i++) { S2: MPI_Recv(&tmp,1,MPI_INT,i,i,MPI_COMM_WORLD,&status); sum+=tmp; } printf(“\nTheresult=%d\n”,sum); } else { S3: MPI_Recv(&N,1,MPI_INT,0,my_rank,MPI_COMM_WORLD,&status); for(i=my_rank;i<N;i+=group_size) sum+=foo(i); S4: MPI_Send(&sum,1,MPI_INT,0,i,MPI_COMM_WORLD); } MPI_Finalize(); return0; }#include<stdio.h> #include<mpi.h> #defineN1000000 main() { doublesum=0,local,mypi,pi,dx; longi,taskid,numtask; A: dx=1.0/N; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&taskid); MPI_COMM_size(MPI_COMM_WORLD,&numtask); B: for(i=taskid;i<N;i+=numtask) { P: local=(i+0.5)*dx; Q: sum+=4.0/(1.0+local*local); } mypi=sum*dx; C: MPI_Reduce(&mypi,&pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD); D: if(taskid==0)printf(“piis%lf\n”,pi); MPI_Finalize(); }#include<iostream> #include<mpi.h> usingnamespacestd; intmain(intargc,char*argv[]) { intsize,rank,x=-1; MPI_Statusstatus; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&size); MPI_Comm_rank(MPI_COMM_WORLD,&rank); while(x!=0) { if(rank==0) { cout<<"X="; cin>>x; cout<<"Read"<<x<<"fromrank"<<rank<<endl; } else { MPI_Recv(&x,1,MPI_INT,rank-1,0,MPI_COMM_WORLD,&status); cout<<"Recevied"<<x<<"fromrank"<<rank-1<<endl; } if(rank<size-1) { MPI_Send(&x,1,MPI_INT,rank+1,0,MPI_COMM_WORLD); cout<<"