- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
并行程序设计实验报告
公共部分
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为进程个数
MPI_Send(sendbuf, sendcount, sendtype, i, root, comm) //root向每个进程发送消息
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)
if my_rank = root then
for i = 0 to p-1 do
MPI_Recv(recvbuf + i, recvcount, recvtype, i, root, comm., status)
end for
end if
2. LU分解的MPI实现(顺序划分)
5个节点、处理9x9矩阵时运行结果如下:
伪代码如下:
输入:矩阵A(nxn)
输出:下三角矩阵L(nxn),上三角矩阵U(nxn)
Begin
对所有处理器my_rank(0..p-1)同时执行如下算法:
for i = 0 to m-1 do //对处理器的各行**************
for j = 0 to p-1 do
if(my_rank = j) then
v = j * m + i; //当前主行************************
for k = v to n do
f[k] = a[i, k]
end for
else
v = j*m + i; //当前主行************************
接收主行所在处理器广播来的主行元素
End if
if(my_rank = j) then //编号为j的处理器对其i+1行以后各行进行变换
for k= i+1 to m-1 do
a
文档评论(0)