Задача оптимального отображения.
Пусть

- граф некоторой прикладной задачи (точнее, используемого алгоритма решения этой задачи). Здесь

- вершины графа, отождествляемые с
процессами,

- ребра графа, отождествляемые с информационными связями между процессами:

- процессы

связаны информационно (точнее – процесс

передает информацию процессу

). Обозначим

вычислительные сложности процессов

, соответственно;

- количество информации в байтах, которое процесс

передает процессу

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

- граф (возможно, циклический) данной МВС. Здесь

- вершины графа, соответствующие процессорам,

- ребра графа, отождествляемые с
коммуникационной сетью:

=1 означает, что имеется возможность прямой передачи данных от процессора

процессору

;

=0 - такой возможности нет.
Производительности процессоров

обозначим

,

,...,

, соответственно. Связь

будем описывать двумя величинами:

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

(без учета времени

).
Введем в рассмотрение (

*

) отображающую матрицу

Заметим, что отображающая матрица

не выполняет
отображение дуг

графа

на дуги

графа

.
Рассмотрим в качестве примера
отображение графа

на граф

(см. рис. 1).
Рис. 1. а) Топология информационных связей процессов Q={Q1,...,Q6} в графе (Q,D). б) Коммуникационная сеть процессоров P={P1,...,P4} в графе (P,C) и отображение процессов Q={Q1,...,Q6} на эту сеть.
Как всякая задача
отображения графа на граф, задача оптимального отображения является

-сложной. Отсюда следует, что принципиально не существует универсальных методов решения этой задачи.
Балансировки загрузки.
Назовем вычислительной загрузкой
процессора 
величину
 | (2) |
а его коммуникационной загрузкой – величину
 | (3) |
 | (4) |
Минимаксная задача (1), (4) формализует, в частности, компромисс между двумя следующими тенденциями. С одной стороны, увеличение числа
процессоров, между которыми распределены вычисления, уменьшает общее время решения задачи (до некоторого числа процессоров). С другой стороны, распределение вычислений между многими процессорами увеличивает коммуникационные расходы, что увеличивает общее время решения задачи.
В общей постановке задача (1), (4) является

-сложной задачей целочисленного нелинейного программирования. Однако хорошие приближенные методы решения этой задачи (особенно без учета коммуникационной загрузки
процессоров) разработать проще.
В некоторых случаях задача (1), (4) может быть решена точно. Например, если граф

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

одинаковых полос (по числу
процессоров в системе) и назначение каждой из этих полос своему процессору. Подобная ситуация может иметь место при решении краевых задач для ДУЧП
методом конечных разностей.
Заметим, что задачи
балансировки загрузки может быть поставлена не только в терминах
математического программирования, но и в других терминах. Например, в терминах теории графов задача может быть сформулирована следующим образом: разрезать граф

на

частей так, чтобы суммарный вес разрезанных ребер был минимальным, а суммарные веса вершин, входящих в разрезанные части, примерно равны. Если в графе

имеет место передача большого количества коротких сообщений, то вместо суммарного веса разрезанных ребер следует минимизировать число разрезанных ребер, поскольку основное время при передаче короткого сообщения тратится на инициализацию самого
процесса передачи данных.
Примером задач, для которых
статическая балансировка загрузки неэффективна, являются задачи моделирования горения с помощью разностных схем. Время обработки узлов сетки, в которых интенсивно протекают химические реакции (эти точки расположены на фронте пламени), значительно превышает время обработки узлов сетки, в которых горения не происходит. Если используемая конечно-разностная сетка разрезана на равные полосы по числу
процессоров в системе, то узлы сетки, которые захвачены фронтом горения, могут оказаться локализованными на небольшом числе процессоров и несбалансированность загрузки процессоров может быть очень велика. Для
балансировки загрузки процессоров в этом случае необходимо перераспределять "горячие" узлы сетки между всеми процессорами. Поскольку фронт пламени смещается в ходе решения задачи, статически это сделать невозможно. В то же время динамическое перераспределение узлов сетки может дать хорошие результаты.
- когда процессоры обмениваются информацией о своей текущей загрузке,
- где принимается решение о перераспределении загрузки,
- когда производится перераспределение загрузки,
- в соответствии с каким алгоритмом происходит перераспределение загрузки.
Процессоры могут обмениваться информацией о своей текущей загрузке на каждой итерации решения задачи, периодически, когда загрузка процессора станет меньше некоторой допустимой, по появлении свободного процессора, по отторжении
процесса процессором вследствие перегрузки и т.д.

Решение о перераспределении загрузки может приниматься централизованно (на основе глобальной информации о загрузке) и децентрализовано (на основе только локальной информации о загрузке).

Перераспределение загрузки может происходить синхронно и асинхронно.

В качестве алгоритмов перераспределения загрузки могут использоваться детерминированные и стохастические алгоритмы, алгоритмы, в которых перераспределение загрузки производится по инициативе получателя и по инициативе отправителя и пр.
Задача
балансировки загрузки обычно решается программными средствами, хотя имеются и аппаратные реализации.
Заметим, что проблема обеспечения сбалансированной загрузки
процессоров в ходе решения задачи является одним из основных препятствий на пути эффективного использования
многопроцессорных вычислительных систем. Несмотря на ощутимые успехи в решении задач статической и
динамической балансировки загрузки, типичный коэффициент интегральной загрузки большинства систем массового параллелизма составляет по разным оценкам всего от 10% до 3%. И это несмотря на наличие алгоритмов и программ, обеспечивающих весьма высокий (часто более 90%) коэффициент
распараллеливания при решении многих задач.