close

SPMD

Zur Navigation gehen Zur Suche gehen

Beim Rechnen ist SPMD (Single Program, Multiple Data) eine Technik, die verwendet wird, um Parallelität zu erreichen; als eine Unterkategorie von MIMD angesehen . Aufgaben werden getrennt und gleichzeitig auf mehreren Prozessoren mit unterschiedlichen Eingaben ausgeführt, um schneller Ergebnisse zu erzielen. SPMD ist der am weitesten verbreitete Stil der parallelen Programmierung. [ 1 ] Es ist auch eine Voraussetzung für investigative Definitionen wie Active Messages und Distributed Shared Memory.

Flynns Taxonomie
  eine Anweisung Mehrere Anweisungen
Eine Daten SISD MISD
Mehrere Daten SIMD MIDM


SPMD vs. SIMD

In SPMD führen mehrere autonome Prozessoren gleichzeitig dasselbe Programm an unabhängigen Punkten aus, im Gegensatz zu dem Lockstep, den SIMD verschiedenen Daten auferlegt. Mit SPMD können Tasks auf Allzweck- CPUs ausgeführt werden. SIMD erfordert einen Vektor von Prozessoren , um den Datenstrom zu manipulieren. Beachten Sie, dass sich die beiden Techniken nicht gegenseitig ausschließen.

Verteilter Speicher

SPMD bezieht sich normalerweise auf die Nachrichtenübermittlungsprogrammierung auf Computerarchitekturen mit verteiltem Speicher. Ein Computer mit verteiltem Speicher besteht aus einer Sammlung unabhängiger Computer, die als Knoten bezeichnet werden. Jeder Knoten startet sein eigenes Programm und kommuniziert mit den anderen Knoten, indem er Nachrichten sendet und empfängt, indem er Sende-/Empfangsroutinen verwendet, die für diesen Zweck entwickelt wurden. Außerdem muss eine Barrierensynchronisierung unter Verwendung von Nachrichten implementiert werden. Nachrichten können über eine Reihe von Kommunikationsmechanismen gesendet werden, wie z. B. TCP/IP über Ethernet oder insbesondere eine Hochgeschwindigkeitsverbindung wie Myrinet und Supercomputer Interconnect. Sequentielle Abschnitte eines Programms werden durch identische Berechnungen an allen Knoten implementiert, im Gegensatz zur Berechnung eines Ergebnisses an einem bestimmten Knoten und dessen Übermittlung an den Rest. Heutzutage ist der Programmierer durch die Verwendung von Standardschnittstellen wie PVM und MPI von den Details der Nachrichtenübermittlung isoliert . Verteilter Speicher ist der Programmierstil, der in parallelen Supercomputern zur Selbstforschung in Beowulf - Clustern verwendet wird, die für die größeren Gruppen des Teragrid bestimmt sind.

Shared Memory

Auf einer Shared-Memory -Maschine (ein Computer mit vielen CPUs , die auf denselben Speicherplatz zugreifen) können Nachrichten gesendet werden, indem ihr Inhalt über einen Shared-Memory-Bereich abgelegt wird. Dies ist häufig die effizienteste Methode zum Programmieren von gemeinsam genutztem Speicher auf einem Computer mit einer großen Anzahl von Prozessoren, insbesondere auf der NUMA -Maschine , wo der Speicher für die Prozessoren lokal ist und der Zugriff auf den Speicher eines anderen Prozessors teuer ist. SPMD auf einer Shared-Memory-Maschine wird normalerweise durch Standard-(Hochleistungs-) Prozesse implementiert. Im Gegensatz zu SPMD bietet Shared Memory Multiprocessing, auch Symmetric Multiprocessing oder SMP genannt , dem Programmierer einen gemeinsamen Shared Memory Space und die Möglichkeit, die Ausführung eines Programms zu parallelisieren, sodass es auf verschiedenen Prozessoren unterschiedliche Pfade nehmen kann. Das Programm beginnt mit der Ausführung auf einem Prozessor und teilt sich beim Erreichen einer parallelen Region auf, die beginnt, wenn die parallelen Anweisungen gefunden werden. In einer parallelen Region führen die Prozessoren ein einziges Programm auf unterschiedlichen Daten aus. Ein typisches Beispiel ist die parallele DO-Schleife, bei der verschiedene Prozessoren an verschiedenen Teilen des an der Schleife beteiligten Arrays arbeiten. Am Ende des Zyklus ist die Ausführung synchronisiert, nur ein einzelner Prozessor fährt fort und die anderen warten. Die aktuelle Schnittstelle für Shared-Memory-Multiprocessing ist OpenMP , das normalerweise von leichtgewichtigen Prozessen implementiert wird, die als Threads bezeichnet werden .

Kombination von Parallelitätsebenen

Heutige Computer ermöglichen die gleichzeitige Nutzung mehrerer paralleler Modi für eine maximale kombinierte Wirkung. Ein Programm mit verteiltem Speicher, das MPI verwendet, kann auf einer Gruppe von Knoten ausgeführt werden. Jeder Knoten muss ein Shared-Memory-Computer sein, der parallel auf mehreren CPUs mit OpenMP läuft. Innerhalb jeder CPU werden Vektor-SIMD-Befehle (normalerweise automatisch vom Compiler generiert) und superskalare Befehlsausführung (normalerweise transparent von der CPU selbst gehandhabt), wie Pipelining und die Verwendung mehrerer paralleler Funktionseinheiten, verwendet, um die maximale Geschwindigkeit zu erreichen von die einzelne CPU.

Geschichte

SPMD wurde erstmals 1983 von Michel Auguin (Nice Sophia-Antipolis University) und François Larbey (Thomson/Sintra) im Parallelcomputer OPSILA [ 2 ] vorgeschlagen und das nächste 1984 von Frederica Darema von IBM für hochparallele Maschinen, wie z RP3 (IBM Parallel Processor Prototype Research), in einem unveröffentlichten IBM Memo. [ 3 ] In den späten 1980er Jahren gab es viele verteilte Computer mit eigenen Bibliotheken für die Nachrichtenübermittlung. Der erste SPMD-Standard war PVM . Der aktuelle Standard ist MPI . Cray-Paralleldirektiven waren ein direkter Vorläufer von OpenMP .

Referenzen

  1. [1]
  2. M. Auguin, F. Larbey, OPSILA: an advanced SIMD for numerische analysis and signal processing, in Microcomputers: developments in industry, business, and education / Ninth EUROMICRO Symposium on Microprocessing and Microprogramming, S. 311-318 Madrid, 13. September- 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, Griechenland, 23.–26. September 2001. Vorlesungsunterlagen in Informatik 2131, p. 1, 2001.

Externe Links

Siehe auch