
Танненбаум Е. Архітектура компютера [pdf]
.pdf
Мультикомпьютеры с передачей сообщений |
63 |
она сделает вызов позднее, когда у нее будет время. В результате отправитель в обще не блокируется. Недостаток этого метода состоит в том, что когда отправ тель продолжает работу после совершения операции send, он не может снова и пользовать буфер сообщений, так как есть вероятность, что сообщение еще н отправлено. Отправитель каким-то образом должен определять, когда он мож снова использовать буфер. Например, можно опрашивать систему или соверша прерывание, когда буфер имеется в наличии. В обоих случаях программное обе печение очень сложное.
В следующих двух разделах мы рассмотрим две популярные системы с перед чей сообщений, которые применяются во многих мультикомпьютерах: PVM и MP Существуют и другие системы, но эти две наиболее распространенные.
PVM — виртуальная машина параллельного действия
PVM (Parallel Virtual Machine — виртуальная машина параллельного действия)
это система с передачей сообщений, изначально разработанная для машин CO с операционной системой UNIX [45, 142]. Позднее она стала применяться в др гих машинах, в том числе в системах МРР. Это самодостаточная система с упра лением процессами и системой ввода-вывода.
PVM состоит из двух частей: библиотеки, вызываемой пользователем, и «ст рожевого» процесса, который работает постоянно на каждой машине в мульт компьютере. Когда PVM начинает работу, она определяет, какие машины должн быть частью ее виртуального мультикомпьютера. Для этого она читает конфиг рационный файл. «Сторожевой» процесс запускается на каждой из этих маши Машины можно добавлять и убирать, вводя команды на консоли PVM.
Можно запустить п параллельных процессов с помощью команды spawn -count n prog
Каждый процесс запустит prog. PVM решает, куда поместить процессы, н пользователь может сам подменять их с помощью аргументов команды spawn. Пр цессы могут запускаться из работающего процесса — для этого нужно вызвать пр цедуру Pvm_spawn. Процессы могут быть организованы в группы, причем сост групп может меняться во время выполнения программы.
Взаимодействие в машине PVM осуществляется с помощью примитивов дл передачи сообщений таким образом, чтобы взаимодействовать могли машин с разными системами счисления. Каждый процесс PVM в каждый момент врем ни имеет один активный пересылочный буфер и один активный приемный буфе Отправляя сообщение, процесс вызывает библиотечные процедуры, запаковыв ющие значения с самоописанием в активный пересылочный буфер, чтобы получ тель мог узнать их и преобразовать в исходный формат.
Когда сообщение скомпоновано, отправитель вызывает библиотечную пр цедуру pvm_send, которая представляет собой блокирующий сигнал send. Пол чатель может поступить по-разному. Во-первых, он может вызвать процедур

6 3 4 Глава 8. Архитектуры компьютеров параллельного действия
определенный промежуток времени, и если подходящего сообщения за эт не пришло, он разблокируется. Процедура нужна для того, чтобы не заблок процесс навсегда. Третий вариант — процедура pvmjirecv, которая сразу вращает значение — это может быть либо сообщение, либо указание на отс сообщений. Вызов можно повторять, чтобы опрашивать входящие сообще
Помимо всех этих примитивов PVM поддерживает широковещание (п раpvm_bcast) и мультивещание (процедураpvm_mcasi). Первая процедура ляет сообщение всем процессам в группе, вторая посылает сообщение тол которым процессам, входящим в определенный список.
Синхронизация между процессами осуществляется с помощью про pvmjbarrier. Когда процесс вызывает эту процедуру, он блокируется до т пока определенное число других процессов не достигнет барьера и они не эту же процедуру. Существуют другие процедуры для управления главной лительной машиной, группами, буферами, для передачи сигналов, прове стояния и т. д. PVM — это простой, легкий в применении пакет, имеющий личии в большинстве компьютеров параллельного действия, что и объясн популярность.
MPI — интерфейс с передачей сообщений
Следующий пакет для программирования мультикомпьютеров — MPI (M Passing Interface — интерфейс с передачей сообщений). MPI гораздо сл чем PVM. Он содержит намного больше библиотечных вызовов и намного параметров накаждый вызов. Первая версия MPI, которая сейчас называется была дополнена второй версией, MPI-2, в 1997 году. Ниже мы в двух сло скажем о MPI-1, а затем посмотрим, что нового появилось в MPI-2. Бо дробную информацию об MPI см. в книгах [52, 134].
MPI-1, в отличие от PVM, никак не связана с созданием процессов и упр ем процессами. Создавать процессы должен сам пользователь с помощью ных системных вызовов. После создания процессы организуются в группы рые уже не изменяются. Именно с этими группами и работает MPI.
В основе MPI лежат 4 понятия: коммуникаторы, типы передаваемых операции коммуникации и виртуальные топологии. Коммуникатор — это процессов плюс контекст. Контекст — это метка, которая идентифицируетч (например, фазу выполнения). В процессе отправки и получения сообщен текст может использоваться для того, чтобы несвязанные сообщения не друг другу.
Сообщения могут быть разныхтипов: символьные, целочисленные (short и long integers), с обычной и удвоенной точностью, с плавающей точко Можно образовать новые типы сообщений из уже существующих.
MPI поддерживает множество операций коммуникации. Ниже приведе


