Boost C++ 库

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

PrevUpHomeNext

函数 scan

boost::mpi::scan — 计算通信器中所有进程值的prefix归约。

概要

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


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

描述

scan 是一种集体算法,它将每个进程存储的值与所有秩较小的进程的值组合起来。这些值可以任意组合,通过函数对象 op 指定。值的类型 T 可以是任何可序列化的类型或具有关联 MPI 数据类型的类型。可以将此操作视为 gather 到某个进程,然后使用操作 op 对收集的值执行 std::prefix_sum()。第 i 个进程返回 std::prefix_sum() 发出的第 i 个值。

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

参数

comm

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

in_value

要与其他进程的本地值组合的本地值。对于数组变体,in_values 参数指向将要组合的 n 个本地值。

out_value

如果提供,第 i 个进程将接收值 op(in_value[0], op(in_value[1], op(..., in_value[i]) ... ))。对于数组变体,out_values 包含指向 n 个输出值存储的指针。前缀归约独立地发生在 in_values 引用的 n 个值中的每一个上,例如,对 n 个值的数组调用 scan 就像分别对 in_valuesout_values 中的每个位置调用 scan n 次。

op

将类型 T 的两个值组合成类型 T 的第三个值的二元运算。对于具有关联 MPI 数据类型的类型 Top 将被翻译成 MPI_Op(通过 MPI_Op_create),或者,如果可能,直接映射到内置的 MPI 操作。有关此映射的更多详细信息,请参阅 is_mpi_opoperations.hpp 头文件中的说明。对于任何非内置操作,交换性将由 is_commmutative 特征(也在 operations.hpp 中)确定。

返回值

如果未提供 out_value 参数,则返回前缀归约的结果。


PrevUpHomeNext