Архитектура многопроцессорных вычислительных систем.

31.10.2020 14:13

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

    Параллелизм – основа высокопроизводительной работы всех подсистем вычислительных машин. Организация памяти любого уровня иерархии, организация системного ввода/вывода, организация мультиплексирования шин и т.д. базируются на принципах параллельной обработки запросов. Современные операционные системы являются многозадачными и многопользовательскими, имитируя параллельное исполнение программ посредством механизма прерываний. Развитие процессоростроения также ориентировано на распараллеливание операций, т.е. на выполнение процессором большего числа операций за такт. Ключевыми ступенями развития архитектуры процессоров стали гиперконвейеризация, суперскалярность, неупорядоченная модель обработки, векторное процессирование (технология SIMD), архитектура VLIW. Все ступени были ориентированы на повышение степени параллелизма исполнения. В настоящее время мощные сервера представляют собой мультипроцессорные системы, а в процессорах активно используется параллелизм уровня потоков.

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

 

Типы многопроцессорных систем.

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

    Поскольку увеличение частоты работы оперативной памяти поддается с большим трудом, то увеличение объема кэш-памяти стало одним из основных резервов увеличения скорости работы вычислительной системы в целом. За последние два десятилетия объем кэш-памяти вырос от нескольких килобайт до нескольких мегабайт. Таким образом, схема современной однопроцессорной вычислительной системы выглядит следующим образом (Рис. 1.):

Рис. 1. Схема современной однопроцессорной вычислительной системы.    

 

    Первые мультипроцессорные вычислительные системы были получены из однопроцессорных систем подключением к шине памяти одного или нескольких дополнительных процессоров без радикального изменения базовой архитектуры. В самом деле, если у 2-х процессорной системы оставить только один процессор, то компьютер будет работать как обычная однопроцессорная система, если же установить оба процессора, то получится мультипроцессорная вычислительная система с общей памятью, поскольку оба процессора имеют равноправный доступ к общей шине памяти. Поэтому системы с общей памятью еще называют симметричными мультипроцессорными системам (Symmetric MultiProcessing - SMP). 

    Упрощенная схема системы с общей памятью представлена на рис. 2. Разумеется, в реальности все сложнее, поскольку сама архитектура процессоров, допускающих использование их в многопроцессорных системах значительно сложнее, чем у процессоров, используемых в однопроцессорных системах. С этим связана непропорционально высокая стоимость SMP систем по сравнению с обычными персональными компьютерами. Как компромиссный вариант некоторые производители процессоров стали выпускать специализированные процессоры для 2-х, 4-х и 8-ми процессорных систем.

Рис. 2. Архитектура параллельной вычислительной системы с общей памятью.

 

    Второй способ создания многопроцессорной вычислительной системы состоит в объединении в единую вычислительную систему множества традиционных однопроцессорных вычислительных систем с помощью коммуникационного оборудования. Таким образом, в системах этого типа каждый процессор имеет прямой доступ только к собственной оперативной памяти, а обмен с памятью других процессоров возможен только через коммуникационные каналы посредством передачи сообщений. Вычислительные системы этого типа получили название систем с массовым параллелизмом (Massively-Parallel Processing - MPP). Поскольку память распределена между процессорами, то системы этого типа называют системами с распределенной памятью. 

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

Рис.1.3. Архитектура параллельной вычислительной системы с распределенной памятью.

 

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

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

 

Системы с общей памятью.

    Системы с общей памятью в простейшей реализации используют для подключения всех процессоров общую шину памяти. Такая конфигурация называется Uniform Memory Access (UMA) - равноправный доступ к памяти. Производительность многопроцессорных систем этого типа лимитируется пропускной способностью общей шины памяти и при увеличении числа процессоров, начиная с некоторого их числа, производительность системы перестает расти. Это связано с тем, что резко возрастает время ожидания доступа к общей шине памяти. Обычно, число процессоров в таких системах не превышает 8-16 шт. Более того, для современных высокопроизводительных процессоров пропускной способности шины памяти не хватает даже в 2-4 процессорных конфигурациях. Для улучшения масштабируемости систем с общей памятью используется Non-Uniform Memory Access (NUMA) архитектура. В системах этого типа каждый процессор по-прежнему имеет доступ ко всей памяти, однако она разделена на блоки, к каждому из которых напрямую подключено небольшое число процессоров (обычно 4), а блоки объединяются с помощью высокоскоростного коммуникационного оборудования. При этом доступ к памяти других блоков происходит в несколько раз медленнее, чем к локальной памяти. Кроме того, поскольку все микропроцессоры в настоящее время оснащаются кэш-памятью, то требуется аппаратная поддержка когерентности всей кэш-памяти. Такие системы называются cc-NUMA (cache coherent NUMA). Системы этого типа масштабируются до нескольких сотен процессоров. Недавно, общепризнанный лидер в производстве вычислительных систем с общей памятью, фирма SGI представила самую большую систему с общей памятью объемом 4 Терабайта, состоящую из 1024 двухядерных процессоров.

    В системах с общей памятью, как правило, единственная копия операционной системы управляет работой всех процессоров и всей памятью. Основная модель программирования - "fork-join" (Ветвление - Объединение). Любая программа стартует как обычная однопроцессорная программа. При достижении параллельной части программы, головная программа (мастер) порождает некоторое число дополнительных процессов (ветвей), которые завершаются по окончании параллельной части.

 

