代码之家  ›  专栏  ›  技术社区  ›  Felix

在Fortran中使用MPI进行简单的发送/接收时遇到问题

  •  0
  • Felix  · 技术社区  · 10 年前

    我试图将一个整数从一个进程发送到另一个进程。但是,我得到了一个分段错误/无效的内存引用。显然,我误解了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 回复  |  直到 10 年前
        1
  •  4
  •   Vladimir F Героям слава    10 年前

    你缺少 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