Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Архитектура компьютера. Э. Таненбаум..doc
Скачиваний:
109
Добавлен:
20.06.2014
Размер:
7.54 Mб
Скачать

Intel/Sandia Option Red

Компьютеры с высокой производительностью и вооруженные силы идут в США рука об руку с 1943 года, начиная с машины ENIAC, первого электронного компью­тера. Связь между американскими вооруженными силами и высокоскоростны­ми вычислениями до сих пор продолжается. В середине 90-х годов департаменты обороны и энергетики приступили к выполнению программы разработки 5 систем МРР, которые будут работать со скоростью 1, 3, 10, 30 и 100 терафлопов/с соот­ветственно. Для сравнения: 100 терафлопов (1014 операций с плавающей точкой в секунду) это в 500000 раз больше, чем мощность процессора Pentium Pro, работающего с частотой 200 МГц.

В отличие от машины ТЗЕ, которую можно купить в магазине (правда, за боль­шие деньги), машины, работающие со скоростью 1014 операций с плавающей точ­кой, это уникальные системы, распределяемые в конкурентных торгах Департа­ментом энергетики, который руководит национальными лабораториями. Компания Intel выиграла первый контракт; IBM выиграла следующие два. Если вы планиру­ете вступить в соревнование в будущем, вам понадобится 80 млн долларов. Эти машины предназначены для военных целей. Какой-то сообразительный работник Пентагона придумал патриотические названия для первых трех машин: red, white и blue (красный, белый и синий цвета флага США). Первая машина, выполняв­шая 1014 операций с плавающей точкой, называлась Option Red (Sandia National Laborotary, декабрь 1996), вторая Option Blue (1999), а третья Option White (2000). Ниже мы будем рассматривать первую из этих машин, Option Red.

Машина Option Red состоит из 4608 узлов, которые организованы в трехмер­ную сетку. Процессоры запакованы на платах двух разных типов. Платы kestrel используются в качестве вычислительных узлов, а платы eagle используются для сервисных, дисковых, сетевых узлов и узлов загрузки. Машина содержит 4536 выгаислительных узлов, 32 сервисных узла, 32 дисковых узла, 6 сетевых узлов и 2 узла загрузки.

Плата kestrel (рис. 8.30, а) содержит 2 логических узла, каждый из которых включает 2 процессора Pentium Pro на 200 МГц и разделенное ОЗУ на 64 Мбайт. Каждый узел kestrel содержит собственную 64-битную локальную шину и собствен­ную микросхему NIC (Network Interface Chip сетевой адаптер). Две микро­схемы NIC связаны вместе, поэтому только одна из них подсоединена к сети, что

делает систему более компактной. Платы eagle также содержат процессоры

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

Платы связаны в виде решетки 32x38x2 в виде двух взаимосвязанных плоско­стей 32x38 (размер решетки продиктован целями компоновки, поэтому не во всех узлах решетки находятся платы). В каждом узле находится маршрутизатор с шес­тью каналами связи: вперед, назад, вправо, влево, с другой плоскостью и с платой

kerstel или eagle. Каждый канал связи может передавать информацию одновре­менно в обоих направлениях со скоростью 400 Мбайт/с. Применяется маршрути­зация «червоточина», чтобы сократить время ожидания.

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

64-битная локальная шина

а б

Рис. 8.30. Система Intel/Sandia Option Red: плата kestrel (а); сеть (б)

Систему можно логически разделить на 4 части: сервис, вычисление, ввод-вы­вод и система. Сервисные узлы — это машины UNIX общего назначения с разде­лением времени, которые позволяют программистам писать и отлаживать свои программы. Вычислительные узлы запускают большие приложения. Они запуска­ют не всю систему UNIX, а только микроядро, которое называется кугуаром (coguar)1. Узлы ввода-вывода управляют 640 дисками, содержащими более 1 Тбайт данных. Есть два независимых набора узлов ввода-вывода. Узлы первого типа предназначе­ны для секретной военной работы, а узлы второго типа — для несекретной работы. Эти два набора вводятся и удаляются из системы вручную, поэтому в каждый момент времени подсоединен только один набор узлов, чтобы предотвратить утечку информации с секретных дисков на несекретные диски. Наконец, системные узлы используются для загрузки системы.

COW - Clusters of Workstations (кластеры рабочих станций)

