- •Э. Таненбаум
- •Глава 2. Организация компьютерных систем 56
- •Глава 3. Цифровой логический уровень 139
- •Глава 4. Микроархитектурный уровень 230
- •Глава 5. Уровень архитектуры команд 334
- •Глава 6. Уровень операционной системы 437
- •Глава 7. Уровень языка ассемблера 517
- •Глава 8. Архитектуры компьютеров параллельного
- •Глава 9. Библиография 647
- •Глава 8 (архитектура компьютеров параллельного действия) полностью изменена. В ней подробно описываются мультипроцессоры (uma, numa и сома) и мультикомпьютеры (мрр и cow).
- •Глава 1
- •Глава 2 знакомит читателей с основными компонентами компьютера: процессорами, памятью, устройствами ввода-вывода. В ней дается краткое описание системной архитектуры и введение к следующим главам.
- •Глава 2
- •Центральный процессор Центральный процессор
- •12 Битов б
- •24 Входные линии
- •50 Входных линий
- •Глава 4
- •Старший бит
- •Блок выборки команд
- •Сигналы управления
- •Глава 5
- •Intel ia-64
- •Глава 6
- •Глава 7
- •3. Сведения о том, можно ли получить доступ к символу извне процедуры.
- •Глава 8
- •64 Элемента на каждый регистр
- •Intel/Sandia Option Red
- •00 Процессор 2
- •Глава 9
- •4. Mazidi and Mazidi, The 80x86ibm pc and Compatible Computers, 2nd ed.
- •5. McKee et al., Smarter Memory: ImprovingBandwidthforStreamed References.
- •4. McKusick et al., Design and Implementation ofthe 4.4bsd Operating System.
- •3. Hill, Multiprocessors Should Support Simple Memory-Consistency Models.
- •Ieee Scalable Coherent Interface Working Group, ieee, 1989.
- •Ieee Micro Magazine, vol. 18, p. 60-75, July/Aug. 1998b.
- •3Rd ed., Reading, ma: Addison-Wesley, 1998.
- •1988 Int'l. Conf. On Parallel Proc. (Vol. 11), ieee, p. 94-101, 1988.
- •Implementation of the 4.4 bsd Operating System», Reading, ma: Addison-Wesley, 1996.
- •In Shared Memory Multiprocessing», ieee Computer Magazine, vol. 30, p. 4450, Dec. 1997.
- •78Jan.-March 1999.
- •0 123456789Abcdef
- •I и Ijmii him
- •Э. Таненбаум
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
1
i
Группа процессоров 0|1_|.2 3j4|5.j6j7
4
I руппа процессоров
1
4
7
2
3
3
5
6
2
5
8
5
6
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 (Asynchronous Transfer Mode — асинхронный режим передачи). Технология ATM была
разработана международным консорциумом телефонных компаний в качестве замены существующей телефонной системы на новую, полностью цифровую. Основная идея проекта состояла в том, чтобы каждый телефон и каждый компьютер в мире связать с помощью безошибочного цифрового битового канала со скоростью передачи данных 155 Мбит/с (позднее 622 Мбит/с). Но осуществить это на практике оказалось не так просто. Тем не менее многие компании сейчас выпускают съемные платы для персональных компьютеров со скоростью передачи данных 155 Мбит/с или 622 Мбит/с. Вторая скорость, ОС-12, хорошо подходит для муль-тикомпьютеров.
Провод или стекловолокно, отходящее от платы ATM, переходит в переключатель ATM — устройство, похожее на коммутатор Ethernet. В него тоже поступают пакеты и сохраняются в буфере в канальных картах, а затем поступают в исходящую канальную карту для передачи в пункт назначения. Однако у Ethernet и ATM есть существенные различия.
Во-первых, поскольку ATM была разработана для замещения телефонной системы, она представляет собой сеть с маршрутизацией информации. Перед отправкой пакета в пункт назначения исходная машина должна установить виртуальную цепь от исходного пункта через один или несколько коммутаторов ATM в конеч
ный пункт. На рис. 8.33. показаны две виртуальные цепи. В сети Ethernet, напротив, нет никаких виртуальных цепей. Поскольку установка виртуальной цепи занимает некоторое количество времени, каждая машина в мультикомпьютере должна устанавливать виртуальную цепь со всеми другими машинами при запуске и использовать их при работе. Пакеты, отправленные по виртуальной цепи, всегда будут доставлены в правильном порядке, но буферы канальных карт могут переполняться, как и в сети Ethernet с коммутаторами, поэтому доставка не гарантируется.
Процессор "2
Ячейка
5
7
6
]
Пакет
/ Порт
г 1 ггп
1—1—1- 11-1-1—1
Виртуальная цеп
Р9ь h
10 —1г
С
г—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, но возможны и другие типы семантики. Ниже даны три основных варианта:
Синхронная передача сообщений.
Буферная передача сообщений.
Неблокируемая передача сообщений.
Синхронная передача сообщений. Если отправитель выполняет операцию 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 |
-- Память
00
Процессор 1
000