Классификация МКМД-систем

В МКМД-системе каждый процессорный элемент (ПЭ) выполняет свою про­грамму достаточно независимо от других ПЭ. В то же время процессорные элементы должны как-то взаимодействовать друг с другом. Различие в способе такого взаимодействия оп­ределяет условное деление МКМД-систем на ВС с общей памятью и системы с распределенной памятью (рис. 5.7).

В системах с общей памятью, которые характеризуют как сильно связанные, имеется общая память данных и команд, доступная всем процессорным элементам с помощью общей шины или сети соеди­нений. Такие системы называются мультипроцессорами. К этому типу относятся симметричные мультипроцессоры (UMA (SMP), Symmetric Multiprocessor), системы с неоднородным доступом к памяти (NUMA, Non-Uniform Memory Access) и системы, с так называемой, локальной памятью вместо кэш-памяти (COMA, Cache Only Memory Access).

Если все процессоры имеют равный доступ ко всем модулям памяти и всем устройствам ввода-вывода и каждый процессор взаимозаменяем с другими процессорами, то такая система называется SMP-системой. В системах с общей памятью все процессоры имеют равные возможности по доступу к единому адресному пространству. Единая память может быть построена как одноблочная или по модульному принципу, но обычно практикуется второй вариант.

SMP-системы относятся к архитектуре UMA. Вычислительные системы с общей памятью, где доступ любого процессора к памяти производится единообразно и занимает одинаковое время, называют системами с однородным доступом к памяти UMA (Uniform Memory Access).

С точки зрения уровней используемой памяти в архитектуре UMA рассматривают три варианта построения мультипроцессора:

Классическая (только с общей основной памятью);

С дополнительным локальным кэшем у каждого процессора;

С дополнительной локальной буферной памятью у каждого процессора (рис. 5.8).

С точки зрения способа взаимодействия процессоров с общими ресурсами (памятью и СВВ) в общем случае выделяют следующие виды архитектур UMA:

С общей шиной и временным разделением (7.9);

С координатным коммутатором;

На основе многоступенчатых сетей.

Использование только одной шины ограничивает размер мультипроцессора UMA до 16 или 32 процессоров. Чтобы получить больший размер, требуется другой тип коммуникационной сети. Самая простая схема соединения – координатный коммутатор (рис. 5.10). Координатные коммутаторы используются на протяжении многих десятилетий для соединения группы входящих линий с рядом выходящих линий произвольным образом.

Координатный коммутатор представляет собой неблокируемую сеть. Это значит, что процессор всегда будет связан с нужным блоком памяти, даже если какая-то линия или узел уже заняты. Более того, никакого предварительного планирования не требуется.


Координатные коммутаторы вполне применимы для систем средних размеров (рис. 5.11).


На основе коммутаторов 2x2 можно построить многоступенчатые сети. Один из возможных вариантов – сеть omega (рис. 5.12). Для n процессоров и n модулей памяти тредуется log 2 n ступеней, n/2 коммутаторов на каждую ступень, то есть всего (n/2)log 2 n коммутаторов на каждую ступень. Это намного лучше, чем n 2 узлов (точек пересечения), особенно для больших n.

Размер мультипроцессоров UMA с одной шиной обычно ограничивается до нескольких десятков процессоров, а для координатных мультипроцессоров или мультипроцессоров с коммутаторами требуется дорогое аппаратное обеспечение, и они ненамного больше по размеру. Чтобы получить более 100 процессоров, необходим иной доступ к памяти.

Для большей масштабируемости мультипроцессоров приспособлена архитектура с неоднородным доступом к памяти NUMA (NonUniform Memory Access). Как и мультипроцессоры UMA, они обеспечивают единое адресное пространство для всех процессоров, но, в отличие от машин UMA, доступ к локальным модулям памяти происходит быстрее, чем к удаленным.

В рамках концепции NUMA реализуется подходы, обозначаемые аббревиатурами NC-NUMA и CC-NUMA.

Если время доступа к удаленной памяти не скрыто (т.к. кэш-память отсутствует), то такая система называется NC-NUMA (No Caching NUMA – NUMA без кэширования) (рис. 5.13).

Если присутствуют согласованные КЭШи, то система называется CC-NUMA (Coherent Cache Non-Uniform Memory Architecture – NUMA с согласованной кэш-памятью) (7.14).

Организация памяти МПС. Сегментация памяти. Вычисление адреса. Внутренняя КЭШ память .

Память микропроцессорной системы выполняет функцию временно­го или постоянного хранения данных и команд. Объем памяти определяет допустимую сложность выполняемых системой алгоритмов, а также в некоторой степени и скорость работы системы в целом. Модули памяти выполняются на микросхемах памяти (оперативной или постоянной). Все чаще в составе микропроцессорных систем используется флэш-память (англ. – flash memory), которая представляет собой энергонезависимую память с возможностью многократной перезаписи содержимого.

Для подключения модуля памяти к системной магистрали используются блоки сопряжения, которые включают в себя дешифратор (селектор) адреса, схему обработки управляющих сигналов магистрали и буферы данных (рисунок7.4.1).

