Добавлен: 28.06.2023
Просмотров: 80
Скачиваний: 2
СОДЕРЖАНИЕ
1.1. Основные понятия мультипроцессорности
1.2. Типы мультипроцессорности
1.2.1. Процессорная симметричность
1.3.1. Многопроцессорная обработка с SISD
1.3.2. Многопроцессорная обработка SIMD
1.3.3. Многопроцессорная обработка MISD
1.3.4. Многопроцессорная обработка MIMD
2.2. Классификация мультипроцессоров
2.3. Программирование мультипроцессоров
1.3.4. Многопроцессорная обработка MIMD
Архитектура многопроцессорной обработки MIMD является подходящей для большого числа разнообразных задач, где реализовано параллельное и полностью независимое выполнение команд, которые касаются различных наборов данных. MIMD преобладает в многопроцессорной обработке по этой причине, а также потому что это просто осуществить[14].
Обработка разделена на несколько потоков, каждый с собственным аппаратным состоянием процессора, в пределах множественных процессов или в рамках единственного определенного программным обеспечением процесса. Поскольку система имеет несколько ожидающих выполнения потоков, данный вид архитектуры эффективно использует аппаратные ресурсы[15].
При данной типе обработке могут возникнуть проблемы состязания за обладание ресурсами и взаимной блокировки, так как потоки могут столкнуться непредсказуемым способом при попытке получить доступ к ресурсам. Такая архитектура требует специального кодирования в операционной системе компьютера, но не требует изменений в прикладных программах, кроме тех случаев, в которых программы сами используют множественные потоки. Тип архитектуры MIMD прозрачен для однопоточных программ под управлением большинства операционных систем, если программы сами не отказываются от управления со стороны операционной системы. И пользовательское и системное программное обеспечение, возможно, должны использовать программные конструкции, такие как семафоры, чтобы препятствовать тому, чтобы один поток вмешался в другой, в ситуации, когда они содержат ссылку на одни и те же данные. Данное действие увеличивает сложность кода, снижает производительность и значительно увеличивают количество необходимого тестирования, хотя обычно не настолько чтобы свести на нет преимущества многопроцессорной обработки.
Подобные конфликты могут возникнуть на аппаратном уровне между процессорами, и обычно должны решаться аппаратными средствами, или с комбинацией оборудования и программного обеспечения[16] [6, 10, 12].
По итогам данной главы можно сделать вывод, что мультипроцессорные технологии являются востребованной на сегодняшний день методикой, позволяющей реализовать востребованные методы более оптимизированными способами.
2. Мультипроцессор
2.1. Понятие мультипроцессора
Мультипроцессор является это подклассом многопроцессорных компьютерных систем, в которых есть одно видимое для всех процессоров адресное пространство и несколько процессоров. В таксономии Флинна мультипроцессоры относятся к классу SM-MIMD-машин. Мультипроцессор запускает одну копию операционной системы с одним набором таблиц, в том числе следящих какие страницы памяти свободны[17] [10].
2.2. Классификация мультипроцессоров
По ролям, которые играют процессоры в мультипроцессорной системе, различают симметричные мультипроцессоры SMP и асимметричные мультипроцессоры AMP:
- симметричные мультипроцессоры используются, когда все процессоры имеют одинаковый доступ к периферии и памяти и играют одинаковую роль;
- асимметричные мультипроцессоры используются, когда процессоры по-разному обращаются к периферийным устройствам или играют разные роли.
Технология ассиметричных процессоров была лишь переходной в 60-х годах до того момента, когда была отработана технология симетричных процессоров [18].
По способу адресации памяти различают несколько типов мультипроцессоров, среди которых:
- Uniform Memory Access;
- Non Uniform Memory Access;
- Cache Only Memory Access.
Однородный доступ к памяти UMA является архитектурой многопроцессорных компьютеров с общей памятью.
Все микропроцессоры в архитектуре однородного доступа к памяти используют физическую память одновременно. При этом время запроса к данным из памяти не зависит ни от обращающегося к памяти процессора, ни от содержащего нужные данные чипа памяти. Однако каждый микропроцессор может использовать свой собственный кэш[19].
Такой способ работы с памятью используется в системах с симметричной мультипроцессорностью, поэтому термины SMP и UMA часто используются вместе как «SMP/UMA».
Неравномерный доступ к памяти NUMA является схемой реализации компьютерной памяти, которая используется в мультипроцессорных системах в случаях, когда время доступа к памяти определяется ее расположением по отношению к процессору.
Системы NUMA состоят из однородных базовых узлов, которые содержат небольшое число процессоров с модулями основной памяти.
Практически все архитектуры центральных процессоров используют небольшое количество очень быстрой неразделяемой памяти, известной как кеш, ускоряющий обращение к часто требуемым данным. В NUMA поддержка когерентности через разделяемую память дает существенное преимущество в производительности[20].
Хотя системы с некогерентным доступом к NUMA проще создавать и проектировать, становится предельно сложно создавать программы в классической фоннеймановской модели архитектуры. В итоге, все продаваемые NUMA-компьютеры используют специальные аппаратные решения для достижения когерентности кеша, и классифицируются как кеш-когерентные системы с распределенной разделяемой памятью, называемые ccNUMA[21].
Обычно, существует межпроцессорное взаимодействие между контроллерами кеша для сохранения согласованной картины памяти в случаях, когда более чем один кеш хранит одну и ту же ячейку памяти. Именно поэтому, платформы ccNUMA теряют в производительности в случаях, когда несколько процессоров подряд пытаются получить доступ к одному блоку памяти. Поддерживающая NUMA операционная система пытается уменьшить частоту доступа такого типа путем перераспределения памяти и процессоров таким способом, чтобы избежать блокировки и гонок[22].
В качестве примера многопроцессорных машин с архитектурой ccNUMA можно привести серию машин компании Silicon Graphics SGI Origin 2000. Суперкомпьютер ASCI Blue Mountain является одним из самых мощных суперкомпьютеров 1999 года. Он представлял собой массово-параллельный кластер из 48 машин SGI Origin 2000 по 128 процессоров в каждой.
Также мультипроцессоры могут разделяться на процессоры гомогенного типа, когда все процессоры в системе одинаковы, или гетерогенного типа - когда процессоры в системе, наоборот, разного типа[23] [3, 6, 9, 12].
2.3. Программирование мультипроцессоров
При программировании мультипроцессоров можно использовать две модели программирования: message passing, при котором на каждом процессоре запускается отдельный процесс, и они обмениваются данными друг с другом путем обмена сообщениями, либо многопоточность, при которой на каждом процессоре запускается поток исполнения, и они обмениваются друг с другом данными через общие переменные в общей памяти. Многопоточное программирование используется либо неявно декларативно автоматически самим компилятором или с помощью директив компилятора, либо явно в компилируемых языках программирования с помощью системного API [24] [2].
2.3.1. Мультипоточность
Мультипоточность является свойством приложения или платформы, состоящим в том, что порожденный в операционной системе процесс может состоять из нескольких потоков, которые выполняются параллельно, то есть без предписанного порядка во времени. При выполнении некоторых задач такое разделение может достичь более эффективного использования ресурсов вычислительной машины.
Такие потоки называют также потоками выполнения; иногда называют «нитями» или неформально «тредами»[25].
Сутью мультипоточности является квазимногозадачность на уровне одного исполняемого процесса, то есть все потоки выполняются в адресном пространстве процесса. Кроме этого, все потоки процесса имеют не только общее адресное пространство, но и общие дескрипторы файлов. Выполняющийся процесс имеет как минимум один поток.
Мультипоточность не следует путать ни с мультизадачностью, ни с мультипроцессорностью, несмотря на то, что операционные системы, реализующие мультизадачность, как правило, реализуют и мультипоточность[26].
К достоинствам мультипоточности в программировании можно отнести следующее:
- повышение производительности процесса за счет распараллеливания процессорных вычислений и операций ввода-вывода;
- меньшие относительно процесса временны́е затраты на создание потока;
- упрощение программы в некоторых случаях за счет использования общего адресного пространства[27] [2, 6, 7].
2.3.2. Обмен сообщениями
В информатике обмен сообщениями является формой связи, которая используется во взаимодействии процессов, объектно-ориентированном программировании и параллельных вычислениях. Сообщение реализуется путем посылки пакетов информации получателям, которые могут означать множество вещей: данные, сигналы, вызов функций. Данный метод широко используется во всевозможных системах с параллелизмом для координации действий[28].
В микроядерных операционных системах он используется для обмена информацией между одним из ядер и одним или несколькими исполняющими блоками.
Системы обмена сообщениями являются закрытыми, так как их абстракция прячет все изменения состояний, которые могут быть использованы в реализации отсылки сообщений[29].
Базирующиеся на этой модели языки программирования обычно определяют передачу сообщения, как посылку элемента данных конечному получателю, которым может быть актор, процесс, поток или сокет. Такой обмен используется SOAP в веб-сервисах. Данная концепция является высокоуровневой версией датаграмм, за исключением того, что сообщения могут быть больше по размерам, чем пакет, и могут быть сделаны безопасными, стойкими, надежными и при желании могут быть охвачены механизмом транзакций[30].
Сообщения также часто используются в том же смысле, что и межпроцессное взаимодействие; другой широкораспространенной техникой являются конвейеры и потоки, где информация посылается в виде последовательности простейших элементов данных[31] [4, 5, 8].
2.4. История мультипроцессоров
Мультипроцессорные машины (SMP/UMA) стали предлагаться на рынке в конце 1980-х — начале 1990-х годов, сначала в виде минисуперкомпьютеров, а после как серверов обработки данных, что помогло быстро приобрести популярность на рынке серверного оборудования. Первыми мультипроцессорами с архитектурой x86 на базе процессоров Intel 80386 и Intel 486 стали сервера Compaq SystemPro, которые поступили на рынок в конце 1989 — в начале 1990 года. Рост предложений на рынке мультипроцессороных x86-серверов привел компанию Intel к созданию стандарта MultiProcessor Specification, ставшим на долгие годы стандартом де-факто для SMP-машин c архитектурой x86[32].
Первыми мультипроцессорами типа ccNUMA были компьютер Denelcor HEP компании Denelcor и KSR1 компании Kendall Square Research в середине 1980-х годов.
Были созданы также мультипроцессоры и без когерентности кэша, такие как nccNUMA.
Развитие миниатюризации в вычислительной электронике позволило размещать несколько процессоров в одном корпусе или на одном кристалле, создавая мульти-ядерные процессоры. Данный метод позволил повысить производительность процессоров путем простого увеличения количества простых по дизайну вычислительных ядер, вместо традиционных попыток усложнения вычислительного конвейера одноядерного процессора или повышения тактовой частоты. При этом многоядерные процессоры работают с многопоточными приложениями, более эффективно используют память, не рассеивают много мощности и тратят мало электроэнергии, что идеально подходит для масштабирования дата-центров[33].