Лекция № 2: Классификация параллельных вычислительных систем
Майкл Флинн предложил в 1966 году следующую классификацию вычислительных систем, основанную на количестве потоков входных данных и количестве потоков команд, которые эти данные обрабатывают:
| Один поток инструкций | Несколько потоков инструкций | |
|---|---|---|
| Один поток данных | SISD | MISD |
| Несколько потоков данных | SIMD | MIMD |
Таблица 1. Классификация Флинна
SISD (Single Instruction Single Data): это обычные последовательные компьютеры. Программа принимает один поток данных и выполняет один поток инструкций по обработке этих данных. Иными словами, инструкции выполняются последовательно, и каждая инструкция оперирует минимальным количеством данных (например, сложение двух чисел).
MISD (Multiple Instruction Single Data): разные потоки инструкций выполняются с одними и теми же данными. Обычно такие системы не приводят к ускорению вычислений, так как разные инструкции оперируют одними и теми же данными, в результате на выходе системы получается один поток данных. К таким системам относят различные системы дублирования и защиты от сбоев, когда, например, несколько процессоров дублируют вычисления друг друга для надёжности. Иногда к этой категории относят конвейерные архитектуры. Среди процессоров производства Intel, конвейер присутствует начиная с процессора Pentium.
SIMD (Single Instruction Multiple Data): один поток инструкций выполняет вычисления одновременно с разными данными. Например, выполняется сложение одновременно восьми пар чисел. Такие компьютеры называются векторными, так как подобные операции выполняются аналогично операциям с векторами (когда, например, сложение двух векторов означает одновременное сложение всех их компонентов). Зачастую векторные инструкции присутствуют в дополнение к обычным «скалярным» инструкциям, и называются SIMD-расширением (или векторным расширением). Примеры популярных SIMD-расширений: MMX, 3DNow!, SSE и др.
MIMD (Multiple Instruction Multiple Data): разные потоки инструкций оперируют различными данными. Это системы наиболее общего вида, поэтому их проще всего использовать для решения различных параллельных задач.
MIMD-системы, в свою очередь, принято разделять (классификация Джонсона) на системы с общей памятью (несколько вычислителей имеют общую память) и системы с распределенной памятью (каждый вычислитель имеет свою память; вычислители могут обмениваться данными). Кроме того, существуют системы с неоднородным доступом к памяти (NUMA) — в которых доступ к памяти других вычислителей существует, но он значительно медленнее, чем доступ к «своей» памяти.
Системы с общей памятью
Системами с общей памятью называют системы, в которых несколько процессоров имеют общую оперативную память. Чаще всего встречающиеся системы этого типа — компьютеры с многоядерными процессорами (multi-core).
Преимущества:
- Не требуется обмен данными: данные, помещённые в память одним процессором, автоматически становятся доступными другим процессорам. Соответственно, система не должна тратить время на пересылку данных.
- Для таких систем просто писать программы: можно, например, создать несколько вычислительных потоков, или же снабдить программу специальными директивами (например, технология OpenMP), которые подскажут компилятору, как распараллеливать программу. Кроме того, возможно полностью автоматическое распараллеливание программы компилятором.
- Компактность систем: может быть реализована в виде нескольких процессоров на одной материнской плате, и/или в виде нескольких ядер внутри процессора.
Недостатки:
Допустим, у нас есть объект, содержащий числа A и B, и для правильной работы объекта нужно, чтобы A + B всегда было равно нулю. Если первый процесс изменит A, и не успеет изменить B прежде, чем второй процесс прочтёт A и B, то второй процесс получит неправильный объект, в котором A + B не равно нулю. Для решения подобных проблем можно использовать критические секции. Если поток инструкций первого процесса входит в критическую секцию с идентификатором N, то поток инструкций другого процесса не сможет войти в критическую секцию с тем же идентификатором, и будет ждать, пока первый процесс не выйдет из этой секции.
- Проблема совместного доступа к памяти: нужно осторожно работать с теми участками памяти, для которых возможно одновременное выполнение записи одним процессором и другой операции (записи или чтения) другим процессором.
- Проблема синхронности кэшей: для ускорения доступа к памяти процессоры снабжаются кэшами. Если один процессор изменил данные в оперативной памяти, и эти данные прокэшированы другими процессорами, то их кэши должны автоматически обновиться. Данная проблема отсутствует в многоядерных процессорах, использующих общий кэш.
- Проблема медленного обращения к оперативной памяти и её ограниченного объёма: процессор работает быстро, а память — медленно, поэтому даже одному процессору приходится ждать загрузки данных из оперативной памяти. Если же процессоров несколько, то им приходится ждать ещё дольше. Скорость работы каждого процессора с памятью становится тем меньше, чем большее число процессоров имеется в системе. Кроме того, объём памяти не может быть сделан сколь угодно большим, так как для этого придётся увеличивать разрядность шины памяти.
- Проблема масштабируемости: очень сложно сделать подобную систему с больши́м числом процессоров, так как очень сильно возрастает стоимость и падает эффективность работы из-за описанных выше проблем. Практически все подобные системы имеют ≤ 8 процессоров.
Системы с распределённой памятью
Система содержит несколько процессоров, каждый имеет свою оперативную память. Для обеспечения обмена информацией процессоры соединены каналами связи. По характеру связей такие системы делятся на системы с универсальной коммутацией (каждый процессор может передать информацию любому другому процессору) и системы с жёсткой (фиксированной) коммутацией (каждый процессор может передать информацию только ограниченному числу других процессоров).
Системы с распределённой памятью, в которых каждый вычислительный узел представляет собой полноценный компьютер со своей копией операционной системы, называют кластерными (или «кластерами»). Кластеры обычно представляют собой шкафы с компактными системными блоками, которые соединены друг с другом каналами связи (посредством специальных коммутаторов), передающими данные со скоростью 10 ГБит/сек и более.
Рисунок 1. Суперкомпьютер Columbia, имеющий 10240 процессоров. Подробнее
Преимущества:
- Простота и дешевизна построения: можно взять большое количество обычных компьютеров, соединить их каналами связи (например, Ethernet), и получить кластер.
- Эффективное решение задач, требующих малого обмена данными: каждый компьютер будет работать в полную мощность, не ожидая, пока освободится доступ к оперативной памяти.
- Возможность решать задачи, требующие очень больших объёмов оперативной памяти: суммарный объём памяти системы можно сделать сколь угодно большим. Требуется лишь, чтобы задача разбивалась на относительно независимые подзадачи.
- Возможность масштабирования: можно соединить сколько угодно вычислительных узлов вместе, при этом стоимость системы будет пропорциональна числу узлов. В связи с этим большинство самых мощных вычислительных систем в мире являются кластерными.
Недостатки:
- Проблема обмена данными: обмен данными в таких системах обычно идёт очень медленно по сравнению со скоростью вычислений (и с большими задержками). Поэтому задачи, требующие интенсивного обмена, невозможно решить на таких системах эффективно.
- Сложное программирование: программист должен продумать обмен данными, который будет присутствовать в системе, должен сам запрограммировать этот обмен (например, с помощью MPI). При неправильном программировании велика вероятность взаимных блокировок: когда, например, два процессора ждут данных друг от друга. Проблема блокировок есть и в системах с общей памятью, но здесь она проявляет себя гораздо чаще. Автоматическая организация обмена данными возможна лишь для некоторых частных случаев.
- Большой размер систем и большое энергопотребление: кластерные системы занимают целые комнаты (рисунок 1) и даже здания.
Гибридные системы
Многие современные системы представляют собой иерархию описанных выше систем. Например, современные процессоры являются конвейерными процессорами, и имеют набор векторных инструкций (MMX, SSE и т.п.), позволяющих выполнять одновременные вычисления с разными данными. Кроме того, процессор может иметь два ядра, или может быть несколько процессоров в компьютере. Таким образом, на этом уровне система представляет собой систему с общей памятью. Затем можно соединить несколько таких компьютеров в кластер, образовав новый уровень иерархии: систему с распределённой памятью.
Что почитать по теме
Flynn's taxonomy – Wikipedia, the free encyclopedia
Non-uniform memory access – Wikipedia, the free encyclopedia
Symmetric multiprocessing – Wikipedia, the free encyclopedia
Четыре отзыва на запись «Лекция № 2: Классификация параллельных вычислительных систем»
Автор: Ольга. Дата: 17-го ноября 2010 г. Время: 19:09.
Фу бля нет такой темы каторой мне нодо фууууууууууу
Автор: Антон. Дата: 17-го ноября 2010 г. Время: 21:48.
Мне очень жаль.
Автор: Сашка. Дата: 20-го мая 2011 г. Время: 12:30.
А для меня есть)
ЗЫ: Ольга какой-то неадекват т_Т
Автор: вера . Дата: 3-го февраля 2012 г. Время: 15:57.
спасибо очень понравилась лекция все четко и ясно.