SPMD

SPMD (single program, multiple data - одна програма, багато потоків даних) — метод у комп’ютерних науках, який використовується для досягнення паралелізму; Він належить до підкатегорії MIMD.  Задача розділена і виконується одночасно на декількох процесорах, (задля отримання результату швидше). SPMD – це також найпоширеніший спосіб паралельного програмування.[1]Також це передумова для дослідження таких наукових концепцій, як активні повідомлення та спільна розподілена пам’ять.

SPMD порівняно з SIMD

У SPMD кілька автономних процесорів одночасно виконують одну і ту ж програму в незалежних пунктах, в  SIMD – ні. З SPMD задачі можуть бути виконані на звичайних процесорах; SIMD потребує векторних процесорів для маніпулювати потоками даних. Варто звернути увагу, що обидва методи не є взаємовиключними.

Розподілена пам'ять

Під SPMD зазвичай розуміється передача повідомлень програмування на обчислювальну архітектуру з розподіленою пам'яттю. Розподілена комп'ютерна пам'ять складається з набору незалежних комп'ютерів, які називаються вузлами. Кожен вузол починає власну програму і взаємодіє з іншими вузлами за допомогою надсилання та отримання повідомлення, що закликають надсилати/отримувати процедури для цієї задачі. Синхронізації бар'єр може також здійснюватися шляхом повідомлення. Повідомлення можуть бути відправлені за допомогою низки механізмів комунікацій, таких як TCP/IP через Ethernet або спеціалізованих високошвидкісних інтерфейсів, таких як Myrinet і Supercomputer Interconnect. Окремі частини програми реалізуються ідентичні обчислення на всіх вузлах.

В даний час, програмісти ізольовані від деталей передачі повідомлень через стандартні інтерфейси, типу PVM та MPI.

Розподілена пам'ять – це стиль програмування, який використовується на паралельних суперкомп'ютерах з доморощених кластерів  Beowulf та найбільших кластерів на Teragrid.

Спільна пам'ять

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

На відміну від SPMD, спільна багатопроцесорна пам'ять, також звана симетрична багатопроцесорна обробка або SMP, надає програмісту загальний простір пам'яті і можливість розпаралелити виконання при наявності програми що виконувалася б по-різному на різних процесорах. Програма починає виконуватися на одному процесорі, а розщеплюється виконання в паралельній області, яка запускається, коли паралельні директиви зустрічаються. В паралельній області, процесори виконують одну програму за різними даними. Типовий приклад паралельного циклу do, де різні процесори працюють на окремих частинах масивів, які беруть участь у циклі. В кінці циклу, виконання синхронізації продовжує тільки один процесор, а інші чекають. Поточний стандартний інтерфейс для багатопроцесорних загальної пам'яті заснований на технології OpenMP.

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

Сучасні комп'ютери дозволяють експлуатувати багато паралельних режимів одночасно для максимального комбінованого ефекту. Програма, що викорстовує розподілену пам'ять та MPI може працювати на колекцію вузлів. Кожен вузол може мати спільну комп'ютерну пам'ять і виконуватися паралельно на декількох процесорах з використанням OpenMP

Історія

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

Паралельні директиви Cray були прямимими попередниками OpenMP.

Примітки

  1. single program multiple data. www.nist.gov. Архів оригіналу за 21 вересня 2008. Процитовано 29 травня 2016.
  2. M. Auguin, F. Larbey, OPSILA : an advanced SIMD for numerical analysis and signal processing, in Microcomputers : developments in industry, business, and education / Ninth EUROMICRO Symposium on Microprocessing and Microprogramming, pp 311-318 Madrid, September 13–16, 1983
  3. F. Darema, SPMD model: past, present and future, Recent Advances in Parallel Virtual Machine and 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.