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

malyshkin_ve_korneev_vd_-_parallelnoe_programmirovanie_multikompyuterov

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

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

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

5.3. Линейные алгоритмы

Иерархические мультикомпьютеры являются, конечно,

весьма универсальными вычислительными системами и трудно представить себе практически важную комплексную задачу,

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

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

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

148

определяющие необходимое представление, - условия

линейности алгоритма - состоят в следующем:

1).На множестве операций алгоритма должен быть определен линейный порядок. В параллельной программе операции соответствует выполнение некоторой процедуры,

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

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

аj, то j=i±b k, k=1,2,...,n, bk, n - целые константы и существует такая целая константа m, что любая операция ai взаимодействует только с операцией aj, aj {ai-m,...,ai+m}. Такое взаимодействие называется линейным.

Множество {ai-m,...,ai+m} будем называть m-окрестностью операции аi. Ограничения на структуру взаимодействий здесь не

накладываются, однако

предполагается, что если при

отображении

алгоритма

на ресурсы

мультикомпьютера

операции m-окрестности {ai-m,...,ai+m}

будут назначены на

процессоры,

то все взаимодействия

 

операции аi могут

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

149

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

Условие 2) линейности взаимодействий можно заменить в общем случае условием наличия такой целой константы алгоритма m, что любая операция аi взаимодействует только с операцией аj из ее m-окрестности {ai-m,...,ai+m}. Теперь, однако,

требуется, чтобы коммуникационная сеть обеспечивала любые коммуникации в m-окрестности.

Неформально, алгоритм линеаризован, если его операции линейно упорядочены и длина коммуникаций любых процессов ограничена константой. Для практики полезны алгоритмы с малой длиной коммуникаций, лучше всего, когда m=1.

Рассмотрим следующий пример. Пусть дана матрица A

размерности s×t и необходимо последовательно перевычислять ее элементы (некоторая фильтрация):

A0ij = Aij,

A1ij = f1(E1(A0ij),b1),

A2ij = f2(E2(A1ij),b2),

.

 

.

 

.

 

Akij = fk(Ek(Ak-1ij),bk)

(1)

150

i {1,2,...,s}, j

{1,2,...,t},

k - целая положительная

константа.

Здесь Ek - окружение элемента Aij, bk - матрица.

К примеру,

0

0,5

0

 

b1 = 0.5

1

0.5,

E1 = (Ai-1,j, Ai+1,j, Ai,j, Ai,,j-1,

Ai,,j+1)

 

 

 

0

0,5

0

 

Здесь (1) есть система рекуррентных соотношений,

которые часто используются в программировании для задания массовых вычислений. В программе, реализующей алгоритм (1),

функции f1,...,fk вычисляются процедурами. Упорядочим операции алгоритма так, чтобы вычисление элементов матрицы A

выполнялось бы построчно (верхний индекс функции указывает номер операции в упорядочивании):

A122 = f11(E1(A022)b1), A123 = f21(E1(A023)b1), A124 =

f31(E1(A024)b1),

... , A133 = f2(s-2)(t-2)(E2(A133)b2), ... ,

Ясно, что m зависит от размеров матрицы A и не является константой алгоритма. Следовательно, алгоритм в

151

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

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

вычислений в новую операцию с большим объемом вычислений.

Для алгоритма фильтрации линеаризация делается следующим образом. Матрица A делится на перекрывающиеся

полосы A1,A2,...,An (рис.

5.2). Все вычисления Apij = fp(Ep(Aijp-1)),

p=1,2,...,k, выполняющиеся в полосе Ar, r=1,...,n,

объединяются

в новую операцию ar.

Операции a1,a2,...,an

определяют

алгоритм, функционально эквивалентный (1), операции линейно

упорядочены.

При

достаточно

 

большом

перекрытии

взаимодействий нет.

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

A1

 

A2

 

 

. . . .

 

 

An

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 5.2.

Если значение k велико, то и число столбцов в перекрытии будет большим. Чтобы уменьшить это число, после вычисления Apij во всей полосе Ar, перед вычислением Aijp+1, нужно восстанавливать

152

столбцы перекрытия обменом между операциями ar-1, ar, ar+1. В

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

таких, что в одном ПЭ еще может быть размещена полоса Ar,

значение m мало и является константой при значительных изменениях размера матрицы A.

5.4. Динамическое отображение алгоритма на ресурсы

мультикомпьютера

