Под операциями группового обмена понимают функции коммуникации, в которых участвует большое число процессов. Обычно библиотека позволяет выделять из всего множества процессов группу процессов для участия в групповой операции. Функции, участвующие в групповом обмене являются блокирующими. Различают три типа операций:
- Синхронизация. Процессы ждут, пока все процессы из выделенного множества процессов не достигнут заданной точки, называемой точкой синхронизации.
- Движение данных. Broadcast, gather/scatter, all-to-all.
- Групповые вычисления. Выделенный процесс из группы процессов собирает данные из всех остальных процессов и выполняет операцию (max, min, add, mul и т.п.) над ними.
----------------- ----------------P0 | A | | | | | A | | | |
----------------- --------------------------------- ----------------P1 | | | | | | A | | | |
----------------- Broadcast --------------------------------- ========> ----------------P2 | | | | | | A | | | |
----------------- --------------------------------- ----------------P3 | | | | | | A | | | |
----------------- -----------------
----------------- ----------------P0 | A | B | C | D | | A | | | |
----------------- --------------------------------- Scatter ----------------P1 | | | | | ========> | B | | | |
----------------- --------------------------------- <======== ----------------P2 | | | | | Gather | C | | | |
----------------- --------------------------------- ----------------P3 | | | | | | D | | | |
----------------- -----------------
--------------------- --------------------P0 | A0 | A1 | A2 | A3 | | A0 | B0 | C0 | D0 |
--------------------- ----------------------------------------- --------------------P1 | B0 | B1 | B2 | B3 | | A1 | B1 | C1 | D1 |
--------------------- All-to-all ----------------------------------------- =========> --------------------P2 | C0 | C1 | C2 | C3 | | A2 | B2 | C2 | D2 |
--------------------- ----------------------------------------- --------------------P3 | D0 | D1 | D2 | D3 | | A3 | B3 | C3 | D3 |
--------------------- --------------------Способы увеличения производительности системы
Существует несколько способов увеличения производительности программ, написанных в MPI-стиле. Их всегда следует учитывать при разработке алгоритмов.
- Начинать написание параллельного MPI-алгоритма нужно с хорошо отлаженного высокопроизводительного последовательного алгоритма.
- Необходимо учитывать зернистость параллельного алгоритма. Увеличивая зернистость можно увеличить соотношение вычисления/обмен, что часто приводит к увеличению ускорения, а значит и производительности системы в целом.
- Следует избегать ненужной синхронизации, т.к. синхронизация процессов ведет к тому, что большое число процессов находятся в состоянии ожидания, не производя полезных операций.
- Следует избегать излишней буферизации, т.к. это ведет к снижению пропускной способности канала.
- Для уменьшения числа коммуникаций следует внимательно относиться к распределению данных в системе и стремиться максимально локализовать их.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.