在Fortran中使用MPI进行简单的Send / Recv时遇到问题

时间:2015-02-23 21:43:53

标签: fortran mpi send

我正在尝试从一个进程向另一个进程发送一个整数。但是,我收到了分段错误/无效的内存引用。显然我误解了一些MPI的基本概念。谁能告诉我我做错了什么?

program read_data
use mpi
implicit none

integer :: ierr, my_id, max_id, test

call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, my_id, ierr)
call MPI_Comm_size(MPI_COMM_WORLD, max_id, ierr)

if (my_id .eq. 0) then
    test = 1
    call MPI_Send(test, 1, MPI_Integer, 1, 6, MPI_COMM_WORLD, ierr)
endif

if (my_id .eq. 1) then
    call MPI_Recv(test, 1, MPI_Integer, 0, 6, MPI_COMM_WORLD, ierr)
    write(*,*) test
endif

call MPI_FINALIZE(ierr)

end program read_data

1 个答案:

答案 0 :(得分:4)

status中缺少MPI_Recv数组参数。参见手册

MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR)

https://www.open-mpi.org/doc/v1.8/man3/MPI_Recv.3.php