首页 > 解决方案 > fortran中的MPI空地址

问题描述

var_to_be_summed想象一下通过 MPI_REDUCEa bufferon将变量的值相加root=0

call MPI_REDUCE(var_to_be_summed, buffer, 1, MPI_REAL, MPI_SUM, root, MPI_COMM_WORLD, err)

根据MPICHbuffer仅对root有意义。所以原则上我可以使用任何变量。例如,buffer在非根等级中不存在原生的情况下。

real :: dummy
if(rank==root) then 
  call MPI_REDUCE(var_to_be_summed, buffer, 1, MPI_REAL, MPI_SUM, root, MPI_COMM_WORLD, err)
else
  call MPI_REDUCE(var_to_be_summed, dummy, 1, MPI_REAL, MPI_SUM, root, MPI_COMM_WORLD, err)
endif

我的问题是:是否有一种很好的/通用的/标准的方式(在可移植性、易于编码和阅读方面)给 MPI 例程提供一个类似空的参数,在非根级别上有一个“不重要的”缓冲区。

我想用dummy上面的代码替换它,MPI_BOTTOM因为它代表一个地址,但我不确定是否有任何副作用。

TL;DR: MPI 是否支持一个变量,它代表“空”或“任何”地址,如通用标签 MPI_ANY_TAG

标签: fortranmpi

解决方案


推荐阅读