Introducing
Your new presentation assistant.
Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.
Trending searches
- jeder Prozessor führt Scatteroperation aus
- jeder Prozessor führt Einzel-Broadcast aus
- jeder Prozessor führt Einzel-Akkumulation aus
(zeitkritische Abläufe) sind Situationen, in denen
- zwei oder mehr Prozesse gemeinsame Betriebsmittel nutzen
- Endergebnisse von zeitlicher Reihenfolge der Operationen abhängen
(critical section) ist der Teil ein Prozesses,
der auf gemeinsam benutzte Betriebsmittel zugreift
- 6 Befehle vektorisiert
-> 64 * 9 + 2 = 578 Befehle vorher
- führen gleiche Operation auf viele Daten aus
- Vektrorregister
- Vektorrechenwerke
- Rechenoperationen auf gesamtes Vektorregister
- Vektorlade- u. -speichereinheit
- Vorteil: schnelle Verarbeitung -> Pipelining
- Nachteil: Speicherladezeiten
Vektoranweisungen
unterstützende
Programmiersprachen
Vektorisierende
Compiler
- ein Prozessor schickt evtl. verschiedene Nachrichten an alle
- Empfangspuffer / Sendepuffer
- alle Prozessoren schicken Nachricht an einen Prozessor
- Elementweise Kombination durch Konkatination
- Informationsaustausch bei verteiltem Adressraum
-> benötigt Kommunikationsanweisungen
"Message-Passing-Programmierung"
- Sende- u. Empfangsoperationen als Paar
- Punkt-zu-Punkt-Kommunikation
- zusätzlich globale Kommunikationsoperationen
- im Folgenden:
- Netzwerk aus p Prozessoren
- Prozessoridentifikation über Prozessornummer
- ein Prozessor schickt gleiche Nachricht an alle anderen
- alle Prozessoren schicken Nachricht an einen Prozessor
- Elementweise Kombination durch Reduktionsoperation
- Nachrichtentransfer zwischen P[i] (Sender) und P[j] (Empfänger)
- Sender -> Sendeoperation
-> Sendepuffer mit Nachricht und Empfängernummer
- Empfänger -> Empfangsoperation
-> Empfangspuffer für Nachricht und Sendernummer
- Operationen nur paarweise
- bilden Grundlange jeder Kommunikationsbibliothek
Quellen:
1. SIMD-Verarbeitung
1.1 Vektorprozessoren
1.2 SIMD-Instruktionen
2. Datenverteilung für Felder
3. Informationsaustausch
3.1 Gemeinsame Variablen
3.2 Kommunikationsoperationen
3.3 Parallele Matrix-Vektor-Multiplikation
* = Variante der MAC-Operationen (Multiplier-Accumulator)
- d := a + b * c
-Verwendung in Digitalen Signalprozessoren (DSP) -> digitale Equalizer, MP3-Player, Radar, ...
- "Parallel Programming" 2012, Springer
T. Rauber, G. Rünger
- "Betriebssysteme" 2005, Pearson Studium
E. Ehses, L. Köhler, P. Riemer, H. Stenzel, F. Victor
- "Computer Architecture" 2011, Morgan Kaufmann
J.L. Hennessy, D.A. Patterson
- spaltenorientiert streifenweise
-> Spalten von A lokal für jeden Prozessor
- blockweise streifenweise
-> Spalten
-> berechnet Teillinearkombination
- Prozessor P[k] benötigt Block aus b
- nach der Berechnung
-> P[k] hat Vektor d[k] der Länge n
- Akkumulationsoperation mit Addition als Reduktion
- falls Ergebnis repliziert -> Einzel-Broadcast
- Prozessor berechnet Produkt (a[i],b)
- i = {1 ... n}
-> benötigt Zeile a[i] und Vektor b lokal
-> zeilenorientiere streifenweise Datenverteilung
- Prozessor P[k], k = 1 ... p, erhält Zeilen a[i] lokal
-> i = n / p · (k - 1) + 1 ... n / p · k
- Ergebnisvektor c danach blockweise verteilt
-> soll repliziert vorliegen, wie b
-> Multi-Broadcastoperation
- lokale Feld von Prozessors P[k] besitzt Zeile aus A:
- Berechnung der Linearkombination wird verteilt
-> p Prozessoren, m Spalten
-> jeder berechnet m/p Spaltenvektoren
- Berechnung der inneren Produkte wird verteilt
-> p Prozessoren, n Produkte
-> jeder berechnet n/p Skalarprodukte
- Feld der Länge n wird auf p Blöcke verteilt
- wenn n KEIN Vielfaches von p
-> letzte Block weniger Feldelemente
- Feldelemente werden der Reihe nach an die Prozessoren verteilt
- Feld v der Länge n
- Anzahl der Blöcke p
- Mischform aus blockweiser und zyklischer Verteilung
- Jeder Block hat eine vorgegebene Größe b, wobei b<n/p
- ist n kein Vielfaches von p, umfasst der letzte Block
weniger als b Feldelemente
- Blöcke werden in zyklischer Weise auf die Prozessoren verteilt
- Algorithmen/ Berechnungen oft auf Basis von Vektoren oder Matrizen
- ein-/ zwei-/ mehrdimensionale Felder als Datenstruktur in Programmen
- Aufteilung der Felder in Teilbereiche und
- Abbildung dieser Teilbereiche auf die zur Verfügung stehenden Prozessoren =
- mehrere Prozessoren
-> eigener Speicher
- Netzwerkzugriff
- gesamte Feld für alle Prozessoren
- Datenverteilung verhindert Konflikte
- A sei d-dimensionales Feld
- Aufteilung der Prozessoren in d-dimensionales Gitter
- Datenverteilung für A durch Verteilungsfunktion
- statt einzelne Feldelemente werden ganze Spalten (oder Zeilen) zu Blöcken
zusammengefasst
- Spalten (oder Zeilen) der Matrix werden in p gleichgroße Blöcke aufeinander
folgender Spalten (oder Zeilen) unterteilt
- bezieht beide Dimensionen des 2-dimensionalen Feldes ein
und teilt diese in quadratische oder rechteckige Teilstücke auf
- Anordnung der Prozessoren in 2-dimensionales Gitter (Prozessorgitter)
- einzelne Matrixelemente werden reihum den Prozessoren
in den Zeilen bzw. Spalten des Prozessorgitters zugeordnet
-> (zyklische Zuordnung in beiden Dimensionen)
- Anzahl Zeilen bzw. Spalten des Prozessorgitters bestimmt Anzahl
der Blöcke in den Zeilen bzw. Spalten der aufzuteilenden Matrix
- Block(i,j) für 1<= i <= p1 und 1<= j <= p2 enthält alle Matrixelemente (k,l) mit
- k=(i-1)*n1/p1+1,...,i* round(n1/p1)
- l=(j-1)* n2/p2 +1,...,j* round(n2/p2)
-> p1 und p2 sind Anzahl Zeilen bzw. Spalten des Prozessorgitters
- Block (i,j) wird dem Prozessor an der Position (i,j) zugeordnet
Elemente von A
Potenzmenge der Prozessoren
- statt einzelner Matrixelemente werden rechteckige
Blöcke der Größe b1 x b2 zyklisch über die Prozessoren verteilt