Одна программа, несколько данных
В этой статье отсутствует информация о графических процессорах. ( ноябрь 2019 г. ) |
В вычислениях одна программа , несколько данных ( SPMD ) — это термин, который использовался для обозначения вычислительных моделей использования параллелизма , при котором несколько процессоров взаимодействуют при выполнении программы для более быстрого получения результатов.
Термин SPMD был введен в 1983 году и использовался для обозначения двух разных вычислительных моделей:
- Мишель Оген (Университет Ниццы София-Антиполис) и Франсуа Ларбей (Томсон/Синтра), [1] [2] [3] как подход « разветвление и объединение » и параллельные данные, при котором параллельные задачи («одна программа») разделяются и выполняются одновременно синхронно на нескольких SIMD-процессорах с разными входами, и
- Фредерика Дарема (IBM), [4] [5] [6] где « (процессоры) все процессы начинают выполнять одну и ту же программу... но посредством директив синхронизации... самопланируют себя для выполнения разных инструкций и действий с разными данными » и позволяют распараллеливать MIMD данной программы, и является более общим подход, чем параллелизм данных , и более эффективен, чем метод fork-and-join, для параллельного выполнения на мультипроцессорах общего назначения.
(IBM) SPMD — это наиболее распространенный стиль параллельного программирования, который можно рассматривать как подкатегорию MIMD, поскольку он относится к MIMD-выполнению заданной («единственной») программы. [7] Это также является предпосылкой для исследовательских концепций, таких как активные сообщения и распределенная общая память .
Таксономия Флинна |
---|
Единый поток данных |
Несколько потоков данных |
Подкатегории SIMD [8] |
См. также |
СПМД против SIMD
[ редактировать ]При параллельном выполнении SPMD несколько автономных процессоров одновременно выполняют одну и ту же программу в независимых точках, а не в синхронном режиме , который SIMD или SIMT навязывают различным данным. С помощью SPMD задачи можно выполнять на процессорах общего назначения . В SIMD одна и та же операция (инструкция) применяется к нескольким данным для управления потоками данных (версия SIMD — это векторная обработка , при которой данные организованы как векторы). Другой класс процессоров, графические процессоры, обеспечивает обработку нескольких потоков SIMD. Обратите внимание, что SPMD и SIMD не являются взаимоисключающими; Параллельное выполнение SPMD может включать SIMD, векторную обработку или подобработку на графическом процессоре. SPMD использовался для параллельного программирования машинной архитектуры как с передачей сообщений, так и с общей памятью.
Распределенная память
[ редактировать ]В компьютерных архитектурах с распределенной памятью реализации SPMD обычно используют передачи сообщений программирование . Компьютер с распределенной памятью состоит из набора взаимосвязанных независимых компьютеров, называемых узлами. Для параллельного выполнения каждый узел запускает свою собственную программу и взаимодействует с другими узлами, отправляя и получая сообщения, вызывая для этой цели процедуры отправки/получения. Другие директивы распараллеливания, такие как Barrier синхронизация , также могут быть реализованы посредством сообщений. Сообщения могут отправляться с помощью ряда механизмов связи, таких как TCP/IP через Ethernet или специализированных высокоскоростных межсоединений, таких как Myrinet и Supercomputer Interconnect. Для сред с распределенной памятью последовательные разделы программы могут быть реализованы путем идентичного вычисления последовательного раздела на всех узлах, а не путем вычисления результата на одном узле и отправки его другим, если это повышает производительность за счет снижения накладных расходов на связь.
В настоящее время программист изолирован от деталей передачи сообщений с помощью стандартных интерфейсов, таких как PVM и MPI .
Распределенная память — это стиль программирования, используемый на параллельных суперкомпьютерах, от отечественных кластеров Beowulf до крупнейших кластеров Teragrid , а также на современных графических процессоров суперкомпьютерах на базе .
Общая память
[ редактировать ]На машине с общей памятью (компьютер с несколькими взаимосвязанными процессорами , имеющими доступ к одному и тому же пространству памяти) совместное использование может быть реализовано в контексте либо физически общей памяти, либо логически общей (но физически распределенной) памяти; Помимо общей памяти, процессоры компьютерной системы также могут включать в себя локальную (или частную) память. Для любого из этих контекстов синхронизация может быть включена с помощью аппаратных примитивов (таких как сравнение и замена или выборка и добавление ). Для машин, которые не имеют такой аппаратной поддержки, можно использовать блокировки и «обменять данные». » между процессорами (или, в более общем смысле, процессами или потоками ) путем размещения разделяемых данных в области общей памяти. Когда оборудование не поддерживает разделяемую память, упаковка данных в виде «сообщения» часто является наиболее эффективным способом программирования ( логически) компьютеры с общей памятью с большим количеством процессоров, где физическая память является локальной для процессоров и доступ к памяти другого процессора занимает больше времени. SPMD на машине с общей памятью может быть реализован с помощью стандартных процессов (тяжеловесных) или потоков (облегченных).
с общей памятью Многопроцессорная обработка (как симметричная многопроцессорная обработка , SMP, так и неоднородный доступ к памяти , NUMA) предоставляет программисту общее пространство памяти и возможность распараллеливания выполнения. В модели SPMD (IBM) взаимодействующие процессоры (или процессы) проходят разные пути в программе, используя параллельные директивы ( директивы распараллеливания и синхронизации ), которые могут использовать операции сравнения и замены, а также операции выборки и сложения над переменными синхронизации общей памяти. ) и выполнять операции с данными в общей памяти («общие данные»); процессоры (или процессы) также могут иметь доступ и выполнять операции с данными в своей локальной памяти («частные данные»). Напротив, при использовании подходов fork-and-join программа начинает выполнение на одном процессоре, а выполнение разделяется на параллельную область, которая запускается при обнаружении параллельных директив; в параллельной области процессоры выполняют параллельную задачу с разными данными. Типичным примером является параллельный цикл DO, где разные процессоры работают над отдельными частями массивов, участвующих в цикле. В конце цикла выполнение синхронизируется (с мягкими или жесткими барьерами). [6] ), а процессоры (процессы) переходят к следующему доступному разделу программы для выполнения. (IBM) SPMD был реализован в текущем стандартном интерфейсе многопроцессорной обработки с общей памятью OpenMP , который использует многопоточность, обычно реализуемую облегченными процессами, называемыми потоками .
Комбинирование уровней параллелизма
[ редактировать ]Современные компьютеры позволяют одновременно использовать множество параллельных режимов для достижения максимального совокупного эффекта. Программа с распределенной памятью, использующая MPI, может работать на наборе узлов. Каждый узел может представлять собой компьютер с общей памятью и выполняться параллельно на нескольких процессорах с использованием OpenMP. В каждом ЦП векторные инструкции SIMD (обычно генерируемые автоматически компилятором) и выполнение суперскалярных инструкций (обычно прозрачно обрабатываемые самим ЦП), такие как конвейерная обработка и использование нескольких параллельных функциональных блоков, используются для максимальной скорости одного ЦП.
История
[ редактировать ]Аббревиатура SPMD, означающая «одна программа, множественные данные», использовалась для описания двух различных вычислительных моделей для использования параллельных вычислений, и это связано с тем, что оба термина являются естественным расширением таксономии Флинна. [7] Две соответствующие группы исследователей не знали об использовании друг другом термина SPMD для независимого описания различных моделей параллельного программирования.
Термин SPMD был впервые предложен в 1983 году Мишелем Огеном (Университет Ниццы, София-Антиполис) и Франсуа Ларби (Томсон/Синтра) в контексте параллельного компьютера OPSILA, а также в контексте параллельных вычислений по принципу разветвления и объединения и обработки данных. модельный подход. [1] Этот компьютер состоял из ведущего (процессора-контроллера) и SIMD-процессоров (или режима векторного процессора, как предложил Флинн). В модели SPMD Огена одна и та же (параллельная) задача (« одна и та же программа ») выполняется на разных (SIMD) процессорах (« работающих в синхронном режиме »). [1] действие на часть («срез») вектора данных. В частности, в своей статье 1985 г. [2] (и аналогично в [3] [1] ) указано: « Мы рассматриваем режим работы SPMD (Одна программа, несколько данных). Этот режим позволяет одновременно выполнять одну и ту же задачу (по одной на процессор), но предотвращает обмен данными между процессорами. Обмен данными осуществляется только в режиме SIMD посредством векторных присвоений. Мы предполагаем, что синхронизация сводится к переключениям (sic) между режимами работы SIMD и SPMD (sic) с использованием глобальных примитивов fork-join ».
Примерно в тот же период (конец 1983 - начало 1984 года) термин SPMD был предложен Фредерикой Дарема (в то время работавшей в IBM и входившей в группу RP3) для определения другой предложенной ею вычислительной модели SMPD: [6] [5] [4] как модель программирования, которая за прошедшие годы была применена к широкому спектру высокопроизводительных компьютеров общего назначения (включая RP3 - 512-процессорный прототип параллельного процессора IBM Research) и привела к нынешним стандартам параллельных вычислений. Модель программирования (IBM) SPMD предполагает наличие множества процессоров, которые работают совместно, выполняя одну и ту же программу, но могут использовать разные пути выполнения программы на основе директив распараллеливания, встроенных в программу; и, в частности, как указано в [6] [5] [4] [9] [10] « все процессы, участвующие в параллельных вычислениях, создаются в начале выполнения и продолжают существовать до конца », (процессоры/процессы) « выполняют разные инструкции и действуют с разными данными », « задание (работа) должно быть выполнено ». выполняемые каждым процессом, распределяются динамически », то есть процессы « самопланируют себя для выполнения разных инструкций и действий с разными данными », таким образом, самоназначаются для совместной работы при выполнении последовательных и параллельных задач (а также репликации задач). в программе. Понятие «процесс» использовалось как обобщение термина «процессор» в том смысле, что на процессоре может выполняться несколько процессов (например, для использования большей степени параллелизма для большей эффективности и балансировки нагрузки). Модель (IBM) SPMD была предложена Даремой как подход, отличный и более эффективный, чем подход «разветвление и объединение», который применялся всеми остальными членами сообщества в то время; она также является более общей, чем просто вычислительная модель с «параллельными данными», и может включать в себя fork&join (в качестве реализации подкатегории). Исходным контекстом SPMD (IBM) был компьютер RP3 (прототип параллельного процессора IBM Research с 512 процессорами), который поддерживал вычисления общего назначения как с распределенной, так и (логически) разделяемой памятью. [9] Модель (IBM) SPMD была реализована Даремой и коллегами из IBM в EPEX (Среда для параллельного выполнения), одном из первых прототипов сред программирования. [6] [5] [4] [9] [10] [11] Эффективность (IBM) SPMD была продемонстрирована для широкого класса приложений. [9] [4] и в 1988 году был реализован в IBM FORTRAN, [12] первый продукт в области параллельного программирования; а также в MPI (1991 г. и позже), OpenMP (1997 г. и позже) и других средах, которые приняли и цитируют вычислительную модель (IBM) SPMD.
К концу 1980-х годов существовало множество распределенных компьютеров с собственными библиотеками передачи сообщений. Первым стандартом SPMD был PVM . Текущий стандарт де-факто — MPI .
Параллельные директивы Cray были прямыми предшественниками OpenMP .
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д М. Оген, Ф. Ларби (1983). «OPSILA: расширенный SIMD для численного анализа и обработки сигналов». Микрокомпьютеры: достижения в промышленности, бизнесе и образовании / Девятый симпозиум EUROMICRO по микропроцессорам и микропрограммированию, стр. 311–318 Мадрид, 13–16 сентября 1983 г.
- ^ Перейти обратно: а б М. Оген, Ф. Лабри (1985). «Многопроцессорная SIMD-машина: OPSILA». К. Вальдшмидт и Б. Мирхауг Эдс, @EUROMICRO, 1985, Elsevier Science Publishers BV – Северная Голландия .
- ^ Перейти обратно: а б Оген, М.; Боэри, Ф.; Далбан, Япония; Винсент-Карфур, А. (1987). «Опыт использования многопроцессорной архитектуры SIMD/SPMD». Многопроцессорность и микропрограммирование . 21 (1–5): 171–178. дои : 10.1016/0165-6074(87)90034-2 .
- ^ Перейти обратно: а б с д и Дарема, Фредерика (2001). «Модель SPMD: прошлое, настоящее и будущее, последние достижения в области параллельных виртуальных машин и интерфейса передачи сообщений». 8-е собрание европейской группы пользователей PVM/MPI, Санторини/Тера, Греция, 23–26 сентября 2001 г. Конспекты лекций по информатике 2131 .
- ^ Перейти обратно: а б с д Ф. Дарема-Роджерс, Д.А. Джордж, В.А. Нортон и Г.Ф. Пфистер (1985). «Параллельная среда виртуальной машины». IBM/RC11225 (23.01.85) и IBM/RC11381 (19.09.85) .
{{cite journal}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Перейти обратно: а б с д и Дарема, Ф.; Джордж, округ Колумбия; Нортон, Вирджиния; Пфистер, Г. Ф. (1988). «Вычислительная модель с одной программой и несколькими данными для EPEX/FORTRAN». Журнал параллельных вычислений . 7 :11–24. дои : 10.1016/0167-8191(88)90094-4 .
- ^ Перейти обратно: а б Флинн, Майкл (1972). «Некоторые компьютерные организации и их эффективность» (PDF) . Транзакции IEEE на компьютерах . С-21 (9): 948–960. дои : 10.1109/TC.1972.5009071 . S2CID 18573685 .
- ^ Флинн, Майкл Дж. (сентябрь 1972 г.). «Некоторые компьютерные организации и их эффективность» (PDF) . Транзакции IEEE на компьютерах . С-21 (9): 948–960. дои : 10.1109/TC.1972.5009071 .
- ^ Перейти обратно: а б с д Дарема, Фредерика (1987). «Среда приложений для прототипа параллельного процессора IBM Research (RP3)». IBMRC12627 (27 марта 1987 г.) и в материалах 1-й Международной конференции по суперкомпьютерам (ICS'87) Springer-Verlag (1987) .
- ^ Перейти обратно: а б Дарема, Фредерика (1988). «Разработка параллельных приложений для систем с общей памятью». IBM/RC12229 (1986) и в «Параллельных системах и вычислениях», Дж. Пол и Г.С. Алмаси Эдс, Elsevier Science Publishers BV (Северная Голландия), 1988 .
- ^ Дж. М. Стоун, Ф. Дарема-Роджерс, В. А. Нортон, Г. Ф. Пфистер (1985). «Введение в препроцессор VM/EPEX и справочник». IBM/RC11407 (30.09.85) и IBM/RC11408 (30.09.85) .
{{cite journal}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Туми, Эл Джей; Плачи, ЕС; Скарборо, Род-Джеймс; Сахулка, Р.Дж.; Шоу, Дж. Ф.; Шеннон, AW (1988). «IBM параллельный FORTRAN». Системный журнал IBM . 27 (4): 416–435. дои : 10.1147/sj.274.0416 .