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

在线预览结束,喜欢就下载吧,查找使用更方便

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

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

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

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

使用MPI_Send和MPI_Recv编写代码实现群集通信函数功能 指导教师:郑启龙 姓名:田盼 学号:SA11011057 电子邮件:HYPERLINK"mailto:ptian@mail.ustc.edu.cn"ptian@mail.ustc.edu.cn 实验日期:2010年12月8日 一、实验内容 1、采用MPI_Send和MPI_Recv编写代码来实现包括MPI_Bcast、MPI_Alltoall、MPI_Gather、MPI_Scatter等MPI群集通信函数的功能。 2、给出抽象的并行算法描述、程序源代码及运行时性能加速图表。 二、抽象并行算法描述 ⅰ、MPI_Bcast算法描述: 输入:并行处理器个数ProcessNumber 输出:所有进程收到来自Root进程的消息 ProcedureMPI_Bcast_a Begin 对所有处理器同时执行如下的算法: (1)if进程为Root进程 (1.1)将message写入消息缓冲 (1.2)forindex=0tosize-1do 向index发送相同的message消息 endfor (2)进程不是Root进程 (2.1)接收消息 End 2、MPI_Alltoall算法描述: 输入:并行处理器个数ProcessNumber 输出:所有进程收到来自其他进程不同的消息 ProcedureMPI_Alltoall_a Begin 对所有处理器同时执行如下的算法: (1)将message写入消息缓冲 (2)forindex=0tosize-1do 分别向index发送不同的message消息 endfor (3)forsource=0tosize-1do 接收来自source的message消息 endfor End 3、MPI_Gather算法描述: 输入:并行处理器个数ProcessNumber 输出:Root进程从通信域Comm的所有进程接收消息 ProcedureMPI_Gather_a Begin 对所有处理器同时执行如下的算法: (1)if进程为Root进程 (1.1)forsource=0tosize-1do 接收来自source的message消息 endfor (2)向Root进程发送自己的消息 End 4、MPI_Scatter算法描述: 输入:并行处理器个数ProcessNumber 输出:向所有进程发送不同的消息 ProcedureMPI_Scatter_a Begin 对所有处理器同时执行如下的算法: (1)if进程为Root进程 (1.1)将message写入消息缓冲 (1.2)forindex=0tosize-1do 向index发送不同的message消息 endfor (2)进程不是Root进程 (2.1)接收消息 End 三、程序源代码 #include"mpi.h"/*MPIheadfile*/ #include<stdio.h> #include<string.h> #defineProNum4 voidMPI_Bcast_a(intrank,intsize,inttag){// intindex; charmessage[100]; MPI_Statusstatus; if(rank==0){ strcpy(message,"Hello,themessageisfromprocessroot!\n"); for(index=0;index<size;index++){ MPI_Send(message,strlen(message),MPI_CHAR,index,tag,MPI_COMM_WORLD);/*sendingdatatonode#1*/ } printf("Thereare%dprocessesinthegroup.\n",size); } else{ MPI_Recv(message,100,MPI_CHAR,0,tag,MPI_COMM_WORLD,&status); printf("Process%dreceived%s\n",rank,message); } } voidMPI_Alltoall_a(intrank,intsize,inttag){// intindex,source; charmessage[100]; charbuffers[ProNum][100];//ifbuffers*[100],therewillbeerrors. charbuffer[10]; MPI_Statusstatus; strcpy(message,"Hello,themessageisfromprocess"); //mes