Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

malyshkin_ve_korneev_vd_-_parallelnoe_programmirovanie_multikompyuterov

.pdf
Скачиваний:
63
Добавлен:
28.03.2016
Размер:
3.12 Mб
Скачать

При реализации линеаризованного алгоритма могут возникать специфические дедлоки из-за недостатка ресурсов,

пример показан на рис. 5.7. Если обмен между ПЭ идет через каналы по схеме ПЭi-1 ↔ ПЭi ↔ ПЭi+1, то процессы при обмене должны быть синхронизованы, т.е., к примеру, для обмена блоком данных c112 процессы p1 и p2 должны дождаться друг друга, произвести передачу данных c112 (в направлении по стрелке на рисунке) и далее продолжать вычисления асинхронно.

 

C112

 

 

C123

 

C134

 

 

 

 

 

 

 

 

C212

 

 

C223

 

C234

 

. . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P1

P2

P3

 

P4

Рис. 5.7.

Если доступны только два ПЭ, то процесс p1 будет выполняться на ПЭ1, p2 - на ПЭ2, процесс p1 сможет передать блок данных c112 процессу p2 и продолжит вычисления. Так как процесс p3 не выполняется (нет свободного ПЭ), то процесс p2

не сможет передать в p3 блок данных c123 и перейдет в состояние ожидания. По этой причине и процесс p1 перейдет в состояние ожидания, когда понадобится передать в p2 блок данных c212.

Если два ПЭ имеют общую память (и тогда взаимодействия

158

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

Существует, конечно, и верхняя граница необходимых ресурсов,

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

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

Память асинхронного канала также делится роллингом и в некоторые моменты времени t0 и t1, t0 < t1, блоки данных могут размещаться там так, как показано на рис. 5.8. Такой канал может также служить средством для реализации асинхронного

MPI.

159

t0

C 112

C 123

C 112

 

 

 

 

t1

C 223

C 223

C 212

 

 

 

 

Рис. 5.8

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

a)c112, c123, c134,..., c1(n-1)n, c212, c223,..., c2(n-1)n

b)c112, c212, c123, c223,...

c)c112, c123, c212, c134, c223,...

Роллинг какого-либо ресурса не всегда эффективен.

Например, если процессы занимают ПЭ существенно разное время и нет между ними взаимодействий, необходимо вместо

160

роллинга ПЭ использовать схему назначения процесса на первый освободившийся ПЭ. В языке параллельного программирования по умолчанию может для распределения ресурсов использоваться, к примеру, схема роллинга, но при необходимости она должна заменяться другой, что указывает программист специальным оператором. Более того, для каждого вида ресурсов может выбираться свой М-алгоритм, именно так реализован выбор М-алгоритма в СПП Иня [10].

Понятно, что если каждый ПЭ связан с двумя соседними,

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

5.5.Система параллельного сборочного программирования Иня

Можно указать на специфические особенности параллельного программирования крупноблочных мультикомпьютеров. Во-первых, в соответствии с их архитектурой весь ввод/вывод данных осуществляется управляющей(-ими) ЭВМ и, следовательно, программа должна

161

использовать максимально выделенные ей ресурсы,

динамически, в ходе вычислений, настраиваться на доступные ресурсы: оперативную память, устройства и каналы ввода/выводы.

Вторым динамически захватываемым ресурсом являются ПЭ. Каждая программа должна захватить необходимое количество ПЭ. В-третьих, параллельная программа в Ине собирается из модулей - заранее подготовленных фрагментов вычислений, причем программа для ПЭ собирается динамически непосредственно перед загрузкой ПЭ. В зависимости от количества ресурсов ПЭ (памяти данных и программ) в

очередной ПЭ загружается соответствующее количество данных и формируется (собирается из модулей) нужная программа обработки.

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

162

программа должна эффективно исполняться на любом собранном

крупноблочном линейном иерархической мультикомпьютере.

5.5.1.

Основные компоненты СПП

СПП

Иня предназначена для программирования

иерархических мультикомпьютеров и состоит из двух основных компонент. Первый - система динамического распределения ресурсов, составляющая своеобразный “ ассемблерный” уровень параллельного программирования. Второй - язык и система программирования на Ине.

