使用MPI发出数组发送问题

时间:2014-11-26 19:35:33

标签: arrays fortran mpi fortran90

我刚开始在Fortran中使用MPI,并且正在编写一个简单的工作示例,以确定MPI_Send和MPI_Recv的工作原理。我只是想将数据从等级1传递到等级0.我的代码是:

PROGRAM MAIN

use mpi
implicit none
integer error,rank,num_procs,status
integer,parameter:: num = 3
integer,dimension(0:num-1,2)::a
integer,dimension(0:2)::b

call MPI_Init ( error )
call MPI_Comm_size ( MPI_COMM_WORLD, num_procs, error )
call MPI_Comm_rank ( MPI_COMM_WORLD, rank, error )

a = rank
!b = 4
print*, rank, 'befor MPI a=', a

if (rank == 0) then
    call MPI_Send(a(0,1), 3, MPI_INT,1,1,MPI_COMM_WORLD,error)
elseif (rank == 1) then
    call MPI_Recv(a(2,1), 3, MPI_INT,0,1,MPI_COMM_WORLD,status,error)
endif

print*, rank, 'after MPI a=', a

call MPI_Finalize ( error )
END PROGRAM

这给出了一个读数:

       1 befor MPI a=           1           1           1           1           1           1
       0 befor MPI a=           0           0           0           0           0           0
       0 after MPI a=           0           0           0           0           0           0
       1 after MPI a=          12           0           0           0           0           1

我不知道前12名来自哪里。我还发现,如果我取消注释b = 4,我会得到正确的读数:

       0 befor MPI a=           0           0           0           0           0           0
       1 befor MPI a=           1           1           1           1           1           1
       1 after MPI a=           1           1           0           0           0           1
       0 after MPI a=           0           0           0           0           0           0

b不会在程序中的任何其他地方使用,但显然它修复了程序。任何人都可以解释发生了什么?一旦我进入更复杂的数组,我将无法添加随机虚拟变量来解决问题。 (注意:b可以是任何长度或值的数组,它只是存在以解决问题)我不知所措,任何帮助都将非常感激。谢谢!

0 个答案:

没有答案