Э. Таненбаум - Архитектура компьютера (1127755), страница 168
Текст из файла (страница 168)
Сеть может быть реализована в виде решетки, гиперкуба или иметь другую топологию. Каждый узел содержит элементы каталога для 2'з 64-байтных строк каша, образующих 2м байт памяти. На данный момент мы предполагаем, что строка может содержаться не более чем в одном кэше. Узел 255 Узел 0 Процессор Память Процессор Память Процессор Память ая 21з Биты 8 18 6 Рис. 8.27. Мультипроцессор на основе каталога, содержащий 256 узлов (а); разбиение 32-разрядного адреса памяти на поля (б); каталог в узле 36 (в) Ьзультипроцессоры 659 Чтобы понять, как работает каталог, проследим путь команды 1.0А0 из процессора 20, который обращается к кэшированной строке. Сначала процессор, выдавший команду, передает ее диспетчеру памяти, который транслирует ее, чтобы получить физический адрес, например, Ох24000108. Диспетчер памяти разделяет этот адрес на три части, как показано на рис.
8.27, б. В десятичной системе счисления эти три части представляют собой узел 36, строку 4 и смещение 8. Диспетчер памяти видит, что слово памяти, к которому производится обращение, находится в узле 36, а не в узле 20, поэтому посылает запрос через сеть в узел 36, где находится нужная строка, узнает, есть ли строка 4 в каше, и если да, то где именно. Когда запрос приходит в узел 36, он направляется в устройство каталога.
Устройство проверяет таблицу из 2щ элементов (один элемент на каждую строку кэша) и извлекает элемент 4. На рис. 8.27, в видно, что строка отсутствует в каше, поэтому устройство вызывает строку 4 из локального ОЗУ, отправляет ее узлу 20 и обновляет элемент каталога 4, показывая, что эта строка находится в каше узла 20. А теперь рассмотрим второй запрос, на этот раз для строки 2 из узла 36. На рис. 8.27, в видно, что эта строка находится в каше узла 82.
В этот момент устройство может обновить элемент 2 каталога, показывая, что строка находится теперь в узле 20, затем послать сообщение в узел 82, чтобы строка из него была передана в узел 20, и объявить кэш узла 82 недействительным. Отметим, что передавать многочисленные сообщения приходится в любом мультипроцессоре с общей памятью. Давайте вычислим, сколько памяти занимают каталоги. Каждый узел содержит 16-мегабайтное ОЗУ и 2'з 9-разрядных элементов для трассировки этого ОЗУ. Таким образом каталог отнимает примерно 9 х 2ж бит от 16 Мбайт, или около 1,76 74, что вполне допустимо. Даже если длина строки кэша составляет 32 байта, потери памяти составят всего 4 74.
Если длина строки каша равна 128 байт, потери окажутся егце ниже — 1 4. Очевидным недостатком этой схемы является то, что строка может быть кэширована только одним узлом. Чтобы строки можно было кэшировать в нескольких узлах, требуется какой-то способ их поиска (например, чтобы объявлять недействительными или обновлять при записи). Возможны различные варианты.
Один из вариантов — предоставить каждому элементу каталога я полей для идентификации других узлов, что позволит кэшировать каждую строку на нескольких узлах (до я узлов). Второй вариант — заменить поле номера узла битовой картой, по одному биту на узел. Здесь нет ограничений на количество копий, но существенно растут непроизводительные затраты. Каталог, содержащий 256 бит для каждой 64-байтной (512-разрядной) строки каша, требует более 50 74 памяти. Третий вариант — хранить в каждом элементе каталога 8-разрядное поле и использовать это поле в качестве заголовка связного списка, объединяющего вместе все копии строки каша. При такой стратегии требуется дополнительное пространство на каждом узле для указателей связного списка.
Кроме того, требуется просматривать список, чтобы в случае необходимости найти все копии. Каждая из трех стратегий имеет свои достоинства и недостатки. На практике используются все три стратегии. 660 Глава 8. Параллельные компьютерные архитектуры Еще одна проблема данной схемы — как проверять, обновлена исходная память или нет.
Если нужно считать строку каша, которая не изменялась, запрос может быть удовлетворен из основной памяти, и при этом не нужно направлять запрос в кэш. Если же требуется считать измененную строку каша, запрос должен быть направлен в тот узел, в котором находится эта строка каша, поскольку только здесь имеется ее действительная копия. Если же разрешается иметь только одну копию строки кэша, как показано на рис. 8.27, то контролировать изменения в строках кзша нет никакого смысла, поскольку любой новый запрос требует передачи сообщения существующей копии, чтобы обьявить ее недействительной.
Естественно, для хранения информации о состоянии каждой строки кэша («чистая» или «грязная») требуется информировать исходный узел о каждом изменении строки каша, даже если существует только одна копия этой строки. Если же таких копий несколько, изменение одной из них означает необходимость объявления всех остальных недействительными, поэтому нужен какой-то протокол, позволяющий избежать ситуации гонок. Например, чтобы изменить совместно используемую строку каша, один из держателей этой строки перед ее изменением мог бы запросить монопольный доступ к ней. Такой запрос означал бы обьявление всех остальных копий недействительными. Другие возможные оптимизации СС-ХПМА-машин обсуждаются в !1951 йцМА-мультипроцессор Зцп Нге Е25К В качестве примера ХПМА-машин с общей памятью рассмотрим семейство мультипроцессоров Зап Р!ге компании 5пп М!сгозузгешз. В этом семействе имеется много различных моделей, из которых мы рассмотрим мультипроцессор Е25К, содержащий 74 процессора П!1гаБРАЕС !У.
По своей сути, каждый из этих процессоров представляет собой пару процессоров П!гга5РАКС !П Си с общими кэшем и памятью. Система Е15К отличается только тем, что вместо сдвоенных в ней используются одиночные процессоры. В семействе есть и более простые модели, но нам интересно выяснить, как работают модели с максимальным числом процессоров. Система Е25К содержит 18 наборов плат, кахсдый набор состоит из платы процессор-память, платы ввода-вывода с четырьмя РС1-слотами и платы расширения. Плата расширения попарно объединяет платы процессор-память и ввода-вывода, связывая эти пары с центральной панелью, которая несет остальные платы и обеспечивает их коммутацию. На каждой плате процессор-память находится 4 процессора и 4 модуля ОЗУ по 8 Гбайт.
Таким образом, на каждой плате процессор-память имеется 8 процессоров и 32-гигабайтное ОЗУ (для Е15К— 4 процессора и столько же 32-гигабайтных ОЗУ). В целом в системе Е25К имеются 144 процессора, 576 Гбайт памяти и 72 РС1-слота, как показано на рис. 8.28. Любопытно, что число 18 было выбрано исключительно из соображений габаритов: система из 18 наборов плат — это самая большая система, которую можно внести в дверной проем, не разбирая на части. В то время как программисты думают только о нулях и единицах, разработчикам приходится задумываться, в том числе, и о том, как покупатель будет вносить их творение в дом. Для соединения 18 наборов плат на центральной панели имеются три схемы перекрестной коммутации размером 18 х 18 — по одной схеме для адресных ли- Мультипроцессоры 661 ний, ответов и данных.
В дополнение к 18 наборам плат, в центральную панель вставляется плата управления системой, содержащая, помимо процессора, интерфейсы для подключения дисковода, ленточного накопителя, последовательных линий и прочей периферии, необходимой для загрузки системы, ее поддержки и управления. Плата управления системой 9 плат цессор-память 9 плат ввода-вывода Рис. 8.28.
Мультипроцессор Е2ЕК компании Боп Мгсговувтегпв Подсистема памяти — сердце любого мультипроцессора. Как же распределенная память соединяется со 144 процессорами? Прямолинейные подходы, то есть большая общая шина слежения или схема перекрестной коммутации размером 144 х 72, в данном случае малопригодны. Первый вариант плох тем, что общая шина становится узким местом всей системы, а второй не годится потому, что разрабатывать такой коммутатор сложно и дорого.
Поэтому большим мульти- процессорам, таким как Е25К, неизбежно приходится использовать нетривиальные подсистемы памяти. На уровне наборов плат логика слежения обеспечивает каждому процессору возможность сверять поступающие запросы со списком блоков в его локальном кэше.
Когда процессор обращается к слову памяти, он сначала преобразует виртуальный адрес в физический и проверяет, есть ли нужный блок в каше. (Физические адреса 43-разрядные, но из-за габаритных требований объем памяти ограничен значением 576 Гбайт.) Если нужный блок обнаруживается в собственном каше, затребованное слово возвращается.
В противном случае логика слежения проверяет, есть ли нужный блок в пределах того же набора плат. Если есть, то запрос выполняется. Иначе, как показано далее, запрос посылается через схему пе- 662 Глава 8. Параллельные компьютерные архитектуры рекрестной коммутации адресных линий. Логика слежения способна обслуживать по одному запросу за такт. Так как тактовая частота системы составляет 150 МГц, можно обработать 150 миллионов запросов в секунду, или 2,7 миллиардов запросов для всех 18 наборов плат.