Э. Таненбаум - Архитектура компьютера (1127755), страница 170
Текст из файла (страница 170)
Как известно, диспетчер памяти выполняет трансляцию виртуального адреса в физический. Если после трансляции оказывается, что строки нет в «настоящем» аппаратном каше, очень трудно сказать, есть вообще искомая строка в основной памяти или ее там нет. Аппаратная поддержка механизма разбиения памяти на страницы здесь не поможет, поскольку каждая страница состоит из большого количества отдельных строк каша, которые располагаются в системе независимо друг от друга. Даже если известно, что строки в основной памяти нет, как выяснить, где она есть? В данном случае нельзя спросить об этом «домашнюю» машину потерявшейся страницы, поскольку таковой машины в системе просто нет.
Было предложено несколько решений этой проблемы. Чтобы знать, находится строка каша в основной памяти или нет, для каждой с~роки каша можно аппаратно поддерживать специальный тег. Тогда диспетчер памяти сможет сравнивать тег нужной строки с тегами всех строк каша, пока не обнаружится совпадение. Другое решение — отображать страницы целиком, но при этом не требовать наличия всех строк каша. Тогда для каждой страницы потребуется аппаратно построить битовую карту, где каждой строке соответствует 1 бит, который и укажет на присутствие или отсутствие этой строки. В этой схеме, которая называется 666 Глава 8. Параллельные компьютерные архитектуры простой схемой СОМА, если строка присутствует, она должна находиться в правильной позиции на своей странице. Если она отсутствует, то любая попытка использовать ее должна вызывать исключение, которое позволит программно найти и задействовать нужную строку.
Таким образом, система будет искать только те строки, которые действительно находятся в удаленной памяти. Еще одно решение — предоставить каждой странице «домашнюю» машину (домашнюю в том смысле, что в каталоге для нее выделяется запись, а не в том, что на этой машине хранятся данные). Тогда чтобы выяснить, где искать строку, можно отправить сообщение ее домашней машине. Другое решение — организовать память в виде древовидной структуры и искать, двигаясь вверх, пока строка не будет найдена.
Вторая проблема связана с удалением последней копии. Как и в СС-'л1ПМА- машине, строка каша может одновременно находиться в нескольких узлах. Если происходит кэш-промах, строку нужно прочитать, а это обычно означает ее удаление. А что произойдет, если выбранная строка окажется последней копией? В этом случае ее нельзя удалять. Одно из возможных решений — вернуться к каталогу и проверить, существуют ли другие копии. Если да, то строку можно смело удалять.
Если нет, ее нужно где-то разместить. Другое решение — пометить одну из копий каждой строки кэша как главную и никогда ее не удалять. При таком подходе проверять каталог не потребуется. В любом случае СОМА-машина потенциально должна иметь более высокую производительность, чем СС-ХБМА,но пока было создано всего несколько СОМА-машин, а для реализации всего их потенциала нужно накопить некоторый опыт. Первыми СОМА-машинами были КЯК-1 1341 и Рата РНаз1оп МасМпе 1831. В качестве более свежего примера можно привести ЯЭААКС [62).
Мультикомпьютеры Как показано на рис. 8.18, в категорию М1МР входят два вида процессоров с параллельной архитектурой: мультипроцессоры и мультикомпьютеры. В предыдущем разделе мы рассматривали мультипроцессоры. Мы выяснили, что мульти- процессоры могут иметь общую память, доступ к которой выполняется обычными командами ЫА0 и 5108Е. Для реализации такой памяти может использоваться множество схем, включая шины слежения, сети с перекрестной и многоступенчатой коммутацией, различные схемы на основе каталога. Во всех случаях программы, написанные для мультипроцессора, могут получать доступ к любому месту в памяти, не имея никакой информации о внутренней топологии или схеме реализации.
Именно благодаря такой иллюзии мультипроцессоры весьма популярны у пользователей и программистов. Однако мультипроцессорам свойственны и некоторые недостатки, и это автоматически означает усиление роли мультикомпьютеров. В первую очередь, мультипроцессоры плохо масштабируются. Мы уже знаем, сколько разнообразных устройств потребовалось инженерам компании 8пп ввести в систему Е25К, чтобы поддерживать работу 72 процессоров. Что касается мультикомпьютеров, Мультикомпьютеры 667 то далее мы рассмотрим сне~ему из 65 536 процессоров.
Пройдут годы, прежде чем кто-нибудь сумеет построить коммерческий мультипроцессор с 65 536 узлами, да и к тому времени в ходу уже будут мультикомпьютеры с миллионами процессоров. Далее, на производительности мультипроцессора может серьезно сказываться конкуренция за доступ к памяти. Если 100 процессоров постоянно пытаются считывать и записывать одни и те же переменные, конкуренция за ресурсы модулей памяти,шин и каталогов может сильно ударить по производительности. Вследствие этих и других факторов разработчики проявляют повышенный интерес к таким параллельным компьютерным архитектурам, в которых каждый процессор имеет собственную память, недоступную напрямую для других процессоров.
Это — мультикомпьютеры. Поскольку программы на разных процессорах в мультикомпьютере не могут получить доступ к памяти других процессоров командами ЖОАО и 5ТОЯЕ, они взаимодействуют друг с другом с помощью примитивов зело и гесет уе, которые используются для передачи сообщений. Это различие полностью меняет модель программирования. Каждый узел в мультикомпьютере состоит из одного или нескольких процессоров, ОЗУ (общего для процессоров только данного узла), дисковода и (или) других устройств ввода-вывода, а также коммуникационного процессора. Коммуникационные процессоры связаны между собой высокоскоростной коммуникационной сетью (см. далее подраздел «Коммуникационные сетиз).
Используется множество различных топологий, схем коммутации и алгоритмов выбора маршрута, однако у всех мультикомпьютеров есть общая черта: когда программа выполняет примитив зепб, коммуникационный процессор извещается об этом и передает блок данных в целевую машину (возможно, после предварительного запроса и получения разрешения). Обобщенная схема мультикомпьютера показана на рис. 8.30. Узел Коммун пр Рис. 8.80. Схема мультикомпьютера Коммуникационные сети Как показано на рис. 8.30, мультикомпьютеры связываются друг с другом через коммуникационные сети.
Рассмотрим их подробнее. Интересно отметить, что 668 Глава 8. Параллельные компьютерные архитектуры мультикомпьютеры и мультипроцессоры в этом отношении очень похожи, поскольку мультипроцессоры часто содержат несколько модулей памяти, которые также должны связываться друг с другом и с процессорами. Следовательно, многое из того, о чем мы будем говорить в этом подразделе, применимо к обоим типам параллельных компьютерных архитектур. Основная причина сходства коммуникационных связей в мультипроцессоре и мультикомпьютере заключается в том, что в обоих случаях имеет место передача сообщений.
Даже в однопроцессорной машине, когда процессору нужно считать или записать слово, он активизирует определенные линии на шине и ждет ответа. Это примерно то же самое, что и обмен сообщениями: инициатор посылает запрос и ждет ответа. В больших мультипроцессорах при взаимодействии между процессорами и удаленной памятью процессор почти всегда посылает в память сообщение, так называемый пакет, в котором запрашиваются те или иные данные, а память посылает процессору ответный пакет.
ТОПОЛОГИЯ Топология коммуникационной сети определяет схему размещения линий связи и коммутаторов (это может быть, например, кольцо или решетка). Топологию сетей принято изображать в виде графов, в которых дуги соответствуют линиям связи, а узлы — коммутаторам (рис. 8.31). С каждым узлом в сети (или в соответствующем графе) связан определенный набор линий связи. Математики называют число линий степенью узла, инженеры — коэффициентом разветвления.
Чем больше степень, тем больше вариантов маршрута и тем выше отказоустойчивость. Если каждый узел содержит л дуг и связи выполнены правильно, можно построить коммуникационную сеть так, чтобы она оставалась полносвязной, даже если повреждены Й вЂ” 1 линий. Следующая характеристика коммуникационной сети — ее диаметр. Если расстоянием между двумя узлами мы будем считать число дуг, которые нужно пройти, чтобы попасть из одного узла в другой, то диаметром графа является расстояние между двумя узлами, расположенными дальше всех друг от друга. Диаметр сети определяет самую большую задержку при передаче пакетов от одного процессора к другому или от процессора к памяти, поскольку каждая пересылка через линию связи занимает определенное время.