| 查看: 2700 | 回复: 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 ] |
» 猜你喜欢
生命口会评
已经有4人回复
大龄残疾硕士的一点执念
已经有21人回复
今年E04面上
已经有20人回复
网络举报学术不端成为了男女之间情杀的手段了,真荒唐。。。
已经有3人回复
2026年面上项目中了,2A+B, 会评顺利通过
已经有12人回复
Suzuki偶联中硼酸酯原料掉下的硼酸酯是否可以自身偶联,生成B2Pin2杂质
已经有3人回复
刑法学论文投稿求助
已经有5人回复
Journal of Environmental Chemical Engineering
已经有3人回复
最后一年,祈求好运
已经有3人回复
风电环氧领域
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
请教DSC 曲线问题,有两个尖锐的吸热峰,一个放热峰,核磁很干净!
已经有17人回复
关于NAMD mpi并行问题
已经有4人回复
高斯计算激发态并行问题
已经有6人回复
请教关于遗传算法编程的问题(俺是小白)
已经有4人回复
【求助】ms5.5单机多核并行问题
已经有9人回复
【求助】mpi vasp问题
已经有32人回复
关于应用MATLAB工具箱BP网络编程问题
已经有1人回复
【求助】mpi不并行。。。
已经有6人回复
【求助】关于服务器多节点并行利用效率问题
已经有10人回复
【求助】更改源代码 并行出问题
已经有9人回复
【求助】两台电脑并行问题
已经有5人回复
【求助】Lammps 多机并行的问题
已经有11人回复
weiwei43
至尊木虫 (正式写手)
- 应助: 16 (小学生)
- 金币: 18316.1
- 红花: 6
- 帖子: 737
- 在线: 94.7小时
- 虫号: 250282
- 注册: 2006-05-13
- 专业: 机械动力学
9楼2014-07-12 21:37:27
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











回复此楼