ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 6700
Скачиваний: 8
Мультипроцессоры с памятью совместного использования
603
Мультипроцессоры UMA с координатными
коммутаторами
Даже при всех возможных оптимизациях использование только одной шины
ограничивает размер мультипроцессора UMA до 16 или 32 процессоров. Чтобы
получить больший размер, требуется другой тип коммуникационной сети. Самая
простая схема соединения п процессоров с
к
блоками памяти —
координатный ком-
мутатор
(рис. 8.19). Координатные коммутаторы используются на протяжении
многих десятилетий для соединения группы входящих линий с рядом выходящих
линий произвольным образом.
Модули памяти
Закрытый
координатный
коммутатор
Открытый
координатный
коммутатор
Координатный
коммутатор
открыт
Координатный
коммутатор
закрыт
Рис. 8.19. Координатный коммутатор 8x8 (а); открытый узел (б); закрытый узел (в)
В каждом пересечении горизонтальной (входящей) и вертикальной (исходя-
щей) линии находится
соединение
(crosspoint), которое можно открыть или за-
крыть в зависимости от того, нужно соединять горизонтальную и вертикальную
линии или нет. На рис. 8.19, а мы видим, что три узла закрыты, благодаря чему
устанавливается связь между парами (процессор, память) (001, 000), (101, 101) и
(110, 010) одновременно. Возможны другие комбинации. Число комбинаций рав-
но числу способов, которыми можно расставить 8 ладей на шахматной доске.
Координатный коммутатор представляет собой
неблокируемую сеть.
Это зна-
чит, что процессор всегда будет связан с нужным блоком памяти, даже если какая-
то линия или узел уже заняты. Более того, никакого предварительного планирова-
ния не требуется. Даже если уже установлено семь произвольных связей, всегда
6 0 4 Глава 8. Архитектуры компьютеров параллельного действия
можно связать оставшийся процессор с оставшимся блоком памяти. Ниже мы рас-
смотрим схемы, которые не обладают такими свойствами.
Не лучшим свойством координатного коммутатора является то, что число уз-
лов растет как п
2
. При наличии 1000 процессоров и 1000 блоков памяти нам пона-
добится миллион узлов. Это неприемлемо. Тем не менее координатные коммута-
торы вполне применимы для систем средних размеров.
Sun Enterprise 10000
В качестве примера мультипроцессора UMA, основанного на координатном ком-
мутаторе, рассмотрим систему Sun Enterprise 10000 [23, 24]. Эта система состоит
из одного корпуса с 64 процессорами. Координатный коммутатор
Gigaplahe-XB
запакован в плату, содержащую 8 гнезд на каждой стороне. Каждое гнездо вмеща-
ет огромную плату процессора (40x50 см), содержащую 4 процессора UltraSPARC
на 333 МГц и ОЗУ на 4 Гбайт. Благодаря жестким требованиям к синхронизации
и малому времени ожидания доступ к памяти вне платы занимает столько же вре-
мени, сколько доступ к памяти на плате.
Иметь только одну шину для взаимодействия всех процессоров и всех блоков
памяти неудобно, поэтому в системе Enterprise 10000 применяется другая страте-
гия. Здесь есть координатный коммутатор 16x16 для перемещения данных между
основной памятью и блоками кэш-памяти. Длина строки кэш-памяти составляет
64 байта, а ширина канала связи составляет 16 байтов, поэтому для перемещения
строки кэш-памяти требуется 4 цикла. Координатный коммутатор работает от точки
к точке, поэтому его нельзя использовать для сохранения совместимости по кэш-
памяти.
По этой причине помимо координатного коммутатора имеются 4 адресные
шины, которые используются для отслеживания строк в кэш-памяти (рис. 8.20).
Каждая шина используется для 1/4 физического адресного пространства. Для вы-
бора шины используется два адресных бита. В случае промаха кэш-памяти при
считывании процессор должен считывать нужную ему информацию из основной
памяти, и тогда он обращается к соответствующей адресной шине, чтобы узнать,
нет ли нужной строки в других блоках кэш-памяти. Все 16 плат отслеживают все
адресные шины одновременно, поэтому если ответа нет, это значит, что требуе-
мая строка отсутствует в кэш-памяти и ее нужно вызывать из основной памяти.
Вызов из памяти происходит от точки к точке по координатному коммутатору
по 16 байтов. Цикл шины составляет 12 не (83,3 МГц), и каждая адресная шина
может отслеживаться в каждом цикле любой другой шины, то есть всего возможно
167 млн отслеживаний/с. Каждое отслеживание может потребовать передачи
строки кэш-памяти в 64 байта, поэтому узел должен быть способен передавать
9,93 Гбайт/с (напомним, что 1 Гбайт= 1,0737x10
9
байт/с, а не 10
9
байт/с). Строку
кэш-памяти в 64 байта можно передать через узел за 4 цикла шины (48 не) при
пропускной способности 1,24 Гбайт/с за одну передачу. Поскольку узел может
обрабатывать 16 передач одновременно, его максимальная пропускная способность
составляет 19,87 Гбайт/с, а этого достаточно для поддержания скорости отслежи-
вания, даже если принять во внимание конфликтную ситуацию, которая сокраща-
ет практическую пропускную способность примерно до 60% от теоретической.
Мультипроцессоры с памятью совместного использования
605
Блок
передачи —
это блок
кэш-памяти
размером
64 байта
Плата ,
содержит
4 Гбайт памяти
и 4 процессора
4-адресные Г
шины для J
отслеживания 1
изменений
по адресам
Координатный коммутатор 16x16 (Gigaplane XB)
Процессор UltraSPARC
Ч Модуль памяти
размером 1 Гбайт
Рис. 8.20.
Мультипроцессор Sun Enterprise 10000
Enterprise 10000 использует 4 отслеживающие шины параллельно, плюс очень
широкий координатный коммутатор для передачи данных. Ясно, что такая систе-
ма преодолевает предел в 64 процессора. Но чтобы существенно увеличить коли-
чество процессоров, требуется совсем другой подход.
Мультипроцессоры UMA
с многоступенчатыми сетями
В основе «совсем другого подхода» лежит небольшой коммутатор 2x2 (рис. 8.21,
а).
Этот коммутатор содержит два входа и два выхода. Сообщения, приходящие на лю-
бую из входных линий, могут переключаться на любую выходную линию. В на-
шем примере сообщения будут содержать до четырех частей (рис. 8.21,
б).
Поле
Модуль
сообщает, какую память использовать. Поле
Адрес
определяет адрес в этом
модуле памяти. В поле
Код операции
содержится операция, например READ или
WRITE. Наконец, дополнительное поле
Значение
может содержать операнд, например
32-битное слово, которое нужно записать при выполнении операции WRITE. Комму-
татор исследует поле
Модуль
и использует его для определения, через какую выход-
ную линию нужно отправить сообщение: через X или через Y.
А —
— х
•Y
Модуль
Адрес
Код операции Значение i
а
б
Рис. 8.21
. Коммутатор 2x2 (а); формат сообщения (б)
Наши коммутаторы 2x2 можно компоновать различными способами и полу-
чать
многоступенчатые сети
[1, 15, 78]. Один из возможных вариантов —
сеть
omega
(рис. 8.22). Здесь мы соединили 8 процессоров с 8 модулями памяти, ис-
пользуя 12 коммутаторов. Для п процессоров и п модулей памяти нам понадобит-
ся log
2
n ступеней, п/2 коммутаторов на каждую ступень, то есть всего (n/2)log2n
6 0 6 Глава 8. Архитектуры компьютеров параллельного действия
коммутаторов, что намного лучше, чем п
2
узлов (точек пересечения), особенно для
больших п.
3 ступени
Процессоры
~000
Рис. 8.22. Сеть omega
Рисунок разводки сети omega часто называют
полным тасованием,
поскольку
смешение сигналов на каждой ступени напоминает колоду карт, которую раздели-
ли пополам, а затем снова соединили, чередуя карты. Чтобы понять, как работает
сеть omega, предположим, что процессору 011 нужно считать слово из модуля па-
мяти 110. Процессор посылает сообщение READ, чтобы переключить коммутатор
ID, который содержит 110 в поле
Модуль.
Коммутатор берет первый (то есть край-
ний левый) бит от 110 и по нему узнает направление. 0 указывает на верхний выход,
а 1 — на нижний. Поскольку в данном случае этот бит равен 1, сообщение отправ-
ляется через нижний выход в 2D.
Все коммутаторы второй ступени, включая 2D, для определения направления
используют второй бит. В данном случае он равен 1, поэтому сообщение отправля-
ется через нижний выход в 3D. Затем проверяется третий бит. Он равен 0. Следова-
тельно, сообщение переходит в верхний выход и прибывает в память 110, чего мы
и добивались. Путь, пройденный данным сообщением, обозначен на рис. 8.22 буквой а.
Как только сообщение пройдет через сеть, крайние левые биты номера модуля
больше не требуются. Их можно использовать, записав туда номер входной линии,
чтобы было известно, по какому пути посылать ответ. Для пути а входные линии —
это 0 (верхний вход в ID), 1 (нижний вход в 2D) и 1 (нижний вход в 3D) соответ-
ственно. При отправке ответа тоже используется 011, только теперь число читает-
ся справа налево.
В то время как все это происходит, процессору 001 нужно записать слово в мо-
дуль памяти 001. Здесь происходит аналогичный процесс. Сообщение отправля-
ется через верхний, верхний и нижний выходы соответственно. На рис. 8.22 этот
путь отмечен буквой Ь. Когда сообщение пребывает в пункт назначения, в поле
Модуль
содержится 001. Это число показывает путь, который прошло сообщение.
Поскольку эти два запроса используют совершенно разные коммутаторы, линии
и модули памяти, они могут протекать параллельно.
Мультипроцессоры с памятью совместного использования 607
А теперь рассмотрим, что произойдет, если процессору 000 одновременно с этим
понадобился доступ к модулю памяти 000. Его запрос вступит в конфликт с запро-
сом процессора 001 на коммутаторе ЗА. Одному из них придется подождать. В отли-
чие от координатного коммутатора, сеть omega — это
блокируемая сеть.
Не всякий
набор запросов может передаваться одновременно. Конфликты могут возникать
при использовании одного и того же провода или одного и того же коммутатора, а
также между запросами, направленными к памяти, и ответами, исходящими из
памяти.
Желательно равномерно распределить обращения к памяти по модулям. Один
из возможных способов — использовать младшие биты в качестве номера модуля
памяти. Рассмотрим адресное пространство с побайтовой адресацией для компью-
тера, который в основном получает доступ к 32-битным словам. Два младших
бита обычно будут 00, но следующие три бита будут равномерно распределены.
Если использовать эти три бита в качестве номера модуля памяти, последовательно
адресуемые слова будут находиться в последовательных модулях. Система памяти,
в которой последовательные слова находятся в разных модулях памяти, называет-
ся
расслоенной.
Расслоенная система памяти доводит параллелизм до максиму-
ма, поскольку большая часть обращений к памяти — это обращения к последова-
тельным адресам. Можно разработать неблокируемые сети, в которых существует
несколько путей от каждого процессора к каждому модулю памяти.
Мультипроцессоры NUMA
Размер мультипроцессоров UMA с одной шиной обычно ограничивается до не-
скольких десятков процессоров, а для координатных мультипроцессоров или муль-
типроцессоров с коммутаторами требуется дорогое аппаратное обеспечение, и они
ненамного больше по размеру. Чтобы получить более 100 процессоров, нужно что-
то предпринять. Отметим, что все модули памяти имеют одинаковое время доступа.
Это наблюдение приводит к разработке мультипроцессоров
NUMA (NonUniform
Memory Access — с неоднородным доступом к памяти).
Как и мультипроцессоры
UMA, они обеспечивают единое адресное пространство для всех процессоров, но,
в отличие от машин UMA, доступ к локальным модулям памяти происходит быс-
трее, чем к удаленным. Следовательно, все программы UMA будут работать без
изменений на машинах NUMA, но производительность будет хуже, чем на маши-
не UMA с той же тактовой частотой.
Машины NUMA имеют три ключевые характеристики, которыми все они обла-
дают и которые в совокупности отличают их от других мультипроцессоров:
1. Существует одно адресное пространство, видимое для всех процессоров.
2. Доступ к удаленной памяти производится с использованием команд LOAD и STORE.
3. Доступ к удаленной памяти происходит медленнее, чем доступ к локальной
памяти.
Если время доступа к удаленной памяти не скрыто (поскольку кэш-память от-
сутствует), то такая система называется
NC-NUMA (No Caching NUMA — NUMA
без кэширования).
Если присутствуют согласованные кэши, то система называет-
ся
CC-NUMA (Coherent Cache NUMA — NUMA с согласованной кэш-памятью).