中科大并行程序实验报告 下载本文

内容发布更新时间 : 2024/4/28 7:21:59星期一 下面是文章的全部内容请认真阅读。

并行程序设计实验报告

公共部分

1.用MPI_Send、MPI_Recv实现MPI_Bcast、MPI_Alltoall、MPI_Gather、MPI_Scatter等MPI群及通信函数功能。 _MPI_Bcast: 程序运行结果如下

伪代码如下:

_MPI_Bcast(sendbuf, sendcount, sendtype, root, comm) 对每个处理器执行以下算法 if my_rank = root then

for i = 0 to p do

//p为进程个数

//root向每个进程发送消息

MPI_Send(sendbuf, sendcount, sendtype, i, root, comm)

end for

end if

//每个进程从root接收带有root标签的消息,接受信息存在各自的sendbuf中 MPI_Recv(sendbuf, sendcount, sendtype, root, root, comm., &status)

_MPI_Scatter:

将字符串”abcdefgh”以进程2为根散播出去,程序运行结果如下:

伪代码如下:

_MPI_Scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm) 各处理器执行以下算法 if my_rank = root then

for i = 0 to sendcount do

MPI_Send(sendbuf + i, 1, sendtype, i , root, comm) //将sendbuf中的信息按进程标识顺序发送给各个进程

end for

end if

//每个进程从root处接收各自的消息,并存在recvbuf中第root号位置 MPI_Recv(recvbuf + root, 1, recvtype, root, root, comm., &status)

_MPI_Alltoall:

进程0到进程5存储的数据分别为”000000”到”555555”,经全局交换之后运行结果如下:

伪代码如下:

_MPI_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm) 对每个处理器执行以下代码: for i = 0 to p-1

_MPI_Scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, i, comm) //_MPI_Scatter即为前一个程序的伪代码

//Alltoall就是每一个进程都以自己为root执行一次Scatter end for

_MPI_Gather:

将四个进程的第3个字符汇聚到进程2,执行结果如下:

伪代码如下:

_MPI_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm) 对每个进程执行以下代码

MPI_Send(sendbuf, sendcount, sendtype, root, root, comm)