Boost C++ 库

...是世界上评价最高、设计最专业的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

Function reduce - Boost 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 数据类型的类型。可以将此操作视为向 root gather,然后对收集到的值使用 op 操作进行 std::accumulate()

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

参数

comm

将在其上发生归约的通信器。

in_value

要与每个其他进程的局部值组合的局部值。对于归约数组,in_values 包含局部值的指针。在这种情况下,n 是将被归约的值的数量。归约独立地对 in_values 引用的每个 n 个值进行,例如,对具有 n 个值的数组调用 reduce 就像调用 reduce n 次一样,每次针对 in_valuesout_values 中的每个位置。

out_value

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

op

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

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


PrevUpHomeNext