Рисунок 7.4.1. Схема подключения модуля памяти.

В пространстве памяти микропроцессорной системы обычно выделяются несколько особых областей, которые выполняют специальные фун­кции. К ним относятся:

– память программы начального запуска, выполненная на ПЗУ или флэш-памяти;

– память для стека или стек (Stack) – это часть оперативной памяти, пред­назначенная для временного хранения данных;

– таблица векторов прерываний, содержащая адреса начала программ обработки прерываний;

– память устройств, подключенных к системной шине.

Все остальные части пространства памяти, как правило, имеют универсальное назначение. В них могут располагаться как данные, так и программы (конечно, в случае одношинной архитектуры).

Часто простран­ство памяти делится на сегменты с программно изменяемым адресом начала сегмента и с установленным размером сегмента. Например, в процессоре Intel 8086 сегментирование памяти организовано следующим образом.

Вся память системы представляется не в виде непрерывного пространства, а в виде нескольких кусков – сегментов заданного размера (по 64 Кбайта), положение которых в пространстве памяти можно изменять программным путем.

Для хранения кодов адресов памяти используются не отдельные регистры, а пары регистров:

Сегментный регистр определяет адрес начала сегмента (то есть положение сегмента в памяти);

Регистр указателя (регистр смещения) определяет положение рабочего адреса внутри сегмента.

При этом физический 20-разрядный адрес памяти, выставляемый на внешнюю шину адреса, образуется так, как показано на рисунке7.4.2, то есть путем сложения смещения и адреса сегмента со сдвигом на 4 бита.

Рисунок 7.4.2. Формирование физического адреса памяти из адреса сегмента и смещения.

Положение этого адреса в памяти показано на рисунке7.4.3.

Рисунок 7.4.3. Положение физического адреса в памяти

Сегмент может начинаться только на 16-байтной границе памяти (так как адрес начала сегмента, по сути, имеет четыре младших нулевых разряда, как видно из рисунка 7.4.2), то есть с адреса, кратного 16. Эти допустимые границы сегментов называются границами параграфов.

Отметим, что введение сегментирования, прежде всего, связано с тем, что внутренние регистры процессора 16-разрядные, а физический адрес памяти 20-разрядный (16-разрядный адрес позволяет использовать память только в 64 Кбайт, что явно недостаточно).

Кэш–память располагается между основной памятью (ОП) и центральным процессором для снижения затрат времени на обращение ЦП к ОП.

Идея кэш-памяти основана на прогнозировании наиболее вероятных обращений ЦП к ОП. Наиболее «вероятные» данные и команды копируются в быструю, работающую в темпе ЦП, кэш-память до начала их непосредственного использования ЦП, так что обращение к данным и командам, используемым в текущий момент времени, может происходить быстро, без обращения к ОП. В основу такого подхода положен принцип локальности программы или, как еще говорят, гнездовой характер обращений, имея в виду, что адреса последовательных обращений к ОП образуют, как правило, компактную группу. При обращении к ОП в кэш-память копируются не отдельные данные, а блоки информации, включающие те данные, которые с большой степенью вероятности будут использованы в ЦП на последующих шагах работы. В связи с этим последующие команды выбираются ЦП уже не из ОП, а из быстрой кэш-памяти. Когда ЦП нужно считать или записать некоторое данное в ОП, он сначала проверяет его наличие в кэш-памяти. Эффективность кэш-системы зависит от размера блока и алгоритма программ.

Многопроцессорность вычислительных систем приводит к проблеме одновременного доступа к памяти со стороны нескольких процессоров. В зависимости от того, каким образом организована память многопроцессорной системы, различают:

1. Вычислительные системы с общей памятью (shared memory) – Мультипроцессоры:

i. PVP (CrayT90)

ii. SMP(Intel SHV, SunFire, Dec8400 и т.д.)

i. COMA (KSR-1, DDM)

ii. CC-NUMA (Stanford Dash, Data General и т.д.)

iii. NCC-NUMA (Crag T3E)

2. Вычислительные системы с распределенной памятью (distributed memory) – Мультикомпьютеры:

ii. MPP – слабосвязанные системы (Intel TFLOPS)

Различие между общей и распределенной памятью – это разница в структуре виртуальной памяти, то есть в том, как эта память выглядит со стороны процессоров. Другими словами, общую память от распределенной отличает то, каким образом подсистема памяти интерпретирует поступивший от микропроцессора адрес ячейки (глобальный адрес или локальный адрес).

Физически почти вся память разделена на автономные компоненты, доступ к которым может производиться независимо.

Рассмотрим модели архитектур памяти ВС, которые будут верны как для класса множественный поток данных MIMD, так и для SIMD:

UMA - ВС с общей памятью, где доступ любого процессора к памяти производится единообразно и занимает одинаковое время. Системы с однородным доступом к памяти:

Mp – общая память

Pi – процессор

Общая шина

