Модель системы с передачей сообщений. MPI-библиотеки, страница 3

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

- Синхронизация. Процессы ждут, пока все процессы из выделенного множества процессов не достигнут заданной точки, называемой точкой синхронизации.

- Движение данных. 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-алгоритма нужно с хорошо отлаженного высокопроизводительного последовательного алгоритма.

- Необходимо учитывать зернистость параллельного алгоритма. Увеличивая зернистость можно увеличить соотношение вычисления/обмен, что часто приводит к увеличению ускорения, а значит и производительности системы в целом.

- Следует избегать ненужной синхронизации, т.к. синхронизация процессов ведет к тому, что большое число процессов находятся в состоянии ожидания, не производя полезных операций.

- Следует избегать излишней буферизации, т.к. это ведет к снижению пропускной способности канала.

- Для уменьшения числа коммуникаций следует внимательно относиться к распределению данных в системе и стремиться максимально локализовать их.