这是一个非常简单的问题。我正在练习在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来查看差异和相似之处。
答案 0 :(得分:1)
高绩效标志是对的。在调用使用缓冲区的MPI例程时,实际上通常没有类型检查。 MPI例程使用Fortran功能,该功能允许使用隐式接口调用过程。在机器语言级别上只传递一个指针(它可能是指向临时副本的指针!)。这意味着您可以毫无问题地使用标量或数组。只需使用计数1和正确的MPI类型,您就可以传递和接收标量。
MPI派生类型是一项功能,可以让您处理更复杂的数据。