Особенности: в каждый момент времени обмен по шине, может вести только один из процессоров. Производительность падает с увеличением количества процессоров. Чаще всего от 4 до 8 процессоров в системе, максимальная производительность = 2. Систему нельзя отнести к отказоустойчивым, так как отказ одного модуля памяти или процессора может привести к отказу всей системы.

В данном классе архитектур существуют многопроцессорные системы с памятью, состоящей из нескольких модулей. Шина заменена коммутатором, который маршрутизирует запросы процессора к одному из нескольких модулей памяти. При чём все модули памяти входят в единое адресное пространство. Достоинство – можно обрабатывать несколько запросов.

NUMA – неоднородный доступ к памяти. Здесь различают несколько классов. Используется единое адресное пространство, но каждый процессор имеет локальную память (как правило, кэш). Доступ к ЛП осуществляется гораздо быстрее, чем доступ к удаленной памяти через сеть или коммутатор.


COMA – только с кэш. Локальная память каждого процессора построена как большая кэш. Кэши всех процессоров в совокупности представляют собой глобальную память системы. Данные не привязаны статически к определенному модулю памяти и не имеют уникального адреса. Данные переносится в кэш процессора, который последним их запросил.



Главный недостаток: очень сложное управление, ОС не участвует в процессе управления (все задачи возлагаются на аппаратуру).

CC-NUMA – модель кэш-когерентного доступа к неоднородной памяти. Используется не кэш, а обычная физически распределенная память. Не требуется какого-либо программного обеспечения для сохранения множества обновленных данных. С этим справляется аппаратный уровень.

NCC-NUMA – модель предполагает использование единого адресного пространства, но не обеспечивает согласованности глобальных данных на аппаратном уровне. Управление возлагается на ПО, это считается недостатком, но модель наиболее перспективная с точки зрения повышения производительности.

Мультикомпьютеры – блоки, из которых строится система, представляют собой с процессором и памятью.

NORMA – архитектура без прямого доступа к удаленной памяти.


P – процессор

M – локальная память

K0 и K1 – контроллер ввода/вывода

Блоки – процессорные элементы. Из них собирают системы.

Каждый процессор в такой системе может обратиться к удаленной памяти только путем обмена сообщениями с процессорами, которым принадлежит адресуемая память. Все ПЭ по отношению друг к другу рассматриваются как устройства ввода-вывода.

Для посылки сообщений в другой процессорный элемент процессор формирует блок данных в своей локальной памяти и извещает свой локальный контроллер о необходимости передачи информации на внешнее устройство. По сети меж соединений это сообщение пересылается на приёмный контроллер, тот находит место в своей локальной памяти и уведомляет свой процессор о том, что оно поступило, а так же процессор-источник о получении сообщения.



Достоинства – при доступе к данным не возникает конкуренция за шину или коммутатор. Раз отсутствует общая шина, то нет ограничений на количество процессоров. В гораздо меньшей степени стоит проблема достоверности кэш. Каждый процессор в праве менять свой кэш и не согласовать свои действия с другими.

Недостатки: У каждого процессорного элемента есть система прерываний. От этого сложность обмена информацией (время на пересылку и формирование сообщения, время на формирование запросов прерываний и их обработку).

Важной частью вычислительных систем является память. Организация взаимодействия между процессором и памятью определяет основные характеристики вычислительной системы, остальные элементы обеспечивают связь этого звена с внешними устройствами с внешним миром. Память соединяется с управляющим памятью контроллером (устройством управления памятью) по шине адреса, шине данных и шине управления. Разрядность шины данных определяет, сколько двоичных разрядов одновременно (параллельно) может быть считано из памяти. Каждый двоичный разряд (1 бит) хранится элементом памяти. Элементы для памяти различного типа строятся на основе различных физических принципов записи и хранения информации. Элементы памяти объединяются в ячейки памяти. При этом все элементы ячейки адресуются одновременно, одинаково и организованы так, что одновременно могут выдавать данные на шину данных. Такие объединенные ячейки образуют слово. Количество разрядов данных, считываемых из памяти одновременно, называют длиной выборки. Для хранения 1 байта используется 8 элементов памяти, восьмибитные ячеки памяти организованы с использованием шины данных шириной 8 линий.

Из микросхем памяти (чипов) создаются модули памяти, которые устанавливаются в специальные слоты (разъемы) вычислительной системы. Сейчас наиболее распространены DIMM модули - модули памяти с двумя рядами контактов.

Разрядность адресной шины определяет адресное пространство, то есть количество ячеек памяти, которые могут адресоваться непосредственно. Если разрядность адресной шины - n, то количество всех возможных двоичных комбинаций (количество адресов) определится как N = 2n.

Рис. 1. Организация связи системы памяти с процессором

Память вычислительного устройства может выполнять три операции:

a) хранение информации;

b) запись информации;

c) чтение информации.

Характеристики памяти:

Емкость памяти определяет максимальное количество хранимой в памяти информации и измеряется в битах, байтах, килобайтах, мегабайтах, гигабайтах, терабайтах и т.д.

Удельная емкость определяется как отношение емкости памяти к физически занимаемому ею объему.

