MPI_Scatter(sendbuf,sendcount,MPI_FLOAT,recvbuf, recvcount,




MPI_FLOAT,source,MPI_COMM_WORLD);

printf("rank= %d Results: %f %f %f %f\n", rank, recvbuf[0],recvbuf[1],recvbuf[2],recvbuf[3]);

}

Else

printf("Число процессов должно быть равно %d. \n", SIZE);

MPI_Finalize();

}

MPI_Allreduce

int MPI_Allreduce(void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)

sbuf — адрес начала буфера для аргументов операции ор;

out rbuf — адрес начала буфера для результата операции ор;

countop — число аргументов у каждого процесса;

datatype — тип аргументов;

ор — идентификатор глобальной операции;

comm — идентификатор коммуникатора.

Данная функция задает выполнение count независимых глобальных операций ор. Предполагается, что в буфере sbuf каждого процесса расположено count аргументов, имеющих тип datatype. Первые элементы массивов sbuf участвуют в первой операции ор, вторые элементы массивов sbuf участвуют во второй операции ор и т.д. Результаты выполнения всех count операций записываются в буфер rbuf на каждом процессе. Значения параметров count, datatype, op и comm у всех процессов должны быть одинаковыми. Из соображений эффективности реализации предполагается, что операция ор обладает свойствами ассоциативности и коммутативности.

MPI_Reduce

int MPI_Reduce(void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)

sbuf — адрес начала буфера для аргументов;

out rbuf — адрес начала буфера для результата;

count — число аргументов у каждого процесса;

datatype — тип аргументов;

ор — идентификатор глобальной операции;

root — процесс-получатель результата;

comm — идентификатор коммуникатора.

Функция аналогична предыдущей, но результат операции будет записан в буфер rbuf не у всех процессов, а только у процесса root.

MPI_Barrier

Int MPI_Barrier(MPI_Comm comm)

comm — идентификатор коммуникатора.

Функция блокирует работу вызвавших ее процессов до тех пор, пока все оставшиеся процессы коммуникатора comm также не выполнят эту процедуру. Только после того, как последний процесс коммуникатора выполнит данную функцию, все процессы будут разблокированы и продолжат выполнение дальше. Данная функция является коллективной. Все процессы должны вызвать MPI_Barrier, хотя реально исполненные вызовы различными процессами коммуникатора могут быть расположены в разных местах программы.

MPI_Comm_split

int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)

comm — идентификатор существующего коммуникатора;

color — признак разделения на группы;

key — параметр, определяющий нумерацию в новых группах;

out newcomm — идентификатор нового коммуникатора.

Данная процедура разбивает все множество процессов, входящих в группу comm, на непересекающиеся подгруппы — одну подгруппу на каждое значение параметра color. Значение параметра color должно быть неотрицательным целым числом. Каждая новая подгруппа содержит все процессы, у которых параметр color имеет одно и тоже значение, т.е. в каждой новой подгруппе будут собраны все процессы "одного цвета". Всем процессам подгруппы будет возвращено одно и тоже значение newcomm.

MPI_Comm_free

Int MPI_Comm_free(MPI_Comm comm)

out comm — идентификатор коммуникатора.

Появление нового коммуникатора всегда вызывает создание новой структуры данных. Если созданный коммуникатор больше не нужен, то соответствующую область памяти необходимо освободить. Данная функция уничтожает коммуникатор, ассоциированный с идентификатором comm, который после возвращения из функции будет иметь предопределенное значение MPI_COMM_NULL.

Список соответствия типов данных для языка С и MPI

MPI_Datatype C datatype

MPI_CHAR signed char

MPI_SHORT signed short int

MPI_INT signed int

MPI_LONG signed long int

MPI_UNSIGNED_CHAR unsigned char

MPI_UNSIGNED_SHORT unsigned short int

MPI_UNSIGNED unsigned int

MPI_UNSIGNED_LONG unsigned long int

MPI_FLOAT float

MPI_DOUBLE double

MPI_LONG_DOUBLE long double

MPI_BYTE

MPI_PACKED

Типы MPI_BYTE и MPI_PACKED не имеют соответствия в языке С. Значением типа MPI_BYTE является байт. Байт не интерпретируется и отличен от символа. Различные машины могут иметь различное представление для символов или могут использовать для представления символов более одного байта. С другой стороны, байт имеет то же самое двоичное значение на всех машинах.

Составители: И.А. Мищук, А.В. Письменский, А.С. Антонов.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: