Основные классы современных параллельных компьютеров

Массивно-параллельные системы (MPP)

Симметричные мультипроцессорные системы (SMP)

Системы с неоднородным доступом к памяти (NUMA)

Параллельные векторные системы (PVP)

Кластерные системы

Билет 7

1. Параллельная программа содержит несколько процессов, работающих совместно над вы

полнением некоторой задачи. Каждый процесс — это последовательная программа,

а точнее — последовательность операторов, выполняемых один за другим. Последовательная

программа имеет

один поток управления

, а параллельная —

несколько

.

Совместная работа процессов параллельной программы осуществляется с помощью их

взаимодействия

. Взаимодействие программируется с применением разделяемых переменных

или пересылки сообщений. Если используются разделяемые переменные, то один процесс

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

щений один процесс отправляет сообщение, которое получает другой.

2.Обработка потока - парадигма программирования, связанная с SIMD (единственная инструкция, многократные данные), который позволяет некоторым заявлениям более легко эксплуатировать ограниченную форму параллельной обработки. Такие заявления могут использовать многократные вычислительные единицы, такие как FPUs на GPU или полевых программируемых множествах ворот (FPGAs), без явно руководящего распределения, синхронизации или коммуникации среди тех единиц.

Парадигма обработки потока упрощает параллельное программное и аппаратное обеспечение, ограничивая параллельное вычисление, которое может быть выполнено. Данный ряд данных (поток), ряд операций (ядерные функции) применен к каждому элементу в потоке. Однородное вытекание, где одна ядерная функция применена ко всем элементам в потоке, типично. Ядерные функции обычно pipelined, и местная память на чипе снова использована, чтобы минимизировать внешнюю полосу пропускания памяти. Так как ядро и абстракции потока выставляют зависимости от данных, инструменты компилятора могут полностью автоматизировать и оптимизировать управленческие задачи на чипе. Аппаратные средства обработки потока могут использовать scoreboarding, например, чтобы начать DMAs во времени выполнения, когда зависимости становятся известными. Устранение ручного управления DMA уменьшает сложность программного обеспечения, и устранение тайников аппаратных средств уменьшает сумму области, не посвященной вычислительным единицам, таким как ALUs.

В течение 1980-х обработка потока исследовалась в рамках программирования потока информации. Пример - языковой СИЗАЛЬ (Потоки и Повторение на Единственном Языке Назначения).

Билет 10

1.Переносимость MPI-программ

Переносимость обеспечивается следующими факторами:

  1. Программный код может одинаково эффективно выполняться как на парал-лельных компьютерах с распределенной памятью, так и на параллельных компьютерах с общей памятью. Он может выполняться на сети рабочих стан-ций, или на наборе процессоров на отдельной рабочей станции.
  2. Параллельные программы способны выполняться на гетерогенных системах, то есть на системах, аппаратная составляющая которых имеет различную ар-хитектуру. MPI обеспечивает вычислительную модель, скрывающую архитек-турные различия в работе процессоров. MPI автоматически делает любое не-обходимое преобразование данных и использует правильный протокол связи независимо от того, посылается ли код сообщения между одинаковыми про-цессорами или между процессорами с различной архитектурой.
  3. Существует механизм определения одного вычислительного компьютера в виде виртуального компьютера и возможность задания произвольного коли-чества таких виртуальных компьютеров в системе. При этом определяющим фактором выступает не количество физических компьютеров, а величина объ-ема оперативной памяти.
  4. Возможность задания виртуальных топологий. Отображение виртуальных то-пологий на физическую систему осуществляется системой MPI. Виртуальные топологии обеспечивают оптимальное приближение архитектуры системы к структурам задач при их хорошей переносимости.

Интерфейс MPI

Еще один стандарт де-факто в мире параллельных вычислений - пакет MPI (Message Passing Interface), тоже разрабатывавшийся как универсальное средство облегчения жизни разработчику параллельного ПО. Только устроено оно совсем иначе, нежели OpenMP, и ориентировано в основном для других, "более возвышенных" целей.

Идея MPI заключается в следующем. OpenMP (да и многие другие системы для разработки параллельного ПО) ориентируется на так называемые системы с общей памятью, когда на компьютере запущена всего одна программа (точнее, один процесс), но внутри этого процесса "живет" несколько потоков исполнения, каждому из которых доступна вся память процесса, а стало быть, и все его данные. MPI исходит из другой предпосылки: на компьютере запущено много-много программ (процессов), которые друг с другом напрямую общаться не могут и вынуждены устанавливать контакт через специальные окна или даже внешние каналы связи. Называется все это IPC (Inter-Process Communication) и, как вы уже, наверное, догадались, сильно изменяется от компьютера к компьютеру и от операционной системе к операционной системе. А MPI - попытка стандартизировать связь между процессами, предоставив всем желающим удобную модель запуска на нескольких процессорах тех программ, которые будут коллективно обрабатывать данные, и обеспечивая "почтовые пересылки" между этими программами. Вот и весь Message Passing Interface.

MPI универсален и всеяден. Он не накладывает практически никаких ограничений на приложение, на железо, на каналы, которые используются для связи между компьютерами. Можно в буквальном смысле слова поставить на стол две персоналки с MPI, соединить их Ethernet-кабелем - и кластер на два процессора, на котором можно запускать любое MPI-приложение, - готов! Потому-то этот интерфейс так и любят ученые, реализующие с его помощью программы для самых немыслимых суперкомпьютеров.

Впрочем, при желании можно использовать MPI и для обычных двухъядерных процессоров или двухпроцессорных систем - "вотчины" проектов OpenMP. Но, конечно, MPI для таких целей "тяжеловат", - как в плане быстроты исполнения программного кода, которому, в отличие от его OMP-коллег, приходится еще и оплачивать "накладные расходы" на канал связи, так и в плане высокой сложности разработки MPI-приложений. Последние, правда, лишены большинства тех "граблей", которые существуют для обычных систем с распределенной памятью; но зато для написания соответствующего кода от программиста требуется четкое мышление, позволяющее в деталях продумать систему обмена информацией между процессами.

2.Параллельные вычисления — способ организации компьютерных вычислений, при котором программы разрабатываются как набор взаимодействующих вычислительных процессов, работающих параллельно (одновременно). Термин охватывает совокупность вопросов параллелизма в программировании, а также создание эффективно действующих аппаратных реализаций. Теория параллельных вычислений составляет раздел прикладной теории алгоритмов[1].

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

Основная сложность при проектировании параллельных программ — обеспечить правильную последовательность взаимодействий между различными вычислительными процессами, а также координацию ресурсов, разделяемых между процессами.

Билет 11

Наши рекомендации