Система управления вычислительными ресурсами может быть реализована в двух формах: в форме децентрализованной управляющей программы и централизованного монитора.

5.5.2. Децентрализованное управление

Управляющая программа применяется в первую очередь в мультикомпьютере с простой радиальной структурой связей между управляющей ЭВМ и ПЭ (рис. 5.9). Для захвата ПЭ используется обычный для операционных систем метод управления ресурсами посредством очередей. Из своей программы, написанной на Фортране или C или другом подобном языке, пользователь обращается к управляющей программе с помощью операторов-подпрограмм. Одна из них -

INIT, позволяет задаче захватить конкретное число ПЭ (десять,

163

например) либо некоторое число ПЭ, например, в интервале

(2,8), то есть, допустим захват любого числа ПЭ, но не меньше двух и не больше восьми. Все ПЭ захватываются в монопольное владение.

ХОСТ

ПЭ1

 

ПЭ2

 

ПЭ3

 

 

 

ПЭ4

 

 

 

 

 

 

 

 

 

 

ПЭ5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 5.9.

Подпрограмма SET объявляет текущим один из доступных ПЭ.

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

позволяет управляющей ЭВМ дождаться завершения работы одного конкретного ПЭ или всех захваченных задачей ПЭ. А

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

Подпрограмма RELEASE освобождают один или все ПЭ.

164

Рассмотрим небольшой пример параллельной программы,

вычисляющей скалярное произведение 10 пар векторов длины

1000 с вещественными компонентами. Векторы задаются двумя матрицами V(1000,10) и W(1000,10). Предполагается, что параллельная программа выполняется в многозадачной ОС и несколько параллельных программ могут исполняться одновременно, конкурируя и разделяя динамически процессорные элементы. Каждый ПЭ вычисляет скалярное произведение одной пары векторов.

Текст программы записан со сдвигом от начала строки,

комментарии к программе пишутся с начала строки. Оставляя в стороне несущественные для понимания детали, параллельная программа выглядит так (используется вызов подпрограмм из Фортрана).

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

REAL V(1000,10), W(1000,10), C(10)

C(i), i=1,...,10, хранит скалярное произведение

V(*, i), W(*, i),

 

. . .

 

Программа

должна быть в состоянии исполняться

на

любом

числе процессорных элементов от двух

до

10.

 

CALL INIT (PNUMB, ACTION, STATUS)

165

Захватываются доступные ПЭ. Значение PNUMB

равно (2,10), представление пары чисел в Фортране не обсуждается. PNUMB определяет, что программа запрашивает ПЭ числом не меньше 2-х

и не более 10.

Если мультикомпьютер имеет только 5 ПЭ (рис. 5.9), то

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

Каждый ПЭ является отдельным ресурсом ОС. Программа INIT

запрашивает ПЭ1. Если ПЭ1 свободен, он захватывается INIT в

монопольное использование. Поскольку минимально необходимого количества ПЭ - 2-х - еще не захвачено, программа

INIT запрашивает ПЭ2. Если ПЭ2 занят, тогда запрашивается ПЭ3 и т.д. до последнего ПЭ (в нашем случае до ПЭ5). Если захвачено 2 или более ПЭ, то программа INIT нормально завершает работу. Если нет, то допускаются два варианта поведения программы INIT.

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

166

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

Значение параметра STATUS сообщает главной программе результат исполнения INIT, в том числе и количество PN

захваченных ПЭ. Все захваченные ПЭ нумеруются (логически)

последовательно ПЭ1, ПЭ2, ... , ПЭn, nPN. Эти логические номера могут быть использованы в программе для назначения некоторой работы на конкретный ПЭ. Физические номера ПЭ в программе недоступны.

Следующий фрагмент программы - это цикл по числу пар векторов. В теле цикла формируется программа для ПЭ,

пересылается в память ПЭ, туда же пересылаются входные данные, затем ожидается завершение вычислений в ПЭ,

забирается из ПЭ в управляющую ЭВМ результат.

167

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]