Второй тип мультикомпьютеров — это системы COW (Cluster of Workstations — кластер рабочих станций) или NOW (Network of Workstations — сеть рабочих станций) [8,90]. Обычно он состоит из нескольких сотен персональных компьюте­ров или рабочих станций, соединенных посредством сетевых плат. Различие между МРР и COW аналогично разнице между большой вьиислительной машиной и персо­нальным компьютером. У обоих есть процессор, ОЗУ, диски, операционная система

и т. д. Но в большой вычислительной машине все это работает гораздо быстрее

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

Процессоры в МРР — это обычные процессоры, которые любой человек может купить. В системе ТЗЕ используются процессоры Alpha; в системе Option Red — процессоры Pentium Pro. Ничего специфического. Используются обычные дина­мические ОЗУ и система UNIX.

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

Исторически система МРР отличалась высокоскоростной сетью. Но с появле­нием коммерческих высокоскоростных сетей это отличие начало сглаживаться. Например, исследовательская группа автора данной книги собрала систему COW, которая называется DAS (Distributed ASCII Supercomputer). Она состоит из 128 узлов, каждый из которых содержит процессор Pentium Pro на 200 МГц и ОЗУ на 128 Мбайт (см. http://www.cs.vu.nl/~baL/das.htmt). Узлы организованы в 2-мер­ный тор. Каналы связи могут передавать информацию со скоростью 160 Мбайт/с в обоих направлениях одновременно. Эти характеристики практически не отлича­ются от характеристик машины Option Red: скорость передачи информации по каналам связи в два раза ниже, но размер ОЗУ каждого узла в два раза больше. Единственное существенное различие состоит в том, что бюджет Sandia был зна­чительно больше. Технически эти две системы практически не различаются.

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

Существует множество различных видов COW, но доминируют два из них: цен­трализованные и децентрализованные. Централизованные системы COW пред­ставляют собой кластер рабочих станций или персональных компьютеров, смон­тированных в большой блок в одной комнате. Иногда они компонуются более

компактно, чем обычно, чтобы сократить физические размеры и длину кабеля. Как правило, эти машины гомогенны и не имеют никаких периферических устройств, кроме сетевых карт и, возможно, дисков. Гордон Белл (Gordon Bell), разработчик PDP-11 и VAX, назвал такие машины «автономными рабочими станциями» (по­скольку у них не было владельцев).

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

Большинство из них простаивают много часов в день, особенно ночью. Обычно

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

Планирование

Возникает вопрос: чем отличается децентрализованная система COW от локальной

сети, соединяющей пользовательские машины? Отличие связано с программным

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

Рассмотрим самую простую модель планирования. Должно быть известно, сколько процессоров нужно для каждой работы (задачи). Тогда задачи выстра­иваются в порядке FIFO («первым вошел — первым вышел») (рис. 8.31, а). Когда первая задача начала выполняться, происходит проверка, есть ли достаточное ко­личество процессоров для выполнения задачи, следующей по очереди. Если да, то она тоже начинает выполняться и т. д. Если нет, то система ждет, пока не появится достаточное количество процессоров. В нашем примере система COW содержит 8 процессоров, но она вполне могла бы содержать 128 процессоров, расположен­ных в блоках по 16 процессоров (получилось бы 8 групп процессоров) или в какой-

нибудь другой комбинации.

0 | 1 I 2

Ipy'ina процессоров 0|1|2)3|4|5|6|7

1

i

Группа процессоров 0|1_|.2 3j4|5.j6j7

4

I руппа процессоров

1

3 | 4 5

4

7

2

3

3

5

5

6

2

4

5

8

5

6

5

9

2

8

9

8

7

Рис. 8.31. Планирование работы в системе COW: FIFO («первым вошел — первым вышел») (а); без блокировки начала очереди (б); заполнение прямоугольника «процессоры-время» (в). Серым цветом показаны свободные процессоры

В глубже разработанном алгоритме задачи, которые не соответствуют количе­ству имеющихся в наличии процессоров, пропускаются и берется первая задача, для которой процессоров достаточно. Всякий раз, когда завершается выполнение задачи, очередь из оставшихся задач проверяется в порядке «первым вошел — пер­вым вышел». Результат применения этого алгоритма изображен на рис. 8.31, б.

Еще более сложный алгоритм требует, чтобы было известно, сколько процессо­ров нужно для каждой задачи и сколько минут займет ее выполнение. Располагая такой информацией, планировщик заданий может попытаться заполнить прямо­угольник «процессоры—время». Это особенно эффективно, когда задачи представ­лены на рассмотрение днем, а выполняться будут ночью. В этом случае планиров­щик заданий получает всю информацию о задачах заранее и может выполнять их в оптимальном порядке, как показано на рис. 8.31, в.

Коммерческие сети межсоединений

В этом разделе мы рассмотрим некоторые технологии связи. Наш первый пример — система Ethernet. Существует три версии этой системы: classic Ethernet, fast

Ethernet и gigabit Ethernet. Они работают со скоростью 10,100 и 1000 Мбит/с (1,25, 12,5 и 125 Мбайт/с)1 соответственно. Все они совместимы относительно среды, формата пакетов и протоколов2. Отличие только в производительности.

Каждый компьютер в сети Ethernet содержит микросхему Ethernet, обычно на

съемной плате. Изначально провод из платы вводился в середину толстого медно­го кабеля, это называлось «зуб вампира». Позднее появились более тонкие кабели и Т-образные коннекторы. В любом случае платы Ethernet на всех машинах соеди­нены электрически, как будто они соединены пайкой. Схема подсоединения трех машин к сети Ethernet изображена на рис. 8.32, а.

Процессор Процессор Процессор

Пакет, Пакет,

движущийся движущийся направо налево

|о\

J

Плата ' С

backplane "

1 i i j

Коммутатор

Канальная карта

Ethernet

а 6

Рис. 8.32. Три компьютера в сети Ethernet (а); коммутатор Ethernet (б)

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

конфликтная ситуация. Обе машины определяют, что произошла конфликтная

ситуация, останавливают передачу, затем останавливаются на произвольный пе­риод времени и пробуют снова. Если конфликтная ситуация случается во второй

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

Соотнесение автором скоростных показателей упоминаемых технологий, выраженных отношением скорости передачи бит/с, с отношениями Мбайт/с неправомочно. Ни одна их этих технологий не по­зволяет передать по сети соответствующее количество байтов за секунду. Даже теоретически возмож­ная скорость для стандарта Ethernet лежит в интервале 800-850 Кбайт/с. Дело в том, что для переда­чи информации необходимо использовать служебные коды, к тому же передача осуществляется кадрами (фреймами) относительно небольшой длины (1500 байтов), после чего сетевой адаптер обя­зательно должен освободить среду передачи на фиксированный промежуток времени (с тем, чтобы другие сетевые адаптеры тоже могли воспользоваться средой передачи). — Примеч. научи, ред.

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

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

пока поврежденный кабель не будет изолирован.

Третья разработка — Ethernet с использованием коммутаторов — показана на рис. 8.32, б. Здесь сетевой концентратор заменен устройством, содержащим высо­коскоростную плату backplane, к которой можно подсоединять канальные карты. Каждая канальная карта принимает одну или несколько сетей Ethernet, и разные карты могут воспринимать разные скорости, поэтому classic, fast и gigabit Ethernet могут быть связаны вместе.

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

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

Gigabit Ethernet с использованием коммутаторов с одной машиной на Ethernet и

высокоскоростной платой backplane имеет потенциальную производительность (по крайней мере, это касается пропускной способности) в 4 раза меньше, чем каналы связи в машине ТЗЕ, но стоит значительно дешевле.

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

машин к каждой сети Ethernet, вследствие чего опять возникнут конфликтные

ситуации. Однако с точки зрения соотношения цены и производительности сеть на основе gigabit Ethernet с использованием коммутаторов — серьезный конку­рент на компьютерном рынке.

Следующая технология связи, которую мы рассмотрим, — это ATM (Asynch­ronous Transfer Mode — асинхронный режим передачи). Технология ATM была

разработана международным консорциумом телефонных компаний в качестве за­мены существующей телефонной системы на новую, полностью цифровую. Ос­новная идея проекта состояла в том, чтобы каждый телефон и каждый компьютер в мире связать с помощью безошибочного цифрового битового канала со скорос­тью передачи данных 155 Мбит/с (позднее 622 Мбит/с). Но осуществить это на практике оказалось не так просто. Тем не менее многие компании сейчас выпуска­ют съемные платы для персональных компьютеров со скоростью передачи данных 155 Мбит/с или 622 Мбит/с. Вторая скорость, ОС-12, хорошо подходит для муль-тикомпьютеров.

Провод или стекловолокно, отходящее от платы ATM, переходит в переключа­тель ATM — устройство, похожее на коммутатор Ethernet. В него тоже поступают пакеты и сохраняются в буфере в канальных картах, а затем поступают в исходя­щую канальную карту для передачи в пункт назначения. Однако у Ethernet и ATM есть существенные различия.

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

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

Процессор "2

Ячейка

5

7

6

]

