
- •1. Основные понятия высокопроизводительных вычислений
- •1.1 Характеристики и требования высокоскоростной обработки
- •1.2 Способы повышения скорости обработки
- •2. Взаимосвязь структур алгоритмов и исполнителей
- •3 Структурная организация высокопроизводительных вычислительных систем
- •3.1 Классификация вс по Флину
- •3.2 Параллелизм на уровне команд
- •3.3 Параллелизм на уровне процессоров
- •4 Параллельные алгоритмы в задачах сортировки
- •4.1 Проблемы сортировки на вычислительных машинах параллельного действия
- •5 Методы построения распределенных алгоритмов на основе понижения порядка производной
- •5.1 Переход от произвольной математической зависимости к системам дифференциальных уравнений
- •5.2 Методы численного интегрирования по Стилтьесу
- •5.3 Разностно-квантованные схемы интегрирования уравнений Шеннона в относительной форме записи
- •5.4 Примеры реализации формальных методов перехода от произвольной математической зависимости к системам дифференциальных уравнений
- •5.5 Разностно-квантованные схемы интегрирования. Расчет основных параметров цис
- •5.6 Задания для самостоятельного выполнения
- •5.6.1 Задание № 1
- •5.6.2 Задание № 2
- •Контрольные вопросы
- •5.6.3 Задание№ 3
- •5.6.4 Задание № 4
- •5.7 Примеры выполнения заданий
- •5.7.1 Моделирования функции , с использованием методов цис
3.3 Параллелизм на уровне процессоров
Решения, рассмотренные в предыдущем разделе, ориентированы на оптимизацию работы отдельно взятого процессора с целью повышения его производительности. Структурная оптимизация процессора в рамках конвейерной, суперскалярной или векторной обработки позволяет увеличивать производительность системы в разы (до 10 раз). Однако скорость роста сложности решаемых задач, а, следовательно, и скорость роста потребности в более мощных вычислительных системах существенно выше этого показателя. Соответственно перед разработчиками современных ВС возникает задача поиска и использования принципиально новых подходов для построения высокопроизводительных вычислителей. Одно из решений в этом направлении – использование при решении вычислительно сложных задач нескольких взаимодействующих процессорных элементов вместо одного процессора. Такой подход принято называть параллелизмом на уровне процессоров. В соответствии с классификацией Флинна такие ВС принадлежат либо к SIMD-, либо MIMD-системам.
Для повышения производительности ВС в сотни, тысячи и большее число раз необходимо использовать соответствующее число процессоров или процессорных ядер и обеспечить механизм их совместной работы при решении общей задачи. При построении таких ВС определяют тип и количество используемых процессоров, а также правила взаимодействия между ними и элементами памяти. На практике в многопроцессорных системах используют разные способы организации памяти и принципы обращения к ней со стороны любого процессорного элемента.
Организацию взаимодействия между компонентами многопроцессорной ВС и управление процессами реализуют с помощью совокупности аппаратно-программных средств, которые называют сетями межсоединений.
3.3.1 Сети межсоединений. Классификацию сетей межсоединений компонентов многопроцессорных ВС принято проводит по следующим признакам: режим работы (синхронный или асинхронный), стратегия управления (централизованная или децентрализованная), технология коммутации (канальная или пакетная), характер топологии (статическая или динамическая).
В соответствии с режимом работы различают синхронные и асинхронные сети межсоединений (СМС). В синхронном режиме используют единый глобальный тактовый сигнал для всех компонентов системы. Асинхронный режим в свою очередь не требует наличия глобальной синхронизации. Квитирующие сигналы запросов и подтверждений используют для координации действий всех элементов асинхронной системы. В общем случае синхронные системы в настоящее время функционируют медленнее по сравнению с асинхронными, однако в них невозможно возникновение гонок и критических рисков, что обеспечивает надежность их функционирования.
В зависимости от используемой стратегии управления различают централизованные и децентрализованные СМС. В системах с централизованным управлением единственный центральный узел управления применяют для управления работой всех компонентов ВС. Работоспособность и надежность функционирования единого узла управления – слабое место централизованной СМС. При децентрализованном управлении функция управления распределена среди различных компонентов системы, что повышает ее надежность.
В зависимости от используемой технологии коммутации различают СМС с коммутацией пакетов и коммутацией каналов. В сети с коммутацией каналов весь путь пересылки информации между отправителем и получателем определяют до начала этого процесса. Выбранный путь будет сохранен на период всего сеанса передачи. При этом только два узла (отправитель и получатель) могут использовать данный канал для обмена информацией. В сети с коммутацией пакетов информацию передают от отправителя к получателю в виде коротких сообщений – пакетов, в которых присутствует адрес получателя и порция информации. Каждый пакет проходит через коммутаторы (от одного к другому) пока не постигнет узла получателя.
Способ расположения и соединения процессорных элементов и модулей памяти в многопроцессорных ВС определяют с помощью топологии. Например, в полносвязной топологии все процессоры и элементы памяти соединены по принципу каждый с каждым. В топологии кольцо каждый процессор соединен лишь с двумя соседними процессорными элементами.
В общем случае различают статические и динамические СМС [8]. В статических сетях непосредственные фиксированные связи устанавливают для соединения компонентов системы. На рисунке 3.11 представлены наиболее популярные типы статической топологии: дерево, линейный массив, кольцо, дерево, решетка и гиперкуб.
|
|
|
а) |
б) |
в) |
|
|
|
г) |
д) |
е) |
Рисунок 3.11. Статическая топология: звезда (а), линейный массив (б), кольцо (в), дерево (г), решетка (д), гиперкуб (е) |
В динамических сетях соединение устанавливается по мере необходимости. На рисунке 3.12 представлены примеры динамической топологии, использующие коммутаторы. В одноступенчатой топологии (рисунок 3.12, а) каждый вход, расположенный слева от коммутатора, соединен с некоторыми, но не всеми выходами, расположенными справа. Коммутатор обеспечивает передачу сообщения с входа к определенному выходу. В каскадной схеме, реализующей многоступенчатую коммутацию, обеспечена связь любого входа с любым выходом (рисунок 3.12, б). При этом на каждой ступени коммутации возникает дополнительная задержка распространения сигнала.
|
| |
а) |
б) | |
|
| |
в) |
г) | |
Рисунок 3.12. Динамическая топология: одноступенчатая (а), многоступенчатая (б), матричный коммутатор (в), шина (г) |
Связь любого входа с любым выходом можно организовать с использованием матричного коммутатора, который обеспечивает формирование пути от любого входного порта до любого выходного порта, заданных своими номерами (рисунок 3.12, в). Для реализации матричного коммутатора необходимо N2 компонентов, где N – число коммутируемых пар вход/выход, в то время как для построения многоступенчатого коммутатора потребуется N/2log(N) компонентов. Несмотря на существенно большие затраты аппаратных ресурсов матричный коммутатор обладает высокой скоростью работы. За один такт он обеспечивает установление соединение между входным и выходным портами.
Взаимодействие между элементами многопроцессорных ВС можно организовать с использованием шиной топологии (рисунок 3.12, г). Разрешение или запрещение доступа к шине реализует механизм арбитража. В общем случае в системе могут присутствовать одиночные или множественные шины обмена.
И статическая, и динамическая топологии имеют ограниченное число путей между любой парой источник / приемник информации. Данное обстоятельство приводит к ограничениям отказоустойчивости и перегрузки сети межсоединений. Например, если единственный путь между парой узлов вышел из строя, то между этими узлами невозможно установить связь. Или, если две пары узлов пытаются использовать один и тот же путь, то одна из этих пар должна будет ожидать завершения сеанса связи другой пары. Такую ситуацию называют блокировкой.
При выборе топологии СМС важно организовать надежную передачу информации между участниками вычислительного процесса, минимизируя вероятность возникновения блокировок, используя для этого соответствующее коммутационное оборудование. Аппаратная избыточность коммутаторов позволяет снизить вероятность блокирования, однако при этом повышается задержка распространения сигнала. Другой способ решения проблемы блокировок – использование интеллектуальной маршрутизации, когда выбор маршрута происходит, исходя из текущего состояния сети с учетом нагрузки на каналы связи. Выбранная топология и способ ее реализации существенно влияет на скорость и качество взаимодействия внутренних элементов ВС, а следовательно, и на производительность такой системы.
3.3.2 Системы с общей памятью. Системы с общей памятью образуют одну из основных категорий многопроцессорных вычислительных систем. В таких системах все процессоры совместно используют общую (глобальную) память. Связь между задачами, выполняемыми различными процессорами, происходит за счет обмена через память на уровне операций записи и чтения. Координацию и синхронизацию межпроцессорного взаимодействия также выполняют через глобальную память. Структура вычислительных систем с общей памятью включает следующие элементы: множество независимых процессоров (Pi), множество модулей памяти (Mj) и сеть межсоединений (рисунок 3.13).
|
Рисунок 3.13. Структура многопроцессорной ВС с общей памятью |
При проектировании систем ВС с общей памятью приходится сталкиваться с двумя основными проблемами: снижением производительности за счет возникновения конфликтов и проблемой связности. Возникновение конфликтов происходит при попытке нескольких процессоров одновременно получить доступ к общей памяти. Типовым решением, позволяющим исключить конкуренцию за ресурс, является использование процессорами кэш-памяти. Однако в данном случае появляется дублирование данных за счет множества копий в кэш-памяти, что может привести к проблеме связности. Копии данных в кэш-памяти разных процессоров считают связными, если их содержимое полностью совпадает. Если хотя бы один из процессоров изменил содержимое копии в своей кэш-памяти, то данные в ней становятся противоречивыми и несовместимыми с копиями в кэш-памяти других процессоров.
Для обеспечения надежной работы ВС с общей памятью реализуют специальные механизмы, обеспечивающие устранение обозначенных проблем.
Рассмотрим простейший случай организации ВС с общей памятью (рисунок 3.14). Данная система состоит из двух процессоров и одного общего модуля памяти.
З
Рисунок
3.14. Общая память с двумя
портами
доступа
Если арбитр получает два запроса, то он выбирает только один из них и посылает его контроллеру памяти. Процессору, запрос которого был отклонен, приходит сигнал ожидания.
В зависимости от особенностей используемой сети межсоединений и механизма доступа к памяти различают следующие категории ВС с общей памятью: системы с однородным доступом к памяти, системы с неоднородным доступом к памяти, системы с доступом только к кэш-памяти. Особенности организации таких систем описаны ниже.
В ВС с однородным доступом к памяти (UMA – Uniform Memory Access) каждый процессор может обращаться к любой области памяти. Отличительная черта UMA-систем – одинаковое время обращения к памяти у каждого процессора. Сеть межсоединений в UMA системах может быть построена с использованием одной и нескольких шин, а также на матричном коммутаторе. Поскольку доступ к памяти в такой системе сбалансирован среди процессоров, то ее так же принято называть симметричным мультипроцессором (SMP – symmetric multiprocessor). Типовая структура SMP-системы, построенной по шинной архитектуре, представлена на рисунке 3.15.
|
Рисунок 3.15. ВС c однородным доступом к памяти |
Узким местом SMP-систем является увеличение числа конфликтов при попытке доступа к шине или памяти с ростом количества используемых процессорных элементов. В этой связи при проектировании SMP-систем вводят ограничение на число применяемых процессорных элементов. На практике наиболее распространены системы с однородным доступом, использующие от 16 до 64 процессоров.
Снижение конкуренции процессоров за доступ к шине обеспечивают с помощью локальной кэш-памяти, откуда каждый процессор извлекает команды и данные. Конкуренцию и нагрузку на шину можно дополнительно сократить, если для каждого процессора выделить кэш-данных и кэш-команд, и необходимые команды и данные загружать в них из глобальной памяти. Однако в этом случае высокая нагрузка ложится на системную магистраль, которая передает сигналы управления механизмом обеспечения информационной целостности данных в многочисленных элемента кэш-памяти.
В ВС с неоднородным доступом к памяти (NUMA – NonUniform Memory Access) к каждому процессору подключена некоторая часть общей памяти, которая обладает единым адресным пространством. В этом случае каждый процессор может обращаться к любой ячейке памяти для чтения или записи, используя ее реальный адрес (рисунке 3.16). Однако время доступа к различным модулям памяти может изменяться и зависит от их расстояния до процессора. Отличительная черта NUMA-систем – переменное время обращения к памяти у каждого процессора. А основная цель – обеспечение возможности работы с общей памятью большого объема множеству процессорных узлов.
При построении сети межсоединений, обеспечивающих взаимодействие процессоров и модулей памяти в NUMA-системе, наибольшее распространение получили два вида топологии – дерево и множественные иерархические шины.
В системе с доступом только к кэш-памяти (COMA – Cache-Only Memory Access) также как и в NUMA-системе к каждому процессору подключена некоторая часть общей памяти, которая представлена исключительно кэш-памятью. Общая структура такой системы представлена на рисунке 3.17.
Концепция COMA-систем предполагает, что данные поступают в процессор по его запросу. Причем отсутствует иерархия памяти и адресное пространство образовано всеми модулями кэш-памяти. При этом существует специальная таблица – каталог кэш-памяти, которая помогает организовать удаленный доступ к кэш-памяти.
|
Рисунок 3.16. ВС c неоднородным доступом к памяти |
Основная проблема в данной архитектуре – сложность механизма обеспечения целостности данных при операциях отображения блоков оперативной памяти в строки кэш-памяти и определении местоположения соответствующих строк в множестве кэш разных процессоров.
|
Рисунок 3.17. ВС c доступом только к кэш-памяти |
Для обеспечения информационной целостности при работе с кэш-памятью в параллельных многопроцессорных системах предложено несколько подходов.
В системах единственной кэш-памятью связность (когерентность) между памятью и кэш обеспечивают с использованием двух стратегий: сквозным кэшированием (write-through) и кэшированием с обратной записью (write-back). Когда процессор изменяет значение данных, расположенных в кэш-памяти, то для сохранения целостности данных необходимо произвести изменение в копии, которая расположена в основной памяти. При сквозном кэшировании копию в памяти модифицируют каждый раз при изменении соответствующих данных в кэш-памяти. При кэшировании с обратной записью копию в памяти обновляют только при замене соответствующей строки кэш-памяти.
В многопроцессорных системах, когда задачу решают на нескольких процессорах и каждый из них оперирует одинаковыми данными из основной памяти, происходит формирование локальных копий необходимых данных с размещением их в соответствующих модулях кэш-памяти. Однако возникает вопрос, как поступать, когда один из процессоров обновляет данные в своей локальной копии. В этом случае принято использовать следующие стратегии для обеспечения целостности данных: стратегию с признанием данных недействительными (write-invalidate) и стратегию обновления (write-update).
В первом случае процессор, который первым приступает к изменению своей копии в кэш-памяти, инициирует бит недействительности для соответствующих данных в копиях других процессоров и продолжает обработку. Если другой процессор обратится к своей копии данных с выставленным битом недействительности, то он не сможет прочитать необходимую информацию и будет ожидать момента, когда первый процессор завершит обработку, обновит данные и снимет бит недействительности с этих данных.
В стратегии с обновлением информационную целостность обеспечивают путем одновременного обновления значений всех копий во всех элементах кэш-памяти. Все биты недействительности устанавливают на время такой записи в активное состояние. После обновления содержимого всех копий все биты недействительности обнуляют.
В общем случае на уровне системы памяти в целом можно выделить четыре комбинации стратегий обеспечения информационной целостности среди всех модулей кэш-памяти и общей памяти:
обновление со сквозным кэшированием;
обновление с обратным кэшированием;
признание данных недействительными со сквозным кэшированием;
признание данных недействительными с обратным кэшированием.
Реализация каждой из стратегий основана на анализе запросов, передаваемых по шине от разных процессоров и элементов системы памяти, чтобы предотвратить появление различия одних и тех же данных в разных модулях кэш-памяти и оперативной памяти. В силу особенности реализации такую локальную кэш-память называют кэш-памятью с отслеживанием (snooping caches).
При обновлении со сквозным кэшированием изменения в одной из кэш-памяти записывают в основную память и в это же время их пересылают в другие модули кэш-памяти, которые используют ту же копию.
Протокол обновления с обратным кэшированием предусматривает пересылку измененной копии в остальные блоки кэш-памяти, которые используют ту же копию, а обновление основной памяти происходит только при замене строки кэш-памяти, содержащей измененные данные.
Протокол с признанием данных недействительными и со сквозным кэшированием реализует возможность нескольким процессорам читать одинаковый блок основной памяти для создания локальных копий и использовать их до тех пор, пока один из процессоров не изменит содержимое своей копии. В этот момент все копии в остальных модулях кэш-памяти отмечают битом недействительности, а в память помещают новые данные.
Протокол с признанием данных недействительными и с обратным кэшированием похож на предыдущий, но обновление содержимого памяти происходит лишь при замене строки кэш-памяти, содержащей измененные данные.
Как видно из приведенного описания процесс обеспечения целостности данных в системах с общей памятью обладает высокой сложностью. Причем чем больше процессорных элементов включено в состав вычислительной системы с общей памятью, тем сложнее логика управления кэш-памятью с помощью протоколов отслеживания и выше нагрузка на системную шину, по которой происходит передача запросов и блоков информации при обновлении локальных копий.
Другой подход обеспечения информационной целостности на уровне кэш-памяти – протоколы, использующие структуру каталога. Каталог – структура данных, которая содержит информацию о процессорах, которые используют общую копию блока памяти, и об их состоянии в процессе вычислений. Информация, представленная в каталоге, может иметь централизованный или децентрализованный характер. В централизованном каталоге представлена информация обо всех блоках в единой общей структуре данных. Поскольку такой каталог расположен в одном узле вычислительной системы, то это может вызвать проблему, связанную с высокой загрузкой узла и существенным увеличением времени поиска. Избежать такой проблемы, особенно в ВС с большим числом процессоров, можно применяя распределенную систему общего каталога. Здесь каждый модуль памяти может использовать свой отдельный каталог. В распределенном каталоге запись для каждого блока данных должна содержать набор указателей, чтобы определить месторасположение копий данного блока, а также бит, который показывает, может ли текущий модуль кэш-памяти произвести запись этого блока.
Выделяют три основные категории протоколов, использующих каталог кэш-памяти: каталоги с полным отображением (full-map directories), с ограниченными каталогами (limited directories) и сцепленные каталоги (chained directories).
В каталоге с полным отображением каждая запись содержит N указателей, где N количество процессоров в ВС. Следовательно, существует N копий отдельного блока памяти в кэш-памяти, используемых всеми процессорами. В каталоге для каждого блока памяти выделяют N-разрядный вектор, каждый бит которого ассоциирован с определенным процессором ВС. Если процессор Pi использует блок памяти, то в векторе для этого блока в позиции i будет установлена 1, в противном случае – 0 (рисунок 3.18).
Особенность каталога с полным отображением – высокая размерность за счет хранения информации обо всех блоках и всех процессорах.
|
Рисунок 3.18. Каталог с полным отображением |
В каталоге с ограничением присутствует фиксированное число указателей на модули кэш-памяти, использующие одинаковые копии блоков данных памяти, независимо от числа работающих процессоров. Такая организация ограничивает количество копий, которые можно использовать одновременно разным процессорам, решая при этом проблему высокой размерности каталога и одновременной нагрузки на данный узел ВС.
На рисунке 3.19 представлен пример каталога с ограничением, где каждый блок данных памяти может иметь не более двух копий в кэш-памяти.
В подходе, использующем сцепленный каталог, решена задача высокой размерности каталогов с полным отображением за счет распределенного хранения информации. Запись каталога,
|
Рисунок 3.19. Каталог с ограничением |
содержащего информацию для определенного блока данных памяти, представлена связным списком, каждый элемент которого содержит указатель на следующий модуль кэш-памяти, использующий одинаковую копию данных (рисунке 3.20).
|
Рисунок 3.20. Сцепленный каталог |
3.3.3 Системы с распределенной памятью. В системах с распределенной памятью каждый вычислительный узел содержит процессорный элемент и локальную память. Таким образом, можно определить, что вычислительный узел системы – самостоятельный компьютер, который может работать независимо от остальных компьютеров при решении своей задачи или во взаимодействии с ними при решении общей задачи. В этой связи ВС с распределенной памятью принято называть мультикомпьютером [9].
Взаимодействие вычислительных узлов мультикомпьютера осуществляют с помощью сети межсоединений. В данной архитектуре не существует общей глобальной памяти, поэтому для информационного взаимодействия процессорам приходится перемещать данные из одного локального модуля памяти в другой, используя для этого механизм передачи сообщений. Данный механизм реализуют с помощью пары команд отправить / получить, которые должны быть включены программистом в прикладное программное обеспечение. В общем случае в качестве сообщений могут выступать команды, данные, сигналы прерываний и синхронизации.
На рисунке 3.21 представлены основные компоненты многопроцессорной вычислительной системы с распределенной памятью.
|
Рисунок 3.21. Система с распределенной памятью |
Здесь можно выделить n узлов, представленных парой процессор-память (Pi-Mi). Причем количество таких узлов может быть существенно большим по сравнению с ВС с общей памятью. Каждый процессор обладает своим собственным адресным пространством. Узлы связаны друг с другом посредством внешних каналов и сети межсоединений, которая может быть реализована как статической, так и динамической топологией. При выборе сети межсоединений оценивают два основных параметра – пропускную способность и задержку. Пропускная способность определяет количество информации, которое может быть передано по сети за единицу времени (бит/с). Задержка определяет количество времени, необходимое для передачи сообщения по сети.
Прикладные программы под ВС с распределенной памятью реализуют в виде набора параллельных процессов, каждый из которых выполняется на отдельном процессоре. Если количество процессоров в ВС меньше числа процессов в программе, то несколько процессов будут реализованы на одном вычислительном узле с разделением во времени. Для обмена сообщениями друг с другом такие процессы будут использовать так называемые внутренние каналы – механизм логического разделения ресурсов между несколькими процессами. Процессы, выполняемые на различных процессорах, в свою очередь используют внешние каналы для обмена сообщениями. Данные, которыми обмениваются процессоры, не могут быть использованы совместно как общие данные. Каждый узел, участвующий в вычислении, с помощью сообщений отправить/получить должен загрузить в локальную память свой экземпляр данных, которые будут обработаны.
Важное достоинство такой организации обмена данными – простота синхронизации процессов, что непосредственно влияет на повышение производительности ВС в целом.
Количество процессов в системах с распределенной памятью принято описывать с помощью параметра степень детализации процессов – гранулярность (process granularity – PG), которую оценивают выражением (3.6)
,
(3.6)
где
– время, затрачиваемое на вычисление,
– время, затрачиваемое на коммутацию.
В общем случае можно выделить три типа гранулярности.
Грубая степень детализации. Каждый процесс содержит большое число последовательных инструкций и требует существенное время для выполнения.
Средняя степень детализации. Поскольку затраты на связь между процессами увеличиваются с понижением степени детализации, то в данном случае обеспечивают поиск компромисса, обеспечивающего минимизацию коммутационных затрат времени.
Мелкая степень детализации. Каждый процесс представляют всего несколькими последовательными командами или даже одной. В этом случае время выполнения задачи отдельным процессом будет минимально, но потребуется организовать многочисленный обмен результатами среди таких процессов.
Программирование задач для решения на ВС с распределенной памятью требует специального программного обеспечения, которое описывает сами вычислительные действия, а также правила взаимодействия отдельных процессов и их синхронизацию. Наиболее распространенные средства программирования под вычислительные системы с распределенной памятью – виртуальная машина параллельного действия (PVM – Parallel Virtual Machine) [10], [11] и интерфейс с передачей сообщений (MPI – Message-Passing Interface) [12]-[14].
Отличительными особенностями ВС с распределенной памятью являются
Легкость масштабирования. Для повышения производительности достаточно включить дополнительные вычислительные узлы в структуру ВС. Для этого необходимо лишь подключить новый набор узлов к сети межсоединений вычислительной системы.
В общем случае количество вычислительных узлов не ограничено.
Отсутствие требования к однородности используемых вычислительных узлов. Каждый узел может быть представлен отдельной рабочей станцией с процессором любого типа (последовательный, конвейерный, векторный и т.д.) или совокупностью компьютеров, использующих общую память (SMP- или NUMA- системы).
Территориальное распределение. В общем случае при построении таких ВС используют не только локально сосредоточенные компьютеры, например в одном помещении или здании, но и вычислительные узлы с существенным территориальным распределением, например в рамках городов, государств и даже континентов. В этом случае различают кластерные и grid-системы.