Системы с распределенной памятью.

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

    На самом деле устранение одних проблем, как это часто бывает, порождает другие. Для MPP систем на первый план выходит проблема эффективности коммуникационной среды. Когда говорят: "Давайте соберем систему из 1000 узлов", то сразу возникает вопрос - каким образом соединить в единое целое такое множество узлов. Самое простое и эффективное решение состояло бы в соединении каждого узла с каждым. Но тогда на каждом узле потребовалось бы 999 двунаправленных каналов. Очевидно, что это не реально. Разные производители использовали различные топологии. В компьютерах Intel Paragon процессоры образовывали двумерную прямоугольную сетку. Для этого на каждом узле достаточно четырех коммуникационных каналов. В компьютерах Cray T3D/T3E использовалась топология трехмерного тора. Для организации такой топологии на узлах должно быть шесть коммуникационных каналов. При таких топологиях, если требовалась передача данных между узлами, не являющимися непосредственными соседями, то необходима была трансляция сообщения через промежуточные узлы. Для больших вычислительных систем число промежуточных трансляций становилось недопустимо большим, поскольку это неизбежно приводило к снижению производительности коммуникационной среды . В компьютерах nCUBE для сокращения промежуточных трансляций использовалась топология n-мерного куба (с максимальной технически реализованной размерностью n равной 13). Каждый узел снабжался 13 коммуникационными каналами, что позволяло создавать вычислительные системы, содержащие до 8192 процессоров. При этом максимальное число трансляций составляло всего 13.

    В настоящее время функционируют вычислительные системы с распределенной памятью, состоящие из нескольких сотен тысяч процессоров (IBM Blue Gene/L). При построении таких систем используются высокоскоростные коммутаторы, соединяемые в топологию "толстого дерева".

Сеть fat tree (рус. утолщённое дерево) — топология компьютерной сети, изобретённая Чарльзом Лейзерсоном из MIT, является дешевой и эффективной для суперкомпьютеров. В отличие от классической топологии дерево, в которой все связи между узлами одинаковы, связи в утолщённом дереве становятся более широкими (толстыми, производительными по пропускной способности) с каждым уровнем по мере приближения к корню дерева. Часто используют удвоение пропускной способности на каждом уровне.

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

    Отсутствие общей памяти улучшило масштабируемость вычислительных систем, но значительно усложнило взаимодействие между процессорами и, соответственно, программирование для них. Как правило, на каждом узле функционирует своя копия операционной системы, в которой запускается отдельная копия параллельной программы. Взаимосвязь между узлами осуществляется с помощью механизма передачи сообщений. Этот механизм реализуется в виде прикладных библиотек, которые должны подключаться к параллельной программе. Каждый производитель многопроцессорных систем с распределенной памятью поставлял такие библиотеки в составе системного программного обеспечения своих компьютеров. Например, среда параллельного программирования (PSE) многопроцессорной системы nCUBE2 включала в себя 5 встроенных функций и небольшую вспомогательную библиотеку. В настоящее время в качестве стандарта коммуникационной библиотеки принята платформенно-независимая библиотека MPI. Эта библиотека предоставляет широкий набор средств для создания параллельных программ, однако программирование на уровне вызовов коммуникационных библиотечных функций остается довольно трудоемким. Предпринимаются попытки создания средств для автоматического и полуавтоматического распараллеливания программ. Одним из наиболее законченных решений такого рода является язык HPF (High Performance Fortran).