Пакет

/ Порт

г 1 ггп

111- 11-1-11

Виртуальная цеп

Р9ь h

10 —

С

гi i-i

L_J Lj.4J 1

13

КоммутаторДТМ

14

15

1f5

Рис. 8.33. 16 процессоров, связанных четырьмя переключателями ATM. Пунктиром показаны две виртуальные цепи (канала)

Во-вторых, Ethernet может передавать целые пакеты (до 1500 байтов данных)

одним блоком. В ATM все пакеты разбиваются на ячейки по 53 байта. Пять из

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

Наш третий пример — сеть Myrinet — съемная плата, которая производится одной калифорнийской компанией и пользуется популярностью у разработчиков систем COW [18]. Здесь используется та же модель, что и в Ethernet и ATM, где каждая съемная плата подсоединяется к коммутатору, а коммутаторы могут со­единяться в любой топологии. Каналы связи сети Myrinet дуплексные, они пере­дают информацию со скоростью 1,28 Гбит/с в обоих направлениях. Размер паке­тов неограничен, а каждый коммутатор представляет собой полное пересечение, что дает малое время ожидания и высокую пропускную способность.

Myrinet пользуется популярностью у разработчиков систем COW, поскольку платы в этой сети содержат программируемый процессор и большое ОЗУ. Хотя