6 3 6 Глава 8. Архитектуры компьютеров параллельного действия
Однако мультикомпьютеры не имеют совместно используемой памят хитектурном уровне. Это и привело к появлению таких систем с передач щений, как PVM и MPI. Большинство программистов предпочитают и совместно используемой памяти, даже если ее на самом деле не существу удастся достичь этой цели, мы сразу получим дешевое аппаратное обес больших размеров плюс обеспечим легкость программирования.
Многие исследователи пришли к выводу, что общая память на архите уровне может быть нерасширяемой, но зато существуют другие способы д ния той же цели. Из рисунка 8.3 видно, что есть и другие уровни, на которы ввести совместно используемую память. В следующих разделах мы расс как в мультикомпьютере можно ввести совместно используемую память в программирования при отсутствии ее на уровне аппаратного обеспечения
Распределенная совместно используемая память
Один из классов систем с общей памятью на прикладном уровне — это сис страничной организацией памяти. Такая система называется DSM (Di
Shared Memory — распределенная совместно используемая память). Идея
ряд процессоров в мультикомпьютере разделяет общее виртуальное адрес странство со страничной организацией. Самый простой вариант — когда страница содержится в ОЗУ ровно для одного процессора. На рис. 8.34, а м общее виртуальное адресное пространство, которое состоит из 16 страни пространяется на 4 процессора.
Когда процессор обращается к странице в своем локальном ОЗУ, чтен пись происходят без задержки. Однако если процессор обращается к стра другого ОЗУ, происходит ошибка из-за отсутствия страницы. Только в это отсутствующая страница берется не с диска. Вместо этого операционная посылает сообщение в узел, в котором находится данная страница, чтобы п зовать ее и отправить к процессору. После получения страницы она преоб в исходное состояние, а приостановленная команда выполняется заново, к обычной ошибке из-за отсутствия страницы. На рис. 8.34, б мы видим с после того, как процессор 0 получил ошибку из-за отсутствия страницы 10, была передана из процессора 1 в процессор 0.
Впервые идея была реализована в машине IVY [83, 84]. В результате тикомпьютере появилась память совместного использования, согласова последовательности. В целях улучшения производительности возможны зации. Первая оптимизация, появившаяся в IVY, — страницы, предназн только для чтения, могли присутствовать в нескольких узлах одновременн чае ошибки из-за отсутствия страницы в запрашивающую машину пос копия этой страницы, но оригинал остается на месте, поскольку нет никак ности конфликтов. На рисунке 8.34, в показана ситуация, когда два про делят общую страницу, предназначенную только для чтения (это страниц


6 38 Глава 8. Архитектуры компьютеров параллельного действия
никаких копий до тех пор, пока не будет совершена операция rel ease и по страница снова станет общей.
Второй способ оптимизации — изначально преобразовывать каждую ваемую страницу в режим «только для чтения». Когда в страницу запись дится впервые, система создает копию страницы, называемую двойнико страница преобразуется в формат «для чтения и записи», и последующи могут производиться на полной скорости. Если позже произойдет ошиб отсутствия страницы и страницу придется туда доставлять, между текущ ницей и двойником производится пословное сравнение. Пересылаются т слова, которые были изменены, что сокращает размер сообщений.
Если возникает ошибка из-за отсутствия страницы, нужно определить ходится отсутствующая страница. Возможны разные способы, в том числ ги, которые используются в машинах NUMA и СОМА. Многие средства, используются в DSM, применимы к машинам NUMA и СОМА, поскольку это программная реализация машины NUMA или СОМА, в которой каж ница трактуется как строка кэш-памяти.
DSM — это обширная область для исследования. Большой интерес п ляют системы CASHMERE [76, 141], CRL [68], Shata [124] и Treadmarks
Linda
Системы DSM со страничной организацией памяти (например, IVY и Tre используют аппаратный блок управления памятью, чтобы закрывать дос сутствующим страницам. Хотя пересылка только отдельных слов вместо в ницы и влияет на производительность, страницы неудобны для совмест пользования, поэтому применяются и другие подходы.
Один из таких подходов — система Linda, в которой процессы на нес машинах снабжены структурированной распределенной памятью совмест пользования [21, 22]. Доступ к такой памяти осуществляется с помощью шого набора примитивных операций, которые можно добавить к сущест языкам (например, С или FORTRAN), в результате чего получатся парал языки, в данном случае C-Linda и FORTRAN-Linda.
В основе системы Linda лежит понятие абстрактного пространства к которое глобально по отношению ко всей системе и доступно всем процес системы. Пространство кортежей похоже на глобальную память совмест пользования, только с определенной встроенной структурой. Пространств жит ряд кортежей, каждый из которых состоит из одного или нескольки Для C-Linda поля могут содержать целые числа, числа типа long integer с плавающей точкой, а также массивы (в том числе цепочки) и структур другие кортежи). В листинге 8.4. приведено 3 примера кортежей.
Над кортежами можно совершать 4 операции. Первая из них, out, п
кортеж в пространство кортежей. Например, операция

Мультикомпьютеры с передачей сообщений |
6 3 9 |
Это выражение помещает в пространство кортеж с четырьмя полями, причем второе и третье поля определяются по текущим значениям переменных i и j.
Вторая операция, in, извлекает кортеж из пространства. Обращение к кортежам ирогаъодатся. wo содержанию, л we wo жлтан vura адресу. Х\оля операнда Vi шэтут содержать выражения или формальные параметры. Рассмотрим операцию
m C a b c " . 2, ? i ) ;
Эта операция отыскивает кортеж, состоящий из цепочки «abc», целого числа и третьего поля, которое может содержать любое целое число (предполагаетс что i — это целое число). Найденный кортеж удаляется из пространства кортеже а переменной i приписывается значение третьего поля. Когда два процесса выпо няют одну и ту же операцию in одновременно, успешно выполнит эту операци только один из них, если нет двух и более подходящих кортежей. Пространств кортежей может содержать много копий одного кортежа.
Листинг8.4.ТрикортежасистемыLinda
("abc".2.5) Cmatrix-1".1.6.3.14)
("family", "is sister". Carolyn, Elinor)
Алгоритм соответствия, который используется в операции in, довольно прос Поля шаблона операции in сравниваются с соответствующими полями каждог кортежа в пространстве кортежей. Совпадение происходит, если удовлетворен следующие три условия:
1.Шаблон и кортеж имеют одинаковое количество полей.
2.Типы соответствующих полей совпадают.
3.Каждая константа или переменная в шаблоне совпадает с полем кортежа.
Формальные параметры, указываемые знаком вопроса, за которым следует им переменной или типа, не участвуют в сравнении (за исключением проверки типа хотя тем параметрам, которые содержат имя переменной, присваиваются значе ния после совпадения.
Если соответствующий кортеж отсутствует, процесс приостанавливается, пок другой процесс не вставит нужный кортеж, и в этот момент вызывающий процес автоматически возобновит работу и найдет этот новый кортеж. Процессы блоки руются и разблокируются автоматически, поэтому если один процесс собираетс выводить кортеж, а другой — вводить его, то не имеет никакого значения, какой и процессов будет первым.
Третья операция, read, сходна с in, только она не удаляет кортеж из простран ства. Четвертая операция, eval, параллельно оценивает свои параметры, а полу ченный в результате кортеж копируется в пространство кортежей. Этот механиз можно использовать для выполнения любых вычислений. Именно так создаютс параллельные процессы в системе Linda.
Основной принцип программирования в системе Linda — это модель replicate


|
Мультикомпьютеры с передачей сообщений |
641 |
operation popО integer. |
#функция, которая возвращает |
|
begin |
#целое число |
|
guard top>0 do |
Приостанавливает работу, если стек пуст |
|
top =top-l. |
#уменьшает указатель стека |
|
return stack[top]: |
# возвращает вершину стека |
|
od. |
|
|
end |
|
|
begin |
|
|
top =0, |
Инициализация |
|
end |
|
|
Как только определен объект stack, нужно объявить переменные этого типа: s, t stack.
Такая запись создает два стековых объекта и устанавливает переменную top в каждом объекте на 0. Целочисленную переменную к можно поместить в стек s с помощью выражения
s$push(k)
и т. д. Операция pop содержит предохранитель, поэтому попытка вытолкнуть переменную из пустого стека вызовет блокировку вызывающего процесса до тех пор, пока другой процесс не положит что-либо в стек.
Осга содержит оператор ветвления (fork statement) для создания нового процесса в процессоре, определяемом пользователем. Новый процесс запускает процедуру, названную в команде ветвления. Параметры, в том числе объект, могут передаваться новомупроцессу. Именно так объекты распределяются среди машин. Например, выражение
for I in I n do fork foobar(s) on I; od;
порождает новый процесс на каждой из машин с 1 по п, запуская программу foobar в каждой из них. Поскольку эти п новых процессов (а также исходный процесс) работают параллельно, они все могут помещать элементы в общий стек s и выталкивать элементы из общего стека s, как будто все они работают на мультипроцессоре с памятью совместного использования.
Операции в объектах совместного использования атомарны и согласованы по последовательности. Если несколько процессов выполняют операции над одним общим объектом практически одновременно, система выбирает определенный порядок выполнения, и все процессы «видят» этот же порядок.
В системе Осга данные совместного использования совмещаются с синхронизацией не так, как в системах со страничной организацией памяти. В программах с параллельной обработкой нужныдва вида синхронизации. Первый вид — взаимное исключение. Этот метод не позволяет двум процессам одновременно выполнять одну и ту же критическую область. В системе Огса каждая операция над общим объектом похожа на критическую область, поскольку система гарантирует, что конечный результат будет таким же, как если бы все критические области вы-
полнялись последовательно одна за другой. В этом отношении объект Огса похож
