- •10.1. Виды параллельной обработки
- •10.1.1. Классификация систем параллельной обработки
- •10.2. Матричная обработка данных
- •Массив процессорных элементов
- •10.3. Архитектура мультипроцессорных систем общего назначения
- •10.4. Коммуникационные сети
- •10.5. Организация памяти в мультипроцессорных системах
- •10.6. Программный параллелизм и общие переменные
- •10.6.1. Доступ к общим переменным
- •10.6.2. Согласованность кэша
- •10.6.3. Блокировка и согласованность кэш-памяти
- •10.7. Мультикомпьютерные системы
- •10.8. Общая память и передача сообщений
- •10.8.1. Система с общей памятью
- •10.8.2. Система с передачей сообщений
- •10.9. Производительность мультипроцессорных систем
- •10.9.1. Закон Амдала
- •10.9.2. Показатели производительности
10.5. Организация памяти в мультипроцессорных системах
В разделе 6 было показано, какое большое влияние на производительность оказывает организация памяти в однопроцессорной системе. Сказанное верно и для мультипроцессорных систем. Для того чтобы использовать свойство локализации ссылок, в каждый процессор обычно включают первичный и вторичный кэши. Если система построена так, как на рис. 10.2, каждый процессорный модуль может быть соединен с коммуникационной сетью способом, показанным на рис. 10.11. На этом рисунке изображен только вторичный кэш, поскольку мы считаем, что первичный кэш интегрирован в микросхему процессора. При обращении к модулям памяти используется глобальное адресное пространство, в котором каждому модулю назначен свой диапазон физических адресов. В такой системе с общей памятью процессоры имеют равный доступ ко всем модулям памяти. С точки зрения программного обеспечения это простейший способ использования адресного пространства.
Рис. 10.11. Процессорный узел в мультипроцессорной системе, показанной на рис. 10.2
В мультипроцессорных системах типа NUMA (рис. 10.3) каждый узел содержит процессор и модуль памяти. Наиболее естественный способ реализации такого узла показан на рис. 10.12. Для подобных систем удобно использовать глобальное адресное пространство. И снова каждый процессор может обратиться к любому модулю памяти, хотя на доступ к локальным модулям памяти глобального адресного пространства уходит меньше времени, чем на доступ к удаленным модулям.
В системе с распределенной памятью (рис. 10.4) процессоры могут обращаться напрямую только к своей локальной памяти. Поэтому каждый модуль памяти составляет локальное адресное пространство одного процессора; глобального адресного пространства нет вообще. Любое взаимодействие между программами или процессами, выполняющимися на разных процессорах, осуществляется при помощи сообщений, передаваемых между процессорами. При таком виде взаимодействия каждый процессор рассматривает коммуникационную сеть как устройство ввода-вывода. В таком случае каждый узел системы можно рассматривать как отдельный компьютер. Поэтому системы подобного типа также называются мультикомпьютерными. Данная архитектура представляет собой простейший способ соединения множества компьютеров в большую систему. Взаимодействие между задачами, выполняющимися на разных компьютерах, осуществляется довольно медленно, поскольку для обмена сообщениями требуется программное обеспечение. Этот тип систем рассматривается в разделе 10.7.
Рис. 10.12. Структура узла мультипроцессора, изображенного на рис. 10.3
Когда одни и те же данные используются множеством процессоров, необходимо гарантировать, что все процессоры будут работать с одними и теми же значениями элементов данных. В связи с этим наличие множества кэшей в системе с общей памятью составляет серьезную проблему. В разных кэшах могут находиться разные копии одних и тех же данных. Когда процессор изменяет элемент данных в собственной кэш-памяти, это изменение должно быть внесено во все остальные кэши, в которых имеются копии этих данных. Или же все остальные копии должны быть помечены как недостоверные. Иными словами, необходимо, чтобы общие данные были согласованы (когерентны) во всех кэшах системы. Самое распространенное решение этой проблемы мы рассмотрим в разделе 10.6.2.