| 查看: 2454 | 回复: 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 ] |
» 猜你喜欢
有没有人能给点建议
已经有5人回复
假如你的研究生提出不合理要求
已经有12人回复
实验室接单子
已经有7人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
» 本主题相关价值贴推荐,对您同样有帮助:
请教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












回复此楼