在Fortran中使用MPI发送数据时,它必须是一个数组吗?

时间:2014-07-01 12:50:01

标签: parallel-processing fortran mpi

这是一个非常简单的问题。我正在练习在Fortran中使用MPI,据我所知,发送和接收源必须是数组,如下所示:

    do 20 i = 1, 25
    final_sum(1) = final_sum(1) + random_numbers(i)
20  continue
    print *, 'process final sum: ', final_sum(1)
    call MPI_GATHER(final_sum,1,MPI_INTEGER,sum_recv_buff,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierror)

在这里,我使用数组final_sum来保存单个值。有一个更好的方法吗?这是我第一次使用Fortran,因为我已经在C中做过一些练习,所以我尝试使用Fortran来查看差异和相似之处。

1 个答案:

答案 0 :(得分:1)

高绩效标志是对的。在调用使用缓冲区的MPI例程时,实际上通常没有类型检查。 MPI例程使用Fortran功能,该功能允许使用隐式接口调用过程。在机器语言级别上只传递一个指针(它可能是指向临时副本的指针!)。这意味着您可以毫无问题地使用标量或数组。只需使用计数1和正确的MPI类型,您就可以传递和接收标量。

MPI派生类型是一项功能,可以让您处理更复杂的数据。