Плотность записи информации определяется как количество информации, приходящееся на единицу площади носителя информации или на единицу длины носителя информации.

Время доступа к памяти. Быстродействие памяти определяется продолжительностью выполнения операций при обращении к памяти. Время обращения при записи и время обращения при чтении складывается из времени поиска ячейки памяти по заданному адресу и собственно записи или чтения соответственно.

Классификация памяти:

Память с произвольным доступом

Для памяти с произвольным доступом (электронной памяти) время обращения не зависит от местоположения искомого участка памяти. Выбор ячейки происходит по адресу при помощи электронных схем.

Прямой циклический доступ

При обращении к дисковой памяти используется прямой циклический доступ. Носитель информации непрерывно вращается, поэтому возможность обращения к одному и тому же участку памяти является циклической.

Последовательный доступ

Последовательный доступ к данным возможен при использовании в качестве носителя магнитной ленты, где последовательный просмотр участков носителя необходим для нахождения нужных данных.

Безадресная память

К безадресным можно отнести стековые и ассоциативные запоминающие устройства. При обращении к безадресной памяти в команде обращения к памяти не задается адрес ячейки. В стековых устройствах памяти адрес ячейки памяти отслеживает специальный адресный регистр. При обращении к стеку устанавливается адрес из этого регистра. При обращении к ассоциативной памяти поиск информации ведется по признаку (тэгу) путем сравнения тегов всех ячеек памяти с ассоциативным признаком. Ассоциативный признак записывается для выполнения операции сравнения в специальный регистр признака.

Классификация памяти по функциональному назначению:

ПЗУ - постоянные запоминающие устройства или ROM (Read Only- Memory), служат для хранения постоянных данных и служебных программ.

СОЗУ - сверхоперативное запоминающее устройство, это набор регистров общего назначения - РОН, предназначенных для хранения операндов и результатов выполнения операции в процессоре.

ОЗУ - оперативное запоминающее устройство или RAM (Random Access Memory - память с произвольной выборкой), служит для хранения выполняемой программы и оперативных данных. Если к любому регистру можно обратиться для записи/чтения по его адресу, то такая регистровая структура образует СОЗУ с произвольным доступом.

Классификация по способу хранения информации:

Статическая память

В статических запоминающих устройствах БИС выполнены на бистабильных триггерных элементах памяти (имеющих два стабильных состояния - отсюда и название памяти).

Динамическая память

В динамических запоминающих устройствах используются более дешевые БИС, в которых запоминающим элементом является конденсатор. Конденсатор со временем разряжается (в этом - динамика), поэтому необходимо поддерживать значение потенциала, подзаряжая конденсатор. Этот процесс называют регенерацией.

Постоянная память

В постоянных запоминающих устройствах запоминающим элементом является пережигаемая плавкая перемычка или полупроводниковый диод, играющий роль разрушаемой перемычки. В перепрограммируемых ПЗУ для записи и хранения информации применяются ячейки, выполненные на МОП транзисторах с плавающим и изолированным затвором, информация записывается электрически, когда по каналу исток/сток протекает ток, заряды оседают на затворе и хранятся как угодно долго. Стирание информации производится путем подачи напряжения другого знака на участок исток/сток в перепрограммируемых ПЗУ с электрическим стиранием или облучением ультрафиолетовым излучением в ПЗУ с ультрафиолетовым стиранием.

Голографическая память

В голографических запоминающих устройствах информация хранится в объеме голографического кристалла в виде снимка интерференции двух волн, опорной и информационной. Этот перспективный вид запоминающих устройств имеет большую плотность записи информации и в настоящее время находится в стадии разработки.

Биологическая память

В биологических запоминающих устройствах для записи информации используется изменение состояния органических молекул, обладающих свойством хранить заряд и обмениваться электронами.

Память на магнитных носителях

Во внешних запоминающих устройствах на магнитных носителях информация хранится в виде намагниченных в определенном направлении участков ферромагнитной поверхности диска или магнитной ленты.

Оптическая память

В оптических внешних запоминающих устройствах информация записывается в виде участков, имеющих разные коэффициенты рассеяния света направленного луча лазера.

Память является одним из основных компонентов любого компьютера. Ее емкость и быстродействие в значительной степени определяют производительность всей компьютерной системы. В данном вопросе были рассмотрены наиболее важные технологии создания и детали организации памяти.

Глава 11

Организация памяти вычислительных систем

В вычислительных системах, объединяющих множество параллельно работающихпроцессоров или машин, задача правильной организации памяти является одной из важнейших. Различие между быстродействием процессора и памяти всегда было камнем преткновения в однопроцессорных ВМ. Многопроцессорность ВС приводит еще к одной проблеме - проблеме одновременного доступа к памяти со стороны нескольких процессоров.

