next up previous contents
Next: Внешние интерфейсы Up: Расширенные коллективные операции Previous: Обобщенная функция ''многие-ко-многим'' (all-to-all)   Contents

Исключающее сканирование

MPI-1 предоставляет операцию исключающего сканирования. Исключающее сканирование описывается здесь.


------------------------------------------------------------------ MPI_EXSCAN(sendbuf, recvbuf, count, datatype, op, comm) ------------------------------------------------------------------

IN sendbuf Стартовый адрес буфера передачи (по выбору)        
OUT recvbuf Стартовый адрес буфера приема (по выбору)        
IN count Количество элементов во входном буфере        
IN datatype Тип данных элементов входного буфера (указатель)        
IN op Операция (указатель)        
IN comm Интракоммуникатор (указатель)        

int MPI_Exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)

MPI_EXSCAN(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR) <type> SENDBUF(*), RECVBUF(*) INTEGER COUNT, DATATYPE, OP, COMM, IERROR

void MPI::Intracomm::Exscan(const void* sendbuf, void* recvbuf, int count, const MPI::Datatype& datatype, const MPI::Op& op) const

MPI_EXSCAN используется для того, чтобы выполнить префиксное сокращение данных, распределенных по группе. Значение в recvbuf для процесса с номером 0 неопределено и recvbuf не имеет смысла для данного процесса. Значение в recvbuf для процессе с номером 1 определено как значение в sendbuf для процесса с номером 0. Для процессов с номером $i>1$ операция возвращает в буфере приема процесса с номером $i$ редуцированные значения в буферах передачи процессов с номерами 0, Е, $i>1$ (включительно). Тип поддерживаемых операций, их семантика и ограничения, накладываемые на буферы приема и передачи, такие же, как и для MPI_REDUCE.

Опция in-place не поддерживается.

Совет пользователям: Что касается MPI_SCAN, MPI не определяет, которые процессы могут вызывать операцию, только то, что результат будет вычислен правильно. В частности обратите внимание, что процесс с номером 1 не требует вызова MPI_op, так как все, что он должен сделать, это получить значение от процесса с номером 0. Однако, все процессы, даже с нулевыми и единичными номерами, должны предоставить одинаковую op. []

Объяснение: Исключающее сканирование более общее, чем включающее, реализованное в MPI-1 в виде MPI_SCAN. Любая включающая операция сканирования может быть заменена исключающим сканированием, с последующим объединением локальных вкладов. Обратите внимание, что для неинвертируемых операций типа MPI_MAX, исключающее сканирование может дать результаты, которые не могут быть получены с помощью исключающего сканирования. []

Причиной выбора MPI-1 включающего сканирования является то, что определение поведения процессов 0 и 1, как думали, вызовет слишком много сложностей, особенно для определяемых пользователем операций.


next up previous contents
Next: Внешние интерфейсы Up: Расширенные коллективные операции Previous: Обобщенная функция ''многие-ко-многим'' (all-to-all)   Contents
Alex Otwagin 2002-12-10