资源描述:
《并行程序设计实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、并行程序设计实验1数据接力传送#include"mpi.h"#includeintmain(intargc,char**argv){intrank,value,size;MPI_Statusstatus;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD,&size);/*得到当前进程标识和总的进程个数*//*循环执行直到输入的数据为负时才退出*/if(rank=
2、=0){fprintf(stderr,"Pleasegivenewvalue=");/*进程0读入要传递的数据*/scanf("%d",&value);fprintf(stderr,"%dread<-<-(%d)",rank,value);if(size>1){MPI_Send(&value,1,MPI_INT,rank+1,0,MPI_COMM_WORLD);fprintf(stderr,"%dsend(%d)->->%d",rank,value,rank+1);/*若不少于一个进程
3、则向下一个进程传递该数据*/}}else{MPI_Recv(&value,1,MPI_INT,rank-1,0,MPI_COMM_WORLD,&status);/*其它进程从前一个进程接收传递过来的数据*/fprintf(stderr,"%dreceive(%d)<-<-%d",rank,value,rank-1);if(rank==size-1){MPI_Send(&value,1,MPI_INT,0,0,MPI_COMM_WORLD);fprintf(stderr,"%dsend(%d)->-
4、>%d",rank,value,0);/*若当前进程不是最后一个进程则将该数据继续向后传递*/}if(rank->%d",rank,value,rank+1);/*若当前进程不是最后一个进程则将该数据继续向后传递*/}}MPI_Barrier(MPI_COMM_WORLD);/*执行一下同步加入它主要是为了将前后两次数据
5、传递分开*/MPI_Finalize();}3任意源和任意标识#include"mpi.h"#include#include/*使用了随机函数srand和rand*/#include/*使用了时间函数time*/intmain(intargc,char*argv[]){intrank,size,i,buf[1];MPI_Statusstatus;MPI_Init(&argc,&argv);/*得到当前进程标识和总的进程个数*/MPI_Comm_ra
6、nk(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD,&size);if(rank==0){/*进程0接收来自其他所有进程的消息,将各消息的内容、消息来源和消息标识打印出来。*/for(i=0;i<10*(size-1);i++){MPI_Recv(buf,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status);fprintf(stderr,"Msg=%dtfrom%dwithta
7、g%d.",buf[0],status.MPI_SOURCE,status.MPI_TAG);}}else{/*其他每个进程向进程0发送10个随机数*/srand((unsigned)time(NULL));/*以当前时间作为生成随机数的种子*/for(i=0;i<10;i++){buf[0]=rand()%100;/*生成一个随机整数*/MPI_Send(buf,1,MPI_INT,0,i,MPI_COMM_WORLD);}}MPI_Finalize();}2.进程间相互问候#include"m
8、pi.h"#include#includevoidHello(void);intmain(intargc,char*argv[]){intme,option,namelen,size;charprocessor_name[MPI_MAX_PROCESSOR_NAME];MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&me);MPI_Comm_size(MPI_C