| 查看: 2432 | 回复: 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 ] |
» 猜你喜欢
职称评审没过,求安慰
已经有41人回复
回收溶剂求助
已经有7人回复
硝基苯如何除去
已经有3人回复
A期刊撤稿
已经有4人回复
垃圾破二本职称评审标准
已经有17人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有22人回复
EST投稿状态问题
已经有7人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
求助文献
已经有3人回复
三无产品还有机会吗
已经有6人回复
» 本主题相关价值贴推荐,对您同样有帮助:
请教DSC 曲线问题,有两个尖锐的吸热峰,一个放热峰,核磁很干净!
已经有17人回复
关于NAMD mpi并行问题
已经有4人回复
高斯计算激发态并行问题
已经有6人回复
请教关于遗传算法编程的问题(俺是小白)
已经有4人回复
【求助】ms5.5单机多核并行问题
已经有9人回复
【求助】mpi vasp问题
已经有32人回复
关于应用MATLAB工具箱BP网络编程问题
已经有1人回复
【求助】mpi不并行。。。
已经有6人回复
【求助】关于服务器多节点并行利用效率问题
已经有10人回复
【求助】更改源代码 并行出问题
已经有9人回复
【求助】两台电脑并行问题
已经有5人回复
【求助】Lammps 多机并行的问题
已经有11人回复
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
★
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-31 13:22:45
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-31 13:22:45
|
简单版本 Program Matrix Implicit None Include 'mpif.h' Integer :: I,J,K Integer :: iam,np,ierr Integer :: A(4,4),B(4,4),C(4,4) Integer :: AA(4),CC(16) 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 CC/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0/ Do I=1,4 AA(I)=A((iam+1),I) Enddo Do J=1,4 Do I=1,4 CC(J)=CC(J)+AA(I)*B(I,J) Enddo Enddo Call MPI_Gather(CC,4,MPI_Integer,CC,4,MPI_Integer,0,mpi_comm_world,ierr) If (iam==0) then K=0 Do I=1,4 Do J=1,4 K=K+1 C(I,J)=CC(K) Enddo Write(1103,*) (C(I,J),J=1,4) Enddo Endif Call MPI_FINALIZE(ierr) End 运行方式一样 运行结果一样 |
5楼2011-07-22 11:21:26
kevin123581
金虫 (正式写手)
- 应助: 12 (小学生)
- 金币: 761.3
- 散金: 81
- 红花: 6
- 帖子: 539
- 在线: 238.7小时
- 虫号: 1658947
- 注册: 2012-03-02
- 性别: MM
- 专业: 光学
6楼2012-09-11 11:55:57
lrlrwu
金虫 (小有名气)
- 应助: 2 (幼儿园)
- 金币: 1441.9
- 帖子: 126
- 在线: 122.1小时
- 虫号: 1534477
- 注册: 2011-12-12
- 性别: GG
- 专业: 机器人学及机器人技术
7楼2012-09-11 18:06:41
wangjiang381
铜虫 (初入文坛)
- 应助: 2 (幼儿园)
- 金币: 88.9
- 帖子: 32
- 在线: 2.8小时
- 虫号: 2095232
- 注册: 2012-10-30
- 性别: GG
- 专业: 功能与智能高分子
8楼2012-11-08 21:00:47
weiwei43
至尊木虫 (正式写手)
- 应助: 16 (小学生)
- 金币: 18316.1
- 红花: 6
- 帖子: 737
- 在线: 94.7小时
- 虫号: 250282
- 注册: 2006-05-13
- 专业: 机械动力学
9楼2014-07-12 21:37:27













回复此楼