Myrinet появилась со своей стандартной операционной системой, многие иссле­довательские группы уже разработали свои собственные операционные систе­мы. У них появились дополнительные функции и повысилась производительность (см., например, [17,107,155]). Из типичных особенностей можно назвать защиту, управление потоком, надежное широковещание и мультивещание, а также возмож­ность запускать часть кода прикладной программы на плате.

Связное программное обеспечение для мультикомпьютеров

Для программирования мультикомпьютера требуется специальное программное

обеспечение (обычно это библиотеки), чтобы обеспечить связь между процессами

и синхронизацию. В этом разделе мы расскажем о таком программном обеспече­нии. Отметим, что большинство этих программных пакетов работают в системах

МРР и COW.

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

В большинстве систем с передачей сообщений имеется два примитива send и

recei ve, но возможны и другие типы семантики. Ниже даны три основных варианта:

  1. Синхронная передача сообщений.

  2. Буферная передача сообщений.

  3. Неблокируемая передача сообщений.

Синхронная передача сообщений. Если отправитель выполняет операцию send, а получатель еще не выполнил операцию recei ve, то отправитель блокируется до тех пор, пока получатель не выполнит операцию receive, а в это время сообщение копируется. Когда к отправителю возвращается управление, он уже знает, что со­общение было отправлено и получено. Этот метод имеет простую семантику и не

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

Буферная передача сообщений. Если сообщение отправляется до того, как получатель готов его принять, это сообщение временно сохраняется где-либо, на­пример в почтовом ящике, и хранится там, пока получатель не возьмет его оттуда. При таком подходе отправитель может продолжать работу после операции send, даже если получатель в этот момент занят. Поскольку сообщение уже отправлено, отправитель может снова использовать буфер сообщений сразу же. Такая схема сокращает время ожидания. Вообще говоря, как только система отправила сооб­щение, отправитель может продолжать работу. Однако нет никаких гарантий, что

сообщение было получено. Даже при надежной системе коммуникаций получа­тель мог сломаться еще до получения сообщения.

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

В следующих двух разделах мы рассмотрим две популярные системы с переда­чей сообщений, которые применяются во многих мультикомпьютерах: PVM и MPI. Существуют и другие системы, но эти две наиболее распространенные.

PVM виртуальная машина параллельного действия

PVM (Parallel Virtual Machine — виртуальная машина параллельного действия) —

это система с передачей сообщений, изначально разработанная для машин COW с операционной системой UNIX [45, 142]. Позднее она стала применяться в дру­гих машинах, в том числе в системах МРР. Это самодостаточная система с управ­лением процессами и системой ввода-вывода.

PVM состоит из двух частей: библиотеки, вызываемой пользователем, и «сто­рожевого» процесса, который работает постоянно на каждой машине в мульти-компьютере. Когда PVM начинает работу, она определяет, какие машины должны быть частью ее виртуального мультикомпьютера. Для этого она читает конфигу­рационный файл. «Сторожевой» процесс запускается на каждой из этих машин.

Машины можно добавлять и убирать, вводя командах на консоли PVM. Можно запустить п параллельных процессов с помощью команды

spawn -count n prog

