Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В вычислении , SPMD ( одна программа, множество потоков данных ) является метод , используемый для достижения параллелизма ; это подкатегория MIMD . Задачи разделяются и выполняются одновременно на нескольких процессорах с разными входными данными, чтобы быстрее получать результаты. SPMD - наиболее распространенный стиль параллельного программирования. [1] [ неудачная проверка ] Это также предварительное условие для таких исследовательских концепций, как активные сообщения и распределенная разделяемая память .

SPMD против SIMD [ править ]

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

Распределенная память [ править ]

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

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

Распределенная память - это стиль программирования, используемый на параллельных суперкомпьютерах, от собственных кластеров Беовульфа до самых больших кластеров на Терагрид .

Общая память [ править ]

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

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

Сочетание уровней параллелизма [ править ]

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

История [ править ]

SPMD был впервые предложен в 1983 году Мишелем Огеном (Университет Ниццы, София-Антиполис) и Франсуа Ларби (Томсон / Синтра) в параллельном компьютере OPSILA [2], а затем в 1984 году Фредерикой Даремой из IBM для высокопараллельных машин, таких как RP3 ( прототип IBM Research Parallel Processor Prototype) в неопубликованной служебной записке IBM. [3] К концу 1980-х было много распределенных компьютеров с проприетарными библиотеками передачи сообщений. Первым стандартом SPMD был PVM . Текущий стандарт де-факто - MPI .

В Cray параллельные директивы были прямым предшественником OpenMP .

Ссылки [ править ]

  1. ^ [1]
  2. ^ М. Auguin, Ф. Larbey, OPSILA: продвинутый SIMD для численного анализа и обработки сигналов, в микрокомпьютерах: развитие в промышленности, бизнесе и образование / Девятый EUROMICRO симпозиум по микропроцессорному и микропрограммированию, С. 311-318 Мадрид, сентябрь 13- 16 августа 1983 г.
  3. ^ Ф. Дарема, Модель SPMD: прошлое, настоящее и будущее , Последние достижения в области параллельных виртуальных машин и интерфейса передачи сообщений: 8-е собрание европейской группы пользователей PVM / MPI, Санторини / Тера, Греция, 23–26 сентября 2001 г. Лекция in Computer Science 2131, p. 1, 2001.

Внешние ссылки [ править ]

  • Параллельное управление заданиями и передача сообщений
  • Однопрограммный поток нескольких данных
  • СПМД
  • Программирование с распределенной памятью