【发布时间】:2018-05-03 07:22:41
【问题描述】:
我正在用 fortran 学习 mpi。我写了一个简单的代码如下。
program arraypractice
use mpi
integer pid, np, ierr, arraysize, i,msg, status(mpi_status_size)
integer dcount
real*8 f(10), f1(10)
call mpi_init(ierr)
call mpi_comm_size(mpi_comm_world, np, ierr)
call mpi_comm_rank(mpi_comm_world, pid, ierr)
if(pid==0) then
do i = 1, 10
f(i)=float(i)
enddo
endif
msg = 1
if(pid==0) then
call mpi_send(f(1),6,mpi_real,1,msg,mpi_comm_world,ierr)
endif
if(pid==1) then
call mpi_recv(f1(1),6,mpi_real,0,msg,mpi_comm_world,status,ierr)
call mpi_get_count(status,mpi_real,dcount,ierr)
print *,dcount
do i= 1, 6
print *,f1(i)
enddo
endif
call mpi_finalize(ierr)
end
我正在使用“mpif90”命令编译代码,然后在我的带有 Arch Linux 的 i5 双核笔记本电脑上使用“mpirun -n 2 a.out”命令运行它。我的输出看起来像,
6
1.0000000000000000
2.0000000000000000
3.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
我完全不明白为什么最后 3 个数字没有更新。每次 mpi_recv 只接收 mpi_send 发送的数据的一半。我希望输出是
6
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000
6.0000000000000000
任何帮助将不胜感激。
【问题讨论】:
标签: arrays parallel-processing fortran mpi