Function reduce
boost::mpi::reduce — Combine the values stored by each process into a single value at the root.
Synopsis
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);
Description
<reduce
>- это коллективный алгоритм, который объединяет значения, сохраненные каждым процессом, в одно значение в<root
>. Значения могут быть объединены произвольно, заданными через объект функции. Тип<T
>значений может быть любым типом, который является сериализуемым или имеет связанный тип данных MPI. Можно рассматривать эту операцию как<gather
>к<root
>, за которой следует<std::accumulate()
>над собранными значениями и с использованием операции<op
>.
Когда тип<T
>имеет связанный тип данных MPI, эта процедура вызывает<MPI_Reduce
>для выполнения сокращения. По возможности будут использоваться встроенные операции MPI; в противном случае<reduce()
>будет создавать пользовательский MPI_. Для звонка в MPI_Reduce.
Параметры: | |
comm
| Коммуникатор, над которым произойдет сокращение. |
<in_value > | Локальное значение должно сочетаться с локальными значениями каждого другого процесса. Для уменьшения массивов<in_values >содержит указатель на локальные значения. В этом случае<n >— число значений, которое будет уменьшено. Сокращение происходит независимо для каждого из<n >значений, на которые ссылается<in_values >, например, вызов уменьшения на массив<n >значений подобен вызову<reduce ><n >отдельных раз, по одному для каждого местоположения в<in_values >и<out_values >. |
<op > | Бинарная операция, которая объединяет два значения типа<T >в третье значение типа<T >. Для типов<T >, связанных с типами данных MPI,<op >будет либо переведено в<MPI_Op >(через<MPI_Op_create >), либо, по возможности, отображено непосредственно на встроенную операцию MPI.<is_mpi_op > в заголовке<operations.hpp >для более подробной информации об этом отображении. Для любой невстроенной операции коммутативность будет определяться чертой<is_commmutative >(также в<operations.hpp >): пользователям рекомендуется отмечать коммутативные операции как таковые, поскольку это дает реализации дополнительную широту для оптимизации операции сокращения. |
<out_value > | Получит результат операции по сокращению, но только для процесса<root >. Некорневые процессы могут опускать параметр; если они выберут параметр, он будет неизменным. Для уменьшения массивов<out_values >содержит указатель на хранилище для выходных значений. |
<root > | Идентификационный номер процесса, который получит окончательное комбинированное значение. Это значение должно быть одинаковым для всех процессов. |