资源描述:
《中科大并行程序实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、并行程序设计实验报告公共部分1.用MPI_Send、MPI_Recv实现MPI_Bcast、MPI_Alltoall、MPI_Gather、MPI_Scatter等MPI群及通信函数功能。_MPI_Bcast:程序运行结果如下伪代码如下:_MPI_Bcast(sendbuf,sendcount,sendtype,root,comm)对每个处理器执行以下算法ifmy_rank=rootthenfori=0topdo//p为进程个数MPI_Send(sendbuf,sendcount,sendtype,i,root,comm)//root向每个进程发送消息endfo
2、rendif//每个进程从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)各处理器执行以下算法ifmy_rank=rootthenfori=0tosendcountd
3、oMPI_Send(sendbuf+i,1,sendtype,i,root,comm)//将sendbuf中的信息按进程标识顺序发送给各个进程endforendif//每个进程从root处接收各自的消息,并存在recvbuf中第root号位置MPI_Recv(recvbuf+root,1,recvtype,root,root,comm.,&status)_MPI_Alltoall:进程0到进程5存储的数据分别为”000000”到”555555”,经全局交换之后运行结果如下:伪代码如下:_MPI_Alltoall(sendbuf,sendcount,sendtyp
4、e,recvbuf,recvcount,recvtype,comm)对每个处理器执行以下代码:fori=0top-1_MPI_Scatter(sendbuf,sendcount,sendtype,recvbuf,recvcount,recvtype,i,comm)//_MPI_Scatter即为前一个程序的伪代码//Alltoall就是每一个进程都以自己为root执行一次Scatterendfor_MPI_Gather:将四个进程的第3个字符汇聚到进程2,执行结果如下:伪代码如下:_MPI_Gather(sendbuf,sendcount,sendtype,re
5、cvbuf,recvcount,recvtype,root,comm)对每个进程执行以下代码MPI_Send(sendbuf,sendcount,sendtype,root,root,comm)ifmy_rank=rootthenfori=0top-1doMPI_Recv(recvbuf+i,recvcount,recvtype,i,root,comm.,&status)endforendif2.LU分解的MPI实现(顺序划分)5个节点、处理9x9矩阵时运行结果如下:伪代码如下:输入:矩阵A(nxn)输出:下三角矩阵L(nxn),上三角矩阵U(nxn)Begin
6、对所有处理器my_rank(0..p-1)同时执行如下算法:fori=0tom-1do//对处理器的各行**************forj=0top-1doif(my_rank=j)thenv=j*m+i;//当前主行************************fork=vtondof[k]=a[i,k]endforelsev=j*m+i;//当前主行************************接收主行所在处理器广播来的主行元素Endifif(my_rank=j)then//编号为j的处理器对其i+1行以后各行进行变换fork=i+1tom-1doa[
7、k,v]=a[k,v]/f[v]forw=v+1ton-1doa[k,w]=a[k,w]–f[w]*a[k,v]endforendforif(my_rank>j)then//编号大于j的处理器对其所有行变换fork=0tom-1doa[k,v]=a[k,v]/f[v]forw=v+1ton-1doa[k,w]=a[k,w]–f[w]*a[k,v]endforendforendifendforendforend大体思路如同上面的伪代码给出,核心思想就是如果当前主行在第j号处理器,那么按照顺序划分的想法,编号小于j的处理器已经变换完了自己的各行,不需要做什么处理;编
8、号为j的处理器应用当前主