Введение
Вычислительная техника, используемая для достижения параллелизма.
In computing, single program, multiple data (SPMD) is a term that has been used to refer to computational models for exploiting parallelism where by multiple processors cooperate in the execution of a program in order to obtain results faster. The term SPMD was introduced in 1983 and was used to denote two different computational models:
by Michel Auguin (University of Nice Sophia Antipolis) and François Larbey (Thomson/Sintra), as a “fork and join” and data parallel approach where the parallel tasks (“single program”) are split up and run simultaneously in lockstep on multiple SIMD processors with different inputs, and
by Frederica Darema (IBM), where “all (processors) processes begin executing the same program but through synchronization directives self schedule themselves to execute different instructions and act on different data” and enabling MIMD parallelization of a given program, and is a more general approach than data parallel and more efficient than the fork and join for parallel execution on general purpose multiprocessors. The (IBM) SPMD is the most common style of parallel programming and can be considered a subcategory of MIMD in that it refers to MIMD execution of a given (“single”) program. It is also a prerequisite for research concepts such as active messages and distributed shared memory.
В вычислительной технике термин "одна программа – множество данных" (SPMD) используется для обозначения вычислительных моделей, позволяющих использовать параллелизм, при котором несколько процессоров совместно выполняют программу для более быстрого получения результатов. Термин SPMD был введен в 1983 году и использовался для обозначения двух различных вычислительных моделей:
In computing, single program, multiple data (SPMD) is a term that has been used to refer to computational models for exploiting parallelism where by multiple processors cooperate in the execution of a program in order to obtain results faster. The term SPMD was introduced in 1983 and was used to denote two different computational models:
by Michel Auguin (University of Nice Sophia Antipolis) and François Larbey (Thomson/Sintra), as a “fork and join” and data parallel approach where the parallel tasks (“single program”) are split up and run simultaneously in lockstep on multiple SIMD processors with different inputs, and
by Frederica Darema (IBM), where “all (processors) processes begin executing the same program but through synchronization directives self schedule themselves to execute different instructions and act on different data” and enabling MIMD parallelization of a given program, and is a more general approach than data parallel and more efficient than the fork and join for parallel execution on general purpose multiprocessors. The (IBM) SPMD is the most common style of parallel programming and can be considered a subcategory of MIMD in that it refers to MIMD execution of a given (“single”) program. It is also a prerequisite for research concepts such as active messages and distributed shared memory.
Мишелем Огуином (Университет Ниццы Софии Антиполис) и Франсуа Ларби (Thomson/Sintra) как подход, сочетающий "fork and join" и параллельную передачу данных, где параллельные задачи ("одна программа") разделяются и одновременно выполняются синхронно на нескольких SIMD-процессорах с разными входными данными, и
In computing, single program, multiple data (SPMD) is a term that has been used to refer to computational models for exploiting parallelism where by multiple processors cooperate in the execution of a program in order to obtain results faster. The term SPMD was introduced in 1983 and was used to denote two different computational models:
by Michel Auguin (University of Nice Sophia Antipolis) and François Larbey (Thomson/Sintra), as a “fork and join” and data parallel approach where the parallel tasks (“single program”) are split up and run simultaneously in lockstep on multiple SIMD processors with different inputs, and
by Frederica Darema (IBM), where “all (processors) processes begin executing the same program but through synchronization directives self schedule themselves to execute different instructions and act on different data” and enabling MIMD parallelization of a given program, and is a more general approach than data parallel and more efficient than the fork and join for parallel execution on general purpose multiprocessors. The (IBM) SPMD is the most common style of parallel programming and can be considered a subcategory of MIMD in that it refers to MIMD execution of a given (“single”) program. It is also a prerequisite for research concepts such as active messages and distributed shared memory.
Фредерикой Даремой (IBM), где "все процессоры начинают выполнять одну и ту же программу, но посредством директив синхронизации самостоятельно планируют выполнение различных инструкций и обработку различных данных", что обеспечивает MIMD-параллелизацию заданной программы и является более общим подходом, чем параллелизм данных, и более эффективным, чем "fork and join" для параллельного выполнения на многопроцессорных системах общего назначения. SPMD (IBM) – наиболее распространенный стиль параллельного программирования и может рассматриваться как подкатегория MIMD, поскольку он относится к MIMD-исполнению заданной ("одной") программы. Он также является основой для исследовательских концепций, таких как активные сообщения и распределенная общая память.
In computing, single program, multiple data (SPMD) is a term that has been used to refer to computational models for exploiting parallelism where by multiple processors cooperate in the execution of a program in order to obtain results faster. The term SPMD was introduced in 1983 and was used to denote two different computational models:
by Michel Auguin (University of Nice Sophia Antipolis) and François Larbey (Thomson/Sintra), as a “fork and join” and data parallel approach where the parallel tasks (“single program”) are split up and run simultaneously in lockstep on multiple SIMD processors with different inputs, and
by Frederica Darema (IBM), where “all (processors) processes begin executing the same program but through synchronization directives self schedule themselves to execute different instructions and act on different data” and enabling MIMD parallelization of a given program, and is a more general approach than data parallel and more efficient than the fork and join for parallel execution on general purpose multiprocessors. The (IBM) SPMD is the most common style of parallel programming and can be considered a subcategory of MIMD in that it refers to MIMD execution of a given (“single”) program. It is also a prerequisite for research concepts such as active messages and distributed shared memory.
SPMD против SIMD
При параллельном исполнении SPMD несколько автономных процессоров одновременно выполняют одну и ту же программу в независимых точках, а не синхронно, как это требуется в SIMD или SIMT при обработке различных данных. С помощью SPMD задачи могут выполняться на универсальных процессорах. В SIMD одна и та же операция (инструкция) применяется к множеству данных для обработки потоков данных (векторная обработка является разновидностью SIMD, где данные организованы в виде векторов). Другой класс процессоров – графические процессоры (GPU) – включает в себя параллельную обработку множества потоков SIMD. Важно отметить, что SPMD и SIMD не являются взаимоисключающими; параллельное исполнение SPMD может включать в себя SIMD, векторную обработку или подпроцессы с использованием GPU. SPMD использовался для параллельного программирования как систем с передачей сообщений, так и систем с общей памятью.
Распределенная память
В распределенных компьютерных архитектурах с разделяемой памятью реализации SPMD обычно используют программирование с передачей сообщений. Компьютер с разделяемой памятью состоит из набора взаимосвязанных независимых компьютеров, называемых узлами. Для параллельного выполнения каждый узел запускает собственную программу и взаимодействует с другими узлами посредством отправки и получения сообщений, используя для этого подпрограммы отправки/приема. Другие директивы параллелизации, такие как синхронизация барьером, также могут быть реализованы с помощью сообщений. Сообщения могут передаваться различными механизмами связи, такими как TCP/IP через Ethernet или специализированные высокоскоростные соединения, такие как Myrinet и Supercomputer Interconnect. В средах с разделяемой памятью последовательные участки программы могут быть реализованы путем идентичного вычисления последовательного участка на всех узлах, а не вычисления результата на одном узле и его отправки другим, если это повышает производительность за счет снижения накладных расходов на связь. В настоящее время программист изолирован от деталей передачи сообщений благодаря стандартным интерфейсам, таким как PVM и MPI. Разделяемая память – это стиль программирования, используемый на параллельных суперкомпьютерах, начиная от самодельных кластеров Beowulf и заканчивая крупнейшими кластерами Teragrid, а также на современных суперкомпьютерах на основе GPU.
Общая память
На машине с общей памятью (компьютер с несколькими взаимосвязанными процессорами, обращающимися к одному и тому же пространству памяти), обмен данными может быть реализован в контексте физически общей памяти или логически общей (но физически распределенной) памяти; помимо общей памяти, процессоры в компьютерной системе могут также включать локальную (или приватную) память. Для любого из этих контекстов синхронизация может быть обеспечена аппаратными примитивами (такими как "сравнить и заменить" или "вычесть и прибавить"). Для машин, не имеющих такой аппаратной поддержки, могут использоваться блокировки, а данные могут "обмениваться" между процессорами (или, в более общем смысле, процессами или потоками) путем помещения совместно используемых данных в область общей памяти. Когда аппаратное обеспечение не поддерживает общую память, упаковка данных в виде "сообщения" часто является наиболее эффективным способом программирования (логически) компьютеров с общей памятью с большим количеством процессоров, где физическая память локальна для процессоров и доступ к памяти другого процессора занимает больше времени. SPMD на машине с общей памятью может быть реализован с использованием стандартных процессов (тяжеловесных) или потоков (легковесных). Многопроцессорная архитектура с общей памятью (как симметричная многопроцессорная обработка, SMP, так и неравномерный доступ к памяти, NUMA) предоставляет программисту единое адресное пространство памяти и возможность параллелизации выполнения. В модели SPMD (IBM) взаимодействующие процессоры (или процессы) следуют различным путям в программе, используя параллельные директивы (директивы параллелизации и синхронизации, которые могут использовать операции "сравнить и заменить" и "вычесть и прибавить" над переменными синхронизации в общей памяти), и выполняют операции над данными в общей памяти ("общие данные"); процессоры (или процессы) также могут иметь доступ и выполнять операции над данными в своей локальной памяти ("приватные данные"). В отличие от подходов "fork" и "join", программа начинает выполняться на одном процессоре, а выполнение разделяется в параллельной области, которая запускается при встрече параллельных директив; в параллельной области процессоры выполняют параллельную задачу над различными данными. Типичным примером является параллельный цикл DO, в котором разные процессоры работают с отдельными частями массивов, участвующих в цикле. В конце цикла выполнение синхронизируется (с использованием мягких или жестких барьеров – "все процессы, участвующие в параллельных вычислениях, создаются в начале выполнения и остаются в существовании до конца", "(процессоры/процессы) выполняют различные инструкции и оперируют различными данными", "объем работы, который должен выполнить каждый процесс, распределяется динамически", то есть процессы "самостоятельно планируют выполнение различных инструкций и оперируют различными данными", таким образом, самостоятельно назначают себя для сотрудничества в выполнении последовательных и параллельных задач (а также репликации задач) в программе). Термин "процесс" использовался как обобщение термина "процессор" в том смысле, что на одном процессоре может выполняться несколько процессов (например, для использования большей степени параллелизма для повышения эффективности и балансировки нагрузки). Модель SPMD (IBM) была предложена Darema как подход, отличный и более эффективный, чем "fork" и "join", который использовали все остальные в сообществе в то время; она также более общая, чем просто "параллельная" вычислительная модель данных, и может включать в себя "fork&join" (как реализацию подкатегории). Изначальным контекстом SPMD (IBM) был компьютер RP3 (прототип параллельного процессора IBM Research с 512 процессорами), который поддерживал вычисления общего назначения как с распределенной, так и с (логически) общей памятью. Эффективность SPMD (IBM) была продемонстрирована для широкого класса приложений, став первым коммерческим продуктом для параллельного программирования, и нашла отражение в MPI (с 1991 года и далее), OpenMP (с 1997 года и далее) и других средах, которые приняли и ссылаются на вычислительную модель SPMD (IBM). К концу 1980-х годов существовало множество распределенных компьютеров с проприетарными библиотеками передачи сообщений. Первым стандартом SPMD был PVM. В настоящее время де-факто стандартом является MPI. Параллельные директивы Cray были прямым предшественником OpenMP.