Каждый процесс запустит prog. PVM решает, куда поместить процессы, но пользователь может сам подменять их с помощью аргументов команды spawn. Про­цессы могут запускаться из работающего процесса — для этого нужно вызвать про­цедуру Pvmspawn. Процессы могут быть организованы в группы, причем состав групп может меняться во время выполнения программы.

Взаимодействие в машине PVM осуществляется с помощью примитивов для

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

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

Когда сообщение скомпоновано, отправитель вызывает библиотечную про­цедуруpvm_send, которая представляет собой блокирующий сигнал send. Полу­чатель может поступить по-разному. Во-первых, он может вызвать процедуру pvmrecv, которая блокирует получателя до тех пор, пока не придет подходящее

сообщение. Когда вызов возвратится, сообщение будет в активном приемном бу­фере. Оно может быть распаковано и преобразовано в подходящий для данной

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

Помимо всех этих примитивов PVM поддерживает широковещание (процеду-раpvm_bcast) и мультивещание (процедураpvm_mcasi). Первая процедура отправ­ляет сообщение всем процессам в группе, вторая посылает сообщение только не­которым процессам, входящим в определенный список.

Синхронизация между процессами осуществляется с помощью процедуры pvmjbarrier. Когда процесс вызывает эту процедуру, он блокируется до тех пор, пока определенное число других процессов не достигнет барьера и они не вызовут эту же процедуру. Существуют другие процедуры для управления главной вычис­лительной машиной, группами, буферами, для передачи сигналов, проверки со­стояния и т. д. PVM — это простой, легкий в применении пакет, имеющийся в на­личии в большинстве компьютеров параллельного действия, что и объясняет его популярность.

MPI интерфейс с передачей сообщений

Следующий пакет для программирования мультикомпьютеров — MPI (Message-Passing Interface — интерфейс с передачей сообщений). MPI гораздо сложнее, чем PVM. Он содержит намного больше библиотечных вызовов и намного больше параметров на каждый вызов. Первая версия MPI, которая сейчас называется MPI-1, была дополнена второй версией, MPI-2, в 1997 году. Ниже мы в двух словах рас­скажем о MPI-1, а затем посмотрим, что нового появилось в MPI-2. Более по­дробную информацию об MPI см. в книгах [52, 134].

MPI-1, в отличие от PVM, никак не связана с созданием процессов и управлени­ем процессами. Создавать процессы должен сам пользователь с помощью локаль­ных системных вызовов. После создания процессы организуются в группы, кото­рые уже не изменяются. Именно с этими группами и работает MPI.

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

Сообщения могут быть разных типов: символьные, целочисленные (short, regular

и long integers), с обычной и удвоенной точностью, с плавающей точкой и т. д.

Можно образовать новые типы сообщений из уже существующих.

MPI поддерживает множество операций коммуникации. Ниже приведена опе­рация, которая используется для отправки сообщений:

MPI_Send(buffer. count. data_type. destination, tag. communicator) Этот вызов отправляет содержимое буфера (buffer) с элементами определен­ного типа (datatype) в пункт назначения. Count это число элементов буфера. Поле tag помечает сообщение; получатель может сказать, что он будет принимать сообщение только с данным тегом. Последнее поле показывает, к какой группе процессов относится целевой процесс (поле destination это просто индекс спис­ка процессов из определенной группы). Соответствующий вызов для получения сообщения таков:

MPI_Recv(&buffer, count, datajtype, source, tag. communicator, Sstatus) В нем сообщается, что получатель ищет сообщение определенного типа из определенного источника с определенным тегом.

MPI поддерживает 4 основных типа коммуникации. Первый тип синхронный. В нем отправитель не может начать передачу данных, пока получатель не вызовет процедуру MPIRecv. Второй тип — коммуникация с использованием буфера. Огра­ничение для первого типа здесь недействительно. Третий тип стандартный. Он зависит от реализации и может быть либо синхронным, либо с буфером. Четвер­тый тип сходен с первым. Здесь отправитель требует, чтобы получатель был до­ступен, но без проверки. Каждый из этих примитивов бывает двух видов: блокиру­ющим и неблокирующим, что в сумме дает 8 примитивов. Получение может быть

только в двух вариантах: блокирующим и неблокирующим.

MPI поддерживает коллективную коммуникацию — широковещание, распре­деление и сбор данных, обмен данными, агрегацию и барьер. При любых формах