Теперь можно зафиксировать М-алгоритм. Рассмотрим характерный для массовых вычислений пример. Пусть задан файл f, состоящий из n записей. Каждую запись необходимо считать в оперативную память управляющей ЭВМ (операция in)), затем переслать в ПЭ (операция put), там обработать без взаимодействий (операция run), переслать результат в управляющую ЭВМ (операция get)) и далее во внешнюю память (операция out), рис. 5.3.

153

p1,p2,...

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

in i

 

 

i

 

 

 

put i

 

 

 

 

i

 

 

run i

 

 

 

i

 

 

 

 

get i

 

 

i

 

 

out i

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

2

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

1

 

 

 

 

 

 

 

1

 

 

 

 

 

 

1

 

 

 

 

 

 

 

1

 

 

 

 

 

 

1

 

f

 

 

 

 

inbuf

 

 

 

 

 

c

 

 

 

 

 

 

c1

 

 

outbuf

 

 

 

 

f1

Рис. 5.3.

Алгоритм линеен. Порядок на множестве операций следующий:

in1, put1, run1, get1, out1, in2, put2,... . Последовательность

i

выполнений операций ini puti runi geti outi образуют процесс

pi.

Каждый процесс pi - конечное множество последовательно

исполняемых операций алгоритма. Порядок на

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

Знание же внутреннего устройства процессов позволяет более эффективно разделять общие ресурсы.

Динамически распределяемыми ресурсами являются ПЭ,

оперативная память управляющей ЭВМ для размещения входных

(inbuf) и выходных (outbuf) буферов ввода/вывода. Тогда, если доступны два ПЭ1 и ПЭ2, три входных буфера b1,b2,b3 и два выходных буфера a1,a2 (рис. 5.4), то они будут приписаны

154

динамически процессам следующим образом (p1,b1,PE1,a1),

(p2,b2,PE2,a2), (p3,b3,PE1,a3), (p4,b4,PE2,a4), ... .

П Э 1

 

 

 

 

 

П Э 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b 1

 

 

b 2

 

 

b 3

 

 

 

 

 

 

 

 

 

 

in

p u t

r u n g e t o u t

p 1

p 2

p 3

 

. . .

 

p n

а 1

а 2

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 5.4.

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

роллингом.

При организации вычислений процессы будут

выполняться

строго в порядке

возрастания номеров,

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

Если ПЭ - сложный вычислитель, то ему для выполнения передается конечная последовательность процессов (в заданном порядке), которые затем распределяются на подчиненные ПЭ.

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

155

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

t0

 

 

 

 

t

 

 

 

 

 

 

 

 

 

in1

put1

run1

get1

out1

 

 

in2

put2

run2

get2

out2

 

 

in3

. . . . . . put3

 

run3

get3

out3

 

 

 

in4 . . . . . . .

put4

run4

get4 out4

Рис. 5.5.

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

далее каждый участок в свою очередь может быть поделен на участки и т.д.

На рис. 5.6 показана еще одна схема организации вычислений линеаризованного алгоритма умножения матриц

C=A*B. Матрица B делится динамически на столько вертикальных полос, сколько ПЭ доступно в момент исполнения

156

программы,

и вводятся

в ПЭ.

Матрица

A делится

на

горизонтальные полосы A1,A2,...,An

так, чтобы в одном ПЭ могло

быть вычислено произведение

Cij=Ai*Bj,

далее полосы

A1,A2,...,An

“ составом”

вводятся в ПЭ1, далее сдвигаются

в

ПЭ2,..., ПЭm, в каждом ПЭ производятся вычисления Cij=Ai*Bj,.

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

Ограничение трудно удовлетворить в общем случае, но для

массовых вычислений это, как правило,

нетрудно сделать.

 

 

 

 

A

B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

 

b 1

 

b 2

 

 

. . .

 

 

b m

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C ij = A i * B j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A n

 

 

 

i { 1 ,2 ,...,n } , j { 1 ,2 ,...,m }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A n

 

 

. . .

 

 

 

A 3

 

 

A 2

 

 

 

 

 

A 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПЭ 1

 

 

ПЭ 2

 

 

 

 

 

ПЭ 3

. . .

 

ПЭ m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B 1

 

 

B 2

 

 

 

 

B 3

 

 

 

B m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C 3 1

 

 

C 2 2

 

 

 

C 1 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C 2 1

 

 

C 1 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C 1 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 5.6.

157

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