Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

Function reduce

boost::mpi::reduce — 将每个进程存储的值合并为根进程上的单个值。

概要

// In header: <boost/mpi/collectives.hpp>


template<typename T, typename Op> 
  void reduce(const communicator & comm, const T & in_value, T & out_value, 
              Op op, int root);
template<typename T, typename Op> 
  void reduce(const communicator & comm, const T & in_value, Op op, int root);
template<typename T, typename Op> 
  void reduce(const communicator & comm, const T * in_values, int n, 
              T * out_values, Op op, int root);
template<typename T, typename Op> 
  void reduce(const communicator & comm, const T * in_values, int n, Op op, 
              int root);

描述

reduce 是一种集体算法,它将每个进程存储的值合并为 root 上的单个值。 这些值可以任意组合,通过函数对象指定。 值的类型 T 可以是任何可序列化的类型或具有关联 MPI 数据类型的类型。 可以将此操作视为 gatherroot,然后对收集的值执行 std::accumulate() 并使用操作 op

当类型 T 具有关联的 MPI 数据类型时,此例程会调用 MPI_Reduce 来执行归约。 如果可能,将使用内置的 MPI 操作; 否则,reduce() 将为调用 MPI_Reduce 创建一个自定义 MPI_Op。

参数

comm

将在其上进行归约的通信器。

in_value

要与每个其他进程的本地值组合的本地值。 对于归约数组,in_values 包含指向本地值的指针。 在这种情况下,n 是将要归约的值的数量。 归约独立地发生在 in_values 引用的每个 n 值上,例如,对 n 个值的数组调用 reduce 就像分别对 in_valuesout_values 中的每个位置调用 reduce n 次。

out_value

将接收归约操作的结果,但仅适用于 root 进程。 非根进程可以省略此参数; 如果他们选择提供参数,它将保持不变。 对于归约数组,out_values 包含指向输出值存储的指针。

op

将类型 T 的两个值组合为类型 T 的第三个值的二元运算。 对于具有关联 MPI 数据类型的类型 Top 将被转换为 MPI_Op(通过 MPI_Op_create),或者,如果可能,直接映射到内置的 MPI 操作。 有关此映射的更多详细信息,请参见 is_mpi_opoperations.hpp 标头中。 对于任何非内置操作,交换性将由 is_commmutative 特征(也在 operations.hpp 中)确定: 鼓励用户将交换操作标记为这样,因为它为实现提供了额外的自由度来优化归约操作。

root

将接收最终组合值的进程 ID 号。 此值在所有进程上必须相同。


PrevUpHomeNext