
424_9_ / MPI-collective_operations.otp
.pdf
Односторонние взаимодействия

Работа с памятью
В некоторых системах операции передачи сообщений и удаленный доступ к памяти (RMA) выполняются быстрее при доступе к специально распределенной памяти (например, память, которая разделена другими процессами в группе связи на SMP).
MPI обеспечивает механизм для распределения и освобождения такой специальной памяти.
Использование такой памяти для передачи сообщений или RMA не обязательно, и эта память может использоваться без ограничений, как любая другая динамически распределенная память.

Удаленный доступ к памяти (RMA) расширяет механизмы взаимодействий MPI, позволяя одному процессу определить все коммуникационные параметры как для посылающей стороны, так и для получающей.
Каждый процесс может вычислить, к каким данным других процессов ему потребуется обратиться или какие данные модифицировать.
В то же время, процессы могут не знать, к каким данным в их собственной памяти потребуется обратиться удаленным (remote) процессам или что им потребуется модифицировать, мало того, они могут даже не знать, что это за процессы. Таким образом, параметры передачи оказываются доступными полностью только на одной стороне.

Управление памятью
MPI_ALLOC_MEM(size, info, baseptr)
IN |
size |
размер сегмента памяти в байтах |
IN |
info аргумент информации |
|
OUT |
baseptr |
указатель на начало распределенного |
|
сегмента памяти |
int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
MPI_FREE_MEM(base)
IN base начальный адрес сегмента памяти, распределенного MPI_ALLOC_MEM
int MPI_Free_mem(void *base)

Создание окна
Операция инициализации позволяет каждому процессу из группы интракоммуникаторов определить, используя коллективную операцию, «окно» в своей памяти, которое становится доступным для удаленных процессов.

Создание и удаление окна
MPI_WIN_CREATE(base, size, disp_unit, info, comm,win)
IN |
base |
начальный адрес окна |
|
IN |
size |
размер окна в байтах |
|
IN |
disp_unit |
размер локальной единицы смещения в |
|
|
байтах |
|
|
IN |
info аргумент info |
||
IN |
comm |
коммуникатор |
|
OUT |
win |
оконный объект, вызвращаемый вызовом |
int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win)
MPI_WIN_FREE(win)
INOUT win оконный объект (дескриптор)
int MPI_Win_free(MPI_Win *win)

MPI_PUT(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win)
IN |
origin_addr начальный адрес буфера инициатора |
IN |
origin_count число записей в буфере инициатора |
IN |
origin_datatype тип данных каждой записи в |
|
буфере инициатора |
IN |
target_rank номер получателя |
IN |
taget_disp смещение от начала окна до буфера |
|
получателя |
IN |
target_count число записей в буфере получателя |
IN |
target_datatype тип данных каждой записи в |
буфере получателя |
|
IN |
win оконный объект, используемый для |
коммуникации
int MPI_Put(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)

MPI_GET(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win)
OUT |
origin_addr начальный адрес буфера инициатора |
IN |
origin_count число записей в буфере инициатора |
IN |
origin_datatype тип данных каждой записи в |
|
буфере инициатора |
IN |
target_rank ранк получателя |
IN |
target_disp смещение от начала окна до буфера |
|
адресата |
IN |
target_count число записей в буфере адресата |
IN |
target_datatype тип данных каждой записи в |
|
буфере адресата |
IN |
win оконный объект, используемый для |
|
коммуникации |
int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)

Синхронизация 1.
Коллективный синхронизационный MPI_WIN_FENCE вызов обеспечивает простую модель синхронизации, которая часто используется при параллельных вычислениях: а именно, слабосинхронную модель (loosely synchronous model), когда общие вычислительные фазы перемежаются с фазами общих комуникаций.

Синхронизация 2.
Четыре функции MPI_WIN_START,
MPI_WIN_COMPLETE, MPI_WIN_POST и MPI_WIN_WAIT могут использоваться чтобы свести синхронизацию к минимуму: синхронизируются только пары взаимодействующих процессов, и это происходит только тогда, когда синхронизация необходима, чтобы корректно упорядочить RMA обращения к окну принимая во внимание локальные обращеня к этому же окну.