Interested Article - SPMD

В программировании , SPMD ( single program, multiple data - единая программа, множество данных) является методом, используемым для достижения параллелизма; это подкатегория MIMD -класса вычислительных систем в классификации Флинна .

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

SPMD против SIMD

В SPMD, множество автономных процессоров одновременно выполняют одну и ту же программу из разных её мест (имеется в виду участки кода), а не в жесткой последовательности, которую SIMD накладывает для обработки различных данных. Благодаря SPMD задачи могут быть выполнены на процессорах общего назначения. SIMD требует векторных процессоров для управления потоками данных . Заметим, что эти два метода не являются взаимоисключающими.

Распределенная память

SPMD обычно относят к программированию через обмен сообщениями для архитектур с распределенной памятью. Распределенная память состоит из набора независимых компьютеров, называемых «узлами». Каждый узел запускает свою собственную программу и взаимодействует с другими узлами посредством отправки и получения сообщений, вызывая для этого процедуры отправки и приема. Барьерная синхронизация может быть реализована при помощи сообщений. Сообщения могут быть отправлены с помощью таких механизмов коммуникации как TCP/IP (для Ethernet ) или специализированные высокоскоростные соединения, такие как и Supercomputer Interconnect. Последовательные участки (секции) программ реализуются одинаковыми вычислениями на всех узлах, а не с помощью вычисления результата на одном узле и его отправки на другие.

В настоящее время, программист изолирован от деталей передачи сообщений, осуществляемой с помощью стандартных интерфейсов, таких как PVM и MPI .

Распределенная память — это стиль программирования, использующийся на параллельных суперкомпьютерах, начиная с «домашних» кластеров Beowulf и кончая крупнейшими кластерами на TeraGrid.

Разделяемая память

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

В отличие от SPMD, многопроцессорная система с разделяемой памятью, которая также называется симметричной многопроцессорной (SMP), предоставляет возможность распараллеливания исполнения за счёт независимого пути исполнения приложения на каждом процессоре с использованием общей памяти как механизма обмена данными. Программа начинает выполняться на одном процессоре и выполнение делится на параллельные участки, которые задаются в исходном коде при помощи директив распараллеливания (например, одна из директив объявляет начало параллельного участка в коде программы). Внутри параллельного участка, процессоры выполняют одну программу, но с разными данными. Типичным примером является параллельный цикл DO, где различные процессоры обрабатывают отдельные части массива, задействованного в цикле. В конце цикла участки выполнения синхронизируются, после чего только один процессор продолжает работу, а остальные ждут. В настоящее время стандартным интерфейсом для многопроцессорной системы с разделяемой памятью является OpenMP . Он обычно реализован при помощи легковесных процессов, называемых потоками .

Комбинация уровней параллелизма

Современные компьютеры позволяют задействовать несколько параллельных режимов одновременно для достижения максимального общего эффекта. Программы, работающие с распределяемой памятью и использующие MPI , могут одновременно работать на наборе узлов. Каждый узел может являться компьютером с общей памятью и выполнять вычисления на нескольких процессорах параллельно с использованием OpenMP. Для достижения максимальной скорости одним процессором используются векторные команды SIMD (обычно генерируются автоматически компилятором) и суперскалярное выполнение (как правило, обрабатываются прозрачно самим процессором), такие как конвейер (pipelining) и использование нескольких параллельных функциональных блоков.

История

SPMD был предложен в 1984 году Фредерикой Дарема в IBM для высокопроизводительных параллельных машин, таких как RP3 (IBM Research Parallel Processor Prototype), в неопубликованном служебном письме. К концу 1980-х годов было много распределенных компьютеров с закрытыми библиотеками передачи сообщений. Первым стандартом SPMD был PVM. В настоящее время стандартом де-факто является MPI. Параллельные директивы Cray были прямым предшественником OpenMP.

Примечания

  1. . Дата обращения: 23 января 2013. Архивировано из 5 февраля 2013 года.
  2. F. Darema, SPMD model: past, present and future , Recent Advances в Parallel Virtual Machine и Message Passing Interface: 8th European PVM/MPI Users' Group Meeting, Santorini/Thera, Greece, September 23-26, 2001. Lecture Notes in Computer Science 2131, p. 1, 2001.
Источник —

Same as SPMD