WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

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

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

SPMD против SIMD

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

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

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

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

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

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

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

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

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

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

История

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

Примечания

  1. single program multiple data. Проверено 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.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии