Рис. 14.3. Многопроцессорная система с координатным коммутатором
Координатный коммутаторы используются уже столетие для соединения группы входных линий с группой выходных линий произвольным образом.
Координатный коммутатор представляет собою неблокируемую сеть. Это значит, что любая входная линия (процессор) всегда может быть связана с любой выходной (модулем памяти), независимо от того, сколько входных и выходных линий уже включены. Более того, не требуется никакого предварительного планирования. Если входных линий произвольным образом соединены посредством коммутатора с выходной линией, всегда можно связать оставшуюся пару линий.
Недостатком координатного коммутатора является то, что количество узлов растёт пропорционально квадрату количества линий.
Координатный коммутатор используется, например, в ЭВМ Sun Enterprise 10000. Его размер — 16´16. К каждому «входному» каналу подключены 4 процессора.
Системы с координатными коммутаторами можно практически реализовать размером порядка сотни процессоров. Для больших систем используются другие сети межсоединений.
Как и системы с однородным доступом к памяти, они обеспечивают единое адресное пространство, но доступ к близлежащим модулям памяти происходит быстрее, чем к удалённым.
Системы с неоднородным доступом к памяти также могут быть с согласованной кэш-памятью (Coherent Cache NUMA, CC-NUMA) или без кэширования (No Caching NUMA, NC-NUMA).
Рис. 14.4. Многопроцессорная система с неоднородным доступом к памяти P — процессор, M — память, окружности — контроллеры памяти
Многопроцессорные системы с неоднородным доступом к памяти без кэширования используют сложное программное обеспечение для оптимизации расположения страниц в памяти. Обычно существует сторожевой процесс (демон), так называемый страничный сканер, который периодически запускается, следит за статистикой использования страниц и перемещает их таким образом, чтобы повысить производительность. Если страница оказывается в неправильном месте, страничный сканер помечает её таким образом, что при следующем обращении к ней происходит ошибка из-за отсутствия страницы. При обработке такой ошибки страница размещается максимально близко к процессору, который её затребовал.
Здесь возможны проблемы: страница может постоянно перемещаться из одного места в другое, а процедура перемещения может отнимать всё время. Для предотвращения пробуксовки системы, обычно, вводится правило, согласно которому страница, помещённая в некоторое место, должна оставаться там некоторое время . Было рассмотрено множество других алгоритмов, но ни один из них не оказался в общем случае лучше, чем этот.
Многопроцессорные системы с неоднородным доступом без кэширования плохо расширяются: в большой ЭВМ обращение к удалённой памяти происходит на порядок медленнее, чем к локальной. Поэтому везде, где можно используется согласованная кэш-память. Однако с добавлением кэш-памяти возникает проблема согласования. Общей шины нет, так что кэширование с отслеживанием шины невозможно.
Самый распространённый метод основан на каталогах. При каждом процессоре хранится каталог, который сообщает, где именно находится каждая строка кэш-памяти и каково её состояние. Чем более гибкая система, тем сложнее устроен каталог. Компромисс ищется между разнообразием поддерживаемых способов кэширования и сложностью каталога. С усложнением каталога растут: время поиска по нему и время его обновления. Поскольку обращение к каталогу происходит при каждой операции с памятью, каталог должен находится в специализированном высокоскоростном аппаратном обеспечении, способном обрабатывать запрос за долю цикла шины.
Системы с неоднородным доступом к памяти расширяемы, относительно дешёвы, но имеют большой недостаток: обращения к удалённой памяти происходит гораздо медленнее, чем к локальной. Кэширование помогает далеко не всегда, ибо при большом количестве обрабатываемых данных промахи будут происходить постоянно, и производительность будет такая же, как в системе без кэширования.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.