Параллельная обработка данных



Технологии параллельного программирования - часть 10


Сборка данных со всех процессов в буфере rbuf процесса dest. Каждый процесс, включая dest, посылает содержимое своего буфера sbuf процессу dest. Собирающий процесс сохраняет данные в буфере rbuf, располагая их в порядке возрастания номеров процессов. Параметр rbuf имеет значение только на собирающем процессе и на остальных игнорируется, значения параметров count, datatype и dest должны быть одинаковыми у всех процессов.

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

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

    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 - тип аргументов
  • op - идентификатор глобальной операции
  • root - процесс-получатель результата
  • comm - идентификатор группы
  • Функция аналогична предыдущей, но результат будет записан в буфер rbuf только у процесса root.

    Синхронизация процессов

    int MPI_Barrier( MPI_Comm comm)

  • comm - идентификатор группы
  • Блокирует работу процессов, вызвавших данную процедуру, до тех пор, пока все оставшиеся процессы группы comm также не выполнят эту процедуру.

    Работа с группами процессов

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

  • comm - идентификатор группы
  • color - признак разделения на группы
  • key - параметр, определяющий нумерацию в новых группах
  • OUT newcomm - идентификатор новой группы



  • Содержание  Назад  Вперед