В зависимости от того, каким образом организована память многопроцессорных (многомашинных) систем, различают вычислительные системы с общей памятью (shared memory) и ВС с распределенной памятью (distributed memory). В системах с общей памятью (ее часто называют также совместно используемой или разделяемой памятью) намять ВС рассматривается как общин ресурс, и каждый из процессоров имеет полный доступ ко всему адресному пространству. Системы с обшей памятью называют сильно связанными (closely coupled systems). Подобное построение вычислительных систем имеет место как в классе SIMD, так и в классе MIMD. Иногда, чтобы подчеркнуть это обстоятельство, вводят специальные подклассы, используя для их обозначения аббревиатуры SM-SIMD (Shared Memory SIMD) и SM-MIMD (Shared Memory MIMD).

В варианте с распределенной памятью каждому из процессоров придается собственная память. Процессоры объединяются в сеть и могут при необходимости обмениваться данными, хранящимися в их памяти, передавая друг другу так называемые сообщения. Такой вид ВС называют слабо связанными (loosely coupled systems). Слабо связанные системы также встречаются как в классе SIMD, так и В классе MIMD, и иной раз, чтобы подчеркнуть данную особенность, вводят подклассы DM-SIMD (Distributed Memory SIMD) и DM-MIMD (Distributed Memory MIMD).

В некоторых случаях вычислительные системы с общей памятью называют мультипроцессорами, а системы с распределенной памятью - мцльтикомпьютерами.

Различие между общей и распределенной памятью - это разницу в структуре виртуальной памяти, то есть в том, как память выглядит со стороны процессора. Физически почти каждая система памяти разделена на автономные компоненты доступ к которым может производиться независимо. Общую память от распределенной отлипает то, каким образом подсистема памяти интерпретирует поступивший от процессора адрес ячейки. Для примера положим, что процессор выполняет команду load RO, i, означающую «Загрузить регистр R0 содержимым ячейки i». В случае общей памяти i - это глобальный адрес, и для любого процессора указывает на одну и ту же ячейку. В распределенной системе памяти i - это локальный адрес Если два процессора выполняют команду load RO, i, то каждый из них обращается к i-й ячейке в своем локальной памяти, то есть к разным ячейкам, и в регистры R0 могут быть загружены неодинаковые значения.

Различие между двумя системами памяти должно учитываться программистом, поскольку оно определяет способ взаимодействия частей распараллеленной программы. В варианте с общей памятью достаточно создать в памяти структуру данных и передавать в параллельно используемые подпрограммы ссылки на эту структуру. В системе с распределенной памятью необходимо в каждой локальной памяти иметь копию совместно используемых данных. Эти копии создаются путем вкладывания разделяемых данных в сообщения, посылаемые другим процессорам.

Память с чередованием адресов

Физически память вычислительной системы состоит из нескольких модулей (банков), при этом существенным вопросом является то, как в этом случае распределено адресное пространство (набор всех адресов, которые может сформировать процессор). Один из способов распределения виртуальных адресов по модулям памяти состоит в разбиении адресного пространства на последовательные блоки. Если память состоит из п банков, то ячейка с адресом i при поблочном разбиении будет находиться в банке с номером i / n . В системе памяти с чередованием адресов (interleaved memory) последовательные адреса располагаются в различных банках: ячейка с адресом i находится в банке с номером i mod п. Пусть, например, память состоит из четырех банков, по 256 байт в каждом. В схеме, ориентированной на блочную адресацию, первому банку будут выделены виртуальные адреса 0-255, второму - 256-511 и т. д. В схеме с чередованием адресов последовательные ячейки в первом банке будут иметь виртуальные адреса 0, 4, 8, .... во втором банке - 1, 5, 9 и т. д. (рис. 11.1, а).

Распределение адресного пространства по модулям дает возможность одновременной обработки запросов на доступ к памяти, если соответствующие адреса относятся к разным банкам, Процессор может в одном из циклов затребовать доступ к ячейке i а в следующем цикле - к ячейке j. Если i и j находятся в разных банках, информация будет передана в последовательных циклах. Здесь под циклом понимается цикл процессора, в то время как полный цикл памяти занимает несколько циклов процессора. Таким образом, в данном случае процессор не должен ждать, пока будет завершен полный цикл обращения к ячейке i . Рассмотренный прием позволяет повысить пропускную способность: если система памяти состоит из

Рис. 11.1- Память с чередованием адресов: а - распределение адресов; б- элементы, извлекаемые с шагом 9 из массива 8 х 8

достаточного числа банков, имеется возможность обмена информацией между процессором и памятью со скоростью одно слово за цикл процессора, независимо от длительности цикла памяти.

Решение о том, какой вариант распределения адресов выбрать (поблочный или с расслоением), зависит от ожидаемого порядка доступа к информации. Программы компилируются так, что последовательные команды располагаются в ячейках с последовательными адресами, поэтому высока вероятность, что после команды, извлеченной из ячейки с адресом i, будет выполняться команда из ячейки i + 1. Элементы векторов компилятор также помещает в последовательные ячейки, поэтому в операциях с векторами можно использовать преимущества метода чередования. По этой причине в векторных процессорах обычно применяется какой-либо вариант чередования адресов. В мультипроцессорах с совместно используемой памятью тем не менее используется поблочная адресация, поскольку схемы обращения к памяти в MIMD-системах могут сильно различаться. В таких системах целью является соединить процессор с блоком памяти и задействовать максимум находящейся в нем информации, прежде чем переключиться на другой блок памяти.

