| 查看: 2948 | 回复: 8 | ||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | ||
[求助]
关于MPI并行编程的基本问题
|
||
|
想要自学MPI并行编程,由于以前从未接触过MPI,有熟悉的希望能帮个忙,多谢。 我现在的想要的是,给我举一个MPI的实际例子,下面是我写的一个简单的Fortran程序,是关于计算两个数组相乘的。程序不是很复杂,希望熟悉MPI的兄弟姐妹帮我改编成MPI并行程序,并详细说明一下如何运行(由于初学MPI,对这方面的知识还处于空白状态),希望有人帮忙,不胜感激! Program Matrix Implicit None Integer :: I,J,K Integer :: A(4,4),B(4,4),C(4,4) Data A/1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7/ Data B/9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3/ Do I=1,4 Do J=1,4 C(I,J)=0 Do k=1,4 C(I,J)=C(I,J)+A(I,K)*B(K,J) Enddo Enddo Write(1101,*) (C(I,J),J=1,4) Enddo End [ Last edited by mhyuan on 2011-7-11 at 21:40 ] |
» 猜你喜欢
40+中年人失业后,还能找到好工作吗?
已经有13人回复
用NBS溴化时溶剂除了CCl4外还有什么
已经有6人回复
申请科研项目纯靠实力能成功吗?
已经有11人回复
极限拉扯,如何抉择
已经有15人回复
二审4个多月了还是Awaiting Reviewer Scores
已经有4人回复
OpenAI又攻克数学难题了,离AI做有机合成还有多远?
已经有13人回复
课题组会帮你通过考核么?
已经有7人回复
售一区SCI文章T0P,我:8O.551.O54,科目全,可十急
已经有9人回复
售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急
已经有8人回复
售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急
已经有10人回复
» 本主题相关价值贴推荐,对您同样有帮助:
请教DSC 曲线问题,有两个尖锐的吸热峰,一个放热峰,核磁很干净!
已经有17人回复
关于NAMD mpi并行问题
已经有4人回复
高斯计算激发态并行问题
已经有6人回复
请教关于遗传算法编程的问题(俺是小白)
已经有4人回复
【求助】ms5.5单机多核并行问题
已经有9人回复
【求助】mpi vasp问题
已经有32人回复
关于应用MATLAB工具箱BP网络编程问题
已经有1人回复
【求助】mpi不并行。。。
已经有6人回复
【求助】关于服务器多节点并行利用效率问题
已经有10人回复
【求助】更改源代码 并行出问题
已经有9人回复
【求助】两台电脑并行问题
已经有5人回复
【求助】Lammps 多机并行的问题
已经有11人回复
wangjiang381
铜虫 (初入文坛)
- 应助: 2 (幼儿园)
- 金币: 88.9
- 帖子: 32
- 在线: 2.8小时
- 虫号: 2095232
- 注册: 2012-10-30
- 性别: GG
- 专业: 功能与智能高分子
8楼2012-11-08 21:00:47
tsiangsun
木虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1923.4
- 散金: 42
- 帖子: 56
- 在线: 23.7小时
- 虫号: 500643
- 注册: 2008-02-13
- 性别: GG
- 专业: 理论和计算化学
2楼2011-07-12 23:48:18
3楼2011-07-16 09:25:26
|
刚入门,写了一个最简单的并行程序(Matrix.f90)。如下: Program Matrix Implicit None Include 'mpif.h' Integer :: I,J,K Integer :: iam,np,ierr integer :: status(MPI_STATUS_SIZE) Integer :: A(4,4),B(4,4),C(4,4) Call MPI_INIT(Ierr) Call MPI_COMM_RANK(mpi_comm_world,iam,ierr) Call mpi_comm_size(mpi_comm_world,np,ierr) Data A/1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7/ Data B/9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3/ Data C/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0/ Do J=1,4 Do I=1,4 C((iam+1),J)=C((iam+1),J)+A((iam+1),I)*B(I,J) Enddo Enddo If (iam==0) then Call MPI_Recv(c(2,1),1,MPI_Integer,1,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(2,2),1,MPI_Integer,1,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(2,3),1,MPI_Integer,1,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(2,4),1,MPI_Integer,1,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(3,1),1,MPI_Integer,2,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(3,2),1,MPI_Integer,2,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(3,3),1,MPI_Integer,2,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(3,4),1,MPI_Integer,2,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(4,1),1,MPI_Integer,3,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(4,2),1,MPI_Integer,3,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(4,3),1,MPI_Integer,3,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(4,4),1,MPI_Integer,3,0,mpi_comm_world,status,ierr) Elseif (iam==1) then Call MPI_send(c(2,1),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(2,2),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(2,3),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(2,4),1,MPI_Integer,0,0,mpi_comm_world,ierr) Elseif (iam==2) then Call MPI_send(c(3,1),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(3,2),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(3,3),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(3,4),1,MPI_Integer,0,0,mpi_comm_world,ierr) Elseif (iam==3) then Call MPI_send(c(4,1),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(4,2),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(4,3),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(4,4),1,MPI_Integer,0,0,mpi_comm_world,ierr) Endif If (iam==0) then Do I=1,4 Write(1102,*) (C(I,J),J=1,4) Enddo Endif Call MPI_FINALIZE(ierr) End 运行方式为: mpif90 Matrix.f90 -o Matrix mpirun -np 4 ./Matrix (当然在并行机环境下) 运行结果(fort.1102): 136 60 146 79 103 47 99 61 133 61 124 79 163 75 149 97 (与上面的串行程序结果(fort.1101)完全一样) (这个并行程序很低级,有待继续改进......) |
4楼2011-07-21 09:01:54










回复此楼
200