Boost C++ 库

……是世界上备受推崇且设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

函数 reduce - Boost C++ 函数库
PrevUpHomeNext

函数 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 个值的数组进行归约,就像对 in_valuesout_values 中的每个位置分别调用 reduce n 次一样。

out_value

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

op

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

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


PrevUpHomeNext