Системы памяти зачастую обеспечивают дополнительную гибкость при извлечении элементов векторов. В некоторых системах возможна одновременная загрузка каждого n-го элемента вектора, например, при извлечении элементов вектора V , хранящегося в последовательных ячейках памяти; при п = 4, память возвратит Интервал между элементами называют шагом по индексу или «страйдом» (stride). Одним из интересных применений этого свойства может служить Доступ к матрицам. Если шаг по индексу на единицу больше числа строк в матрице, одиночный запрос на доступ к памяти возвратит все диагональные элементы матрицы (рис. 11.1,б). Ответственность за то, чтобы все извлекаемые элементы матрицы располагались в разных банках, ложится на программиста.

Модели архитектуры памяти вычислительных систем

В рамках как совместно используемой, так и распределенной памяти реализуется несколько моделей архитектур системы памяти.

Рис. 11.2. Классификация моделей архитектур памяти вычислительных систем

На рис. 11.2 приведена классификация таких моделей, применяемых в вычислительных системах класса MIMD (верна и для класса S1MD).

Модели архитектур совместно используемой памяти

В системах с общей памятью все процессоры имеют равные возможности но доступу к единому адресному пространству. Единая память может быть построена как одноблочная или по модульному принципу, но обычно практикуется второй вариант.

Вычислительные системы с общей памятью, где доступ любого процессора к памяти производится единообразно и занимает одинаковое время, называют системами с однородным доступом к памяти и обозначают аббревиатурой UMA (Uniform Memory Access). Это наиболее распространенная архитектура памяти параллельных ВС с общей памятью .

Технически UМА-системы предполагаю наличие узла, соединяющего каждыйиз п процессоров с каждым из т модулей памяти. Простейший путь построения таких ВС - объединение нескольких процессоров (Р i) с единой памятью (M p) посредством общей шины - показан на рис. 11.3, а. В этом случае, однако, в каждый момент времени обмен по шине может вести только один из процессоров, то есть процессоры должны соперничать за доступ к шипе. Когда процессор Р i выбирает из памяти команду, остальные процессоры должны ожидать, пока шина освободится. Если в систему входят только два процессора, они в состоянии работать с производительностью, близкой к максимальной, поскольку их доступ к шинеможно чередовать: пока один процессор декодирует и выполняет команду, другой вправе использовать шину для выборки из памяти следующей команды. Однако когда добавляется третий процессор, производительность начинает падать. При наличии на шине десяти процессоров кривая быстродействия шины (рис. Н.З, а) становится горизонтальной, так что добавление 11-го процессора уже не дает повышения производительности. Нижняя кривая на этом рисунке иллюстрирует тот факт, что память и шина обладают фиксированной пропускной способностью, определяемой комбинацией длительности цикла памяти и протоколом шины, и в многопроцессорной системе с общей шиной эта пропускная способность распределена между несколькими процессорами. Если длительность цикла процессора больше по сравнению с циклом памяти, к шине можно подключать много процессоров. Однако фактически процессор обычно намного быстрее памяти, поэтому данная схема широкого применения не находит.

Рис. 11.3. Общая память: а - объединение процессоров с помощью шины; б - система с локальными кэшами; в - производительность системы как функция от числа процессоров на шине; г - многопроцессорная ВС с общей памятью, состоящей из отдельных модулей

Альтернативный способ построения многопроцессорной ВС с общей памятью на основе НМЛ показан на рис. 11.3, г. Здесь шипа заменена коммутатором, маршрутизирующим запросы процессора к одному из нескольких модулей памяти. Несмотря на то что имеется несколько модулей памяти, все они входят в единое виртуальное адресное пространство. Преимущество такого подхода в том, что коммутатор и состоянии параллельно обслуживать несколько запросов. Каждый процессор может быть соединен со своим модулем памяти и иметь доступ к нему на максимально допустимой скорости. Соперничество между процессорами может возникнуть при попытке одновременного доступа к одному и тому же модулю памяти. В этом случае доступ получает только один процессор, а прочие - блокируются.

К сожалению, архитектура UMA не очень хорошо масштабируется. Наиболее распространенные системы содержат 4-8 процессоров, значительно реже 32-64 процессора. Кроме того, подобные системы нельзя отнести к отказоустойчивым, так как отказ одного процессора или модуля памяти влечет отказ всей ВС.