коллективной коммуникации все процессы в группе должны делать вызов, при­чем с совместимыми параметрами. Если этого сделать не удается, возникает ошибка. Например, процессы могут быть организованы в виде дерева, в котором значения передаются от листьев к корню, подчиняясь определенной обработке на каждом шаге (это может быть сложение значений или взятие максимума). Это типичная форма коллективной коммуникации.

Четвертое основное понятие в MPI — виртуальная топология, когда процессы могут быть организованы в дерево, кольцо, решетку, тор и т. д. Такая организация процессов обеспечивает способ наименования каналов связи и облегчает комму­никацию.

В MPI-2 были добавлены динамические процессы, доступ к удаленной памяти, неблокирующая коллективная коммуникация, расширяемая поддержка процессов ввода-вывода, обработка в режиме реального времени и многие другие особенности. В научном сообществе идет война между лагерями MPI и PVM. Те, кто поддержи­вают PVM, утверждают, что эту систему проще изучать и легче использовать. Те, кто на стороне MPI, утверждают, что эта система выполняет больше функций и, кроме того, она стандартизована, что подтверждается официальным документом.

Совместно используемая память на прикладном уровне

Из наших примеров видно, что мультикомпьютеры можно расширить до гораздо больших размеров, чем мультипроцессоры. Sun Enterprise 10000, где максимальное число процессоров — 64, и NUMA-Q, где максимальное число процессоров — 256, являются представителями больших мультипроцессоров UMA и NUMA соответ­ственно. А машины ТЗЕ и Option Red содержат 2048 и 9416 процессоров соответ­ственно.

Однако мультикомпьютеры не имеют совместно используемой памяти на ар­хитектурном уровне. Это и привело к появлению таких систем с передачей сооб­щений, как PVM и MPI. Большинство программистов предпочитают иллюзию совместно используемой памяти, даже если ее на самом деле не существует. Если удастся достичь этой цели, мы сразу получим дешевое аппаратное обеспечение больших размеров плюс обеспечим легкость программирования.

Многие исследователи пришли к выводу, что общая память на архитектурном уровне может быть нерасширяемой, но зато существуют другие способы достиже­ния той же цели. Из рисунка 8.3 видно, что есть и другие уровни, на которых можно ввести совместно используемую память. В следующих разделах мы рассмотрим, как в мультикомпьютере можно ввести совместно используемую память в модель программирования при отсутствии ее на уровне аппаратного обеспечения.

Распределенная совместно используемая память

Один из классов систем с общей памятью на прикладном уровне — это системы со страничной организацией памяти. Такая система называется DSM (Distributed Shared Memory — распределенная совместно используемая память). Идея проста: ряд процессоров в мультикомпьютере разделяет общее виртуальное адресное про­странство со страничной организацией. Самый простой вариант — когда каждая страница содержится в ОЗУ ровно для одного процессора. На рис. 8.34, а мы видим общее виртуальное адресное пространство, которое состоит из 16 страниц и рас­пространяется на 4 процессора.

Когда процессор обращается к странице в своем локальном ОЗУ, чтение и за­пись происходят без задержки. Однако если процессор обращается к странице из другого ОЗУ, происходит ошибка из-за отсутствия страницы. Только в этом случае отсутствующая страница берется не с диска. Вместо этого операционная система посылает сообщение в узел, в котором находится данная страница, чтобы преобра­зовать ее и отправить к процессору. После получения страницы она преобразуется в исходное состояние, а приостановленная команда выполняется заново, как и при обычной ошибке из-за отсутствия страницы. На рис. 8.34, б мы видим ситуацию после того, как процессор 0 получил ошибку из-за отсутствия страницы 10, которая была передана из процессора 1 в процессор 0.

Впервые идея была реализована в машине IVY [83, 84]. В результате в муль-тикомпьютере появилась память совместного использования, согласованная по последовательности. В целях улучшения производительности возможны оптими­зации. Первая оптимизация, появившаяся в IVY, — страницы, предназначенные только для чтения, могли присутствовать в нескольких узлах одновременно. В слу­чае ошибки из-за отсутствия страницы в запрашивающую машину посылается копия этой страницы, но оригинал остается на месте, поскольку нет никакой опас­ности конфликтов. На рисунке 8.34, в показана ситуация, когда два процессора делят общую страницу, предназначенную только для чтения (это страница 10).

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

ницы, страница постоянно должна передаваться туда и обратно. Эта ситуация на­зывается ложным совместным использованием.

000

00

Процессор 2

Процессор 3

5

н

Процессор 0

-- Память

10 00

00

Процессор 1

000