next up previous contents
Next: Группировка данных для пересылки Up: Коллективные коммуникации Previous: Редукция   Contents

Другие функции для коллективных коммуникаций

MPI поддерживает некоторые другие функции для организации коллективных коммуникаций:

int MPI_Barrier(MPI_Comm comm);
MPI_Barrier() предоставляет механизм синхронизации всех процессов в коммуникаторе comm. Каждый процесс коммуникатора приостанавливается, пока все процессы в comm не вызовут MPI_Barrier():

int MPI_Gather(void* send_buf, int send_count,

    MPI_Datatype send_type, void* recv_buf,

    int recv_count, MPI_Datatype recv_type, int root,

    MPI_comm comm);

Каждый процесс в comm посылает содержание send_buf процессу с рангом root. Процесс root соединяет полученные данные в порядке, соответствующем рангам процессов и помещает их в recv_buf. Аргументы recv имеют значение только в процессе с рангом root. Аргумент recv_count указывает число элементов, полученных от каждого процесса, но не общее количество:

int MPI_Scatter(void* send_buf, int send_count,

    MPI_Datatype send_type, void* recv_buf,

    int recv_count, MPI_Datatype recv_type, int root,

    MPI_Comm comm);

Процесс с рангом root распределяет содержимое send_buf среди всех остальных процессов. Содержимое send_buf разделяется на p сегментов, каждый из которых содержит send_count элементов. Первый сегмент передается процессу 0, второй - процессу 1 и т.д. Аргументы send имеют значение только в процессе root:

int MPI_Allgather(void* send_buf, int send_count,

    MPI_Datatype send_type, void* recv_buf,

    int recv_count, MPI_Datatype recv_type,

    MPI_comm comm);

MPI_Allgather() собирает содержимое всех send_buf от каждого из процессов. Эффект вызова сравним с последовательностью p вызовов MPI_Gather(), в каждом из которых процесс root имеет собственный ранг:

int MPI_Allreduce(void* operand, void* result,

    int count, MPI_Datatype datatype, MPI_Op op,

    MPI_Comm comm);

MPI_Allreduce() сохраняет результат операции редукции op в буфере result каждого из процессов.



2004-06-22