Другим подходом к построению ВС с общей памятью является неоднородный доступ к памяти, обозначаемый как NUM A (Non-Uniform Memory Access), Здесь по-прежнему фигурирует единое адресное пространство, но каждый процессор имеет локальную память. Доступ процессора к собственной локальной памяти производится напрямую, что намного быстрее, чем доступ к удаленной памяти через коммутатор или сеть. Такая система может быть дополнена глобальной памятью тогда локальные запоминающие устройства играют роль быстрой кэш-памяти для глобальной памяти. Подобная схема может улучшить производительность ВС, по не в состоянии неограниченно отсрочить выравнивание прямой производительности. При наличии у каждого процессора локальной кэш-памяти (рис. 11.3,6) существует высокая вероятность (р > 0,9) того, что нужные команда или данные уже находятся в локальной памяти. Разумная вероятность попадания в локальную память существенно уменьшает число обращений процессора к глобальной памяти и, таким образом, ведет к повышению эффективности. Место излома кривой производительности (верхняя кривая на рис. 11.3, в), соответствующее точке, в которой добавление процессоров еще остается эффективным, теперь перемещается в область 20 процессоров, а тонка, где кривая становится горизонтальной, - в область 30 процессоров.

В рамках концепции NUMA реализуется несколько различных подходов, обозначаемых аббревиатурами СОМА, CC - NUMA и NCC - NUMA .

В архитектуре только с кэш-памятью (СОМА, Cache Only Memory Architecture) локальная память каждого процессора построена как большая кэш-память для быстрого доступа со стороны «своего» процессора . Кэши всех процессоров в совокупности рассматриваются как глобальная память системы. Собственно глобальная память отсутствует. Принципиальная особенность концепции СОМА выражается в динамике. Здесь данные не привязаны статически к определенному модулю памяти и не имеют уникального адреса, остающегося неизменным в течение всего времени существования переменной. В архитектуре СОМА данные переносятся в кэш-память того процессора, который последним их запросил, при этом переменная не фиксирована уникальным адресом и в каждый момент времени может размещаться в любой физической ячейке. Перенос данных из одного локального кэша в другой не требует участия в этом процессе операционной системы, но подразумевает сложную и дорогостоящую аппаратуру управления памятью. Для организации такого режима используют так называемые каталоги кэшей. Отметим также, что последняя копия элемента данных никогда из кэш-памяти не удаляется.

Поскольку в архитектуре СОМА данные перемещаются в локальную кэш-память процессора-владельца, такие ВС в плане производительности обладают существенным преимуществом над другими архитектурами NUM А. С другой стороны, если единственная переменная или две различные переменные, хранящее в одной строке одного и того же кэша, требуются двум процессорам, эта строка кэша должна перемещаться между процессорами туда и обратно при каждом доступе к данным. Такие эффекты могут зависеть от деталей распределения памяти приводить к непредсказуемым ситуациям.

Модель кэш-когерентного доступа к неоднородной памяти (CC-NUMA, Сасhe Coherent Non-Uniform Memory Architecture) принципиально отличается от модели СОМА. В системе CC-NUMA используется не кэш-память, а обычная физически распределенная память. Не происходит никакого копирования страниц или данных между ячейками памяти. Нет никакой программно реализованной передачи сообщений. Существует просто одна карта памяти, с частями, физически связанными медным кабелем, и «умные» аппаратные средства. Аппаратно реализованная кэш-когерентность означает, что не требуется какого-либо программного обеспечения для сохранения множества копий обновленных данных или их передачи. Со всем этим справляется аппаратный уровень. Доступ к локальным модулям памяти в разных узлах системы может производиться одновременно и происходит быстрее, чем к удаленным модулям памяти.

Отличие модели с кэш-некогерентным доступом к неоднородной памяти (NCC-NUMA, Non-Cache Coherent Non-Uniform Memory Architecture) от CC-NUMA очевидно из названия. Архитектура памяти предполагает единое адресное пространство, но не обеспечивает согласованности глобальных данных на аппаратном уровне. Управление использованием таких данных полностью возлагается на программное обеспечение (приложения или компиляторы). Несмотря на это обстоятельство, представляющееся недостатком архитектуры, она оказывается весьма полезной при повышении производительности вычислительных систем с архитектурой памяти типа DSM, рассматриваемой в разделе «Модели архитектур распределенной памяти».

В целом, ВС с общей памятью, построенные по схеме NUMA, называют архитектурами с виртуальной общей памятью (virtual shared memory architectures). Данный вид архитектуры, в частности CC-NUMA, в последнее время рассматривается как самостоятельный и довольно перспективный вид вычислительных систем класса MIMD, поэтому такие ВС ниже будут обсуждены более подробно.

Модели архитектур распределенной памяти

В системе с распределенной памятью каждый процессор обладает собственной памятью и способен адресоваться только к ней. Некоторые авторы называют этот тип систем многомашинными ВС или мультикомпъютерами, подчеркивая тот факт, что блоки, из которых строится система, сами по себе являются небольшими вычислительными системами с процессором и памятью. Модели архитектур с распределенной памятью принято обозначать как архитектуры без прямого доступа к удаленной памяти (NORMA, No Remote Memory Access). Такое название следует из того факта, что каждый процессор имеет доступ только к своей локальной памяти. Доступ к удаленной памяти (локальной памяти другого процессора) возможен только путем обмена сообщениями с процессором, которому принадлежит адресуемая память.

Подобная организация характеризуется рядом достоинств. Во-первых, при доступе к данным не возникает конкуренции за шину или коммутаторы - каждый процессор может полностью использовать полосу пропускания тракта связи с собственной локальной памятью. Во-вторых, отсутствие общей шины означает, что нет и связанных с этим ограничений на число процессоров: размер системы ограничивает только сеть, объединяющая процессоры. В-третьих, снимается проблема когерентности кэш-памяти. Каждый процессор вправе самостоятельно менять свои Данные, не заботясь о согласовании копий данных в собственной локальной кэш-памяти с кэшами других процессоров.

Основной недостаток ВС с распределенной памятью заключается в сложности обмена информацией между процессорами. Если какой-то из процессоров нуждается в данных из памяти другого процессора, он должен обменяться с этим процессором сообщениями. Это приводит к двум видам издержек:

    требуется время для того, чтобы сформировать и переслать сообщение от одно! процессора к другому;

    для обеспечения реакции на сообщения от других процессоров принимающий процессор должен получить запрос прерывания и выполнить процедуру обработки этого прерывания.

Структура системы с распределенной памятью приведена на рис. 11.4. В левой! части (рис. 11.4, а) показан один процессорный элемент (ПЭ). Он включает в себя) собственно процессор (Р), локальную память (М) и два контроллера ввода/вывод (К о и КД В правой части (рис. 11.4, б) показана четырехпроцессорная система, иллюстрирующая, каким образом сообщения пересылаются от одного процессор к другому. По отношению к каждому ПЭ все остальные процессорные элементы можно рассматривать просто как устройства ввода/вывода. Для посылки сообщения в другой ПЭ процессор формирует блок данных в своей локальной памяти и извещает свой локальный контроллер о необходимости передачи информации на внешнее устройство. По сети межсоединений это сообщение пересылается на приемный контроллер ввода/вывода принимающего ПЭ. Последний находит место для сообщения в собственной локальной памяти и уведомляет процессор-источник о получении сообщения.

Рис. 11.4. Вычислительная система с распределенной памятью: а - процессорный элемент; б - объединение процессорных элементов о

Интересный вариант системы с распределенной памятью представляет собой; модель распределенной совместно используемой памяти (DSM, Distribute Shared Memory), известной также и под другим названием архитектуры с неоднородным доступом к памяти и программным обеспечением когерентности (SC-NUMA, Software-Coherent Non-Uniform Memory Architecture). Идея этой модели состоит в том, что ВС, физически будучи системой с распределенной памятью, благодаря операционной системе представляется пользователю как система с общей памятью. Это означает, что операционная система предлагает пользователю единое адресное пространство, несмотря на то что фактическое обращение к памяти «чужого» компьютера ВС по-прежнему обеспечивается путем обмена сообщениями.

Мультипроцессорная когерентность кэш-памяти

Мультипроцессорная система с разделяемой памятью состоит из двух или более независимых процессоров, каждый из которых выполняет либо часть большой программы, либо независимую программу. Все процессоры обращаются к командам и данным, хранящимся в общей основной памяти. Поскольку память является обобществленным ресурсом, при обращении к ней между процессорами возникает соперничество, в результате чего средняя задержка на доступ к памяти увеличивается. Для сокращения такой задержки каждому процессору придается локальная кэш-память, которая, обслуживая локальные обращения к памяти, во многих случаях предотвращает необходимость доступа к совместно используемой основной памяти. В свою очередь, оснащение каждого процессора локальной кэш-памятью приводит к так называемой проблеме когерентности или обеспечения согласо ванности кэш-памяти. Согласно , система является когерентной, если каждая операция чтения по какому-либо адресу, выполненная любым из процессоров, возвращает значение, занесенное в ходе последней операции записи по этому адресу, вне зависимости от того, какой из процессоров производил запись последним.

В простейшей форме проблему когерентности кэш-памяти можно пояснить следующим образом (рис 11.5). Пусть два процессора Р г и Р г связаны с общей памятью посредством шины. Сначала оба процессора читают переменную х. Копии блоков, содержащих эту переменную, пересылаются из основной памяти в локальные кэши обоих процессоров (рис. 11.5, а). Далее процессор P t выполняет операцию увеличения значения переменной х на единицу. Так как копия переменной уже находится в кэш-памяти данного процессора, произойдет кэш-попадание и значение сбудет изменено только в кэш-памяти 1. Если теперь процессор Р 2 вновь выполнит операцию чтения х, то также произойдет кэш-попадание и Р 2 получит хранящееся в его кэш-памяти «старое» значение х (рис. 11.5, б).

Поддержание согласованности требует, чтобы при изменении элемента данных одним из процессоров соответствующие изменения были проведены в кэш-памяти остальных процессоров, где есть копия измененного элемента данных, а также в общей памяти. Схожая проблема возникает, кстати, и в однопроцессорных системах, где присутствует несколько уровней кэш-памяти. Здесь требуется согласовать содержимое кэшей разных уровней.

В решении проблемы когерентности выделяются два подхода: программный и аппаратный. В некоторых системах применяют стратегии, совмещающие оба подхода.

Программные способы решения проблемы когерентности

Программные приемы решения проблемы когерентности позволяют обойтись без дополнительного оборудования или свести его к минимуму }