home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco  

next up previous contents
Next: MINLOС и MAXLOС Up: Глобальные операции редукции Previous: Функция Reduce   Contents

Предопределенные операции редукции

Следующие предопределенные операции могут использоваться MPI_REDUCE и родственными функциями MPI_ALLREDUCE, MPI_REDUCE_SCATTER и MPI_SCAN. Аргумент op может принимать следующие значения:

Имя Значение
   
MPI_MAX максимум
MPI_MIN минимум
MPI_SUM сумма
MPI_PROD произведение
MPI_LAND логическое И
MPI_BAND поразрядное И
MPI_LOR логическое ИЛИ
MPI_BOR поразрядное ИЛИ
MPI_LXOR логическое исключающее ИЛИ
MPI_BXOR поразрядное исключающее ИЛИ
MPI_MAXLOC максимальное значение и местонахождения
MPI_MINLOC минимальное значение и местонахождения

Операции MPI_MINLOC и MPI_MAXLOC обсуждаются далее в разделе 4.9.3. Для остальных предопределенных операций ниже приводятся разрешенные комбинации аргументов op и datatype. Но прежде определим группу основных типов данных MPI следующим образом:

Си integer: MPI_INT, MPI_LONG, MPI_SHORT,
MPI_UNSIGNED_SHORT, MPI_UNSIGNED,
MPI_UNSIGNED_LONG
ФОРТРАН integer: MPI_INTEGER
Floating point: MPI_FLOAT, MPI_DOUBLE, MPI_REAL, MPI_DOUBLE_PRECISION, MPI_LONG_DOUBLE
Logical: MPI_LOGICAL
Complex: MPI_COMPLEX
Byte: MPI_BYTE

Правильные типы данных для каждой операции определены ниже.

Op Разрешенные типы
   
MPI_MAX, MPI_MIN Си integer, ФОРТРАН integer, Floating point
MPI_SUM, MPI_PROD Си integer, ФОРТРАН integer, Floating point, Complex
MPI_LAND, MPI_LOR, MPI_LXOR Си integer, Logical
MPI_BAND, MPI_BOR, MPI_BXOR Си integer, ФОРТРАН integer, Byte

Пример 4.15 Процедура вычисляет скалярное произведение двух векторов, распределенных в группе процессов, и возвращает результат в нулевой узел.

SUBROUTINE PAR_BLAS1(m, a, b, c, comm) REAL a(m), b(m) ! локальная часть массива REAL c ! результат (на узле ноль) REAL sum INTEGER m, comm, i, ierr ! локальная сумма sum = 0.0 DO i = 1, m sum = sum + a(i)*b(i) END DO } !глобальная сумма CALL MPI_REDUCE(sum, c, 1, MPI_REAL, MPI_SUM, 0, comm, ierr) RETURN

Пример 4.16 Процедура вычисляет произведение вектора на массив, которые распределены в группе процессов, и возвращает результат в нулевой узел.

SUBROUTINE PAR_BLAS2(m, n, a, b, c, comm) REAL a(m), b(m,n) ! локальная часть массива REAL c(n) ! результат REAL sum(n) INTEGER n, comm, i, j, ierr !локальная сумма DO j= 1, n sum(j) = 0.0 DO i = 1, m sum(j) = sum(j) + a(i)*b(i,j) END DO END DO ! глобальная сумма CALL MPI_REDUCE(sum, c, n, MPI_REAL, MPI_SUM, 0, comm, ierr) RETURN


next up previous contents
Next: MINLOС и MAXLOС Up: Глобальные операции редукции Previous: Функция Reduce   Contents
Alex Otwagin 2002-12-10




 
 
Ramblers Top100 hit.ua: ЯЕИВЮЯ МЮ ЯЮИРЕ, ОНЯЕРХРЕКЕИ Х ОПНЯЛНРПНБ ГЮ ЯЕЦНДМЪ пЕИРХМЦ@Mail.ru