Parallele Programmierung und Parallele Algorithmen: Matrix-Vektor-Multiplikation
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation Serieller Algorithmus Parallelisieren: Daten-Dekomposition Parallele Matrix-Vektor-Multiplikations-Algorithmen Zeilenweise Dekomposition Spaltenweise Dekomposition Blockweise Dekomposition Benchmarking Fazit
Motivation Matrix-Vektor-Multiplikation: Kernoperation in vielen Berechnungen In unterschiedlichsten Anwendungsgebieten Naturwissenschaften, Wirtschaft, Computergrafik, … Hohe Bedeutung & Häufigkeit Parallele Datenverarbeitung: Mehrkernprozessoren bereits im privaten Sektor etabliert Gegenwart & Zukunft Parallele Matrix-Vektor-Multiplikation Höhere Leistung & Effizienz als serieller Ablauf
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation Serieller Algorithmus Parallelisieren: Daten-Dekomposition Parallele Matrix-Vektor-Multiplikations-Algorithmen Zeilenweise Dekomposition Spaltenweise Dekomposition Blockweise Dekomposition Benchmarking Fazit
Grundlagen: Serielle Matrix-Vektor-Multiplikation (1/2) Matrix-Vektor-Multiplikation: A ∙ x = y Beispiel: Ablauf: Folge von Skalarprodukten von Vektor x mit Zeilenvektoren von A Vektor x m x n Matrix A Vektor y m n
Grundlagen: Serielle Matrix-Vektor-Multiplikation (2/2) Zeitkomplexität: Skalarprodukt von zwei Vektoren der Länge n: n Multiplikationen n-1 Additionen Θ(n) Serielle Matrix-Vektor-Multiplikation: m Skalarprodukte Θ(m·n), für m = n: Θ(n2)
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation Serieller Algorithmus Parallelisieren: Daten-Dekomposition Parallele Matrix-Vektor-Multiplikations-Algorithmen Zeilenweise Dekomposition Spaltenweise Dekomposition Blockweise Dekomposition Benchmarking Fazit
Grundlagen: Daten-Dekomposition beim Parallelisieren (1/2) Parallelisieren der Matrix-Vektor-Multiplikation Dekomposition von m x n Matrix A (und Vektor x) auf p Prozesse Beispiele für p = 4: Bestimmt Anzahl benötigter Kommunikations- und Rechenoperationen Schlüsselentscheidung Zeilenweise Dekomposition Spaltenweise Dekomposition Blockweise Dekomposition
Grundlagen: Daten-Dekomposition beim Parallelisieren (2/2) Möglichst ausgeglichene Dekomposition hohe Leistung & Effizienz Aufteilung von Matrix A in Teilstücke mit: Zeilenweise: oder benachbarten Zeilen Spaltenweise: oder benachbarten Spalten Blockweise: zwischen und großen Matrixblöcken
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation Serieller Algorithmus Parallelisieren: Daten-Dekomposition Parallele Matrix-Vektor-Multiplikations-Algorithmen Zeilenweise Dekomposition Spaltenweise Dekomposition Blockweise Dekomposition Benchmarking Fazit
Parallele Algorithmen: Zeilenweise Dekomposition Algorithmus Jeder Prozess erhält: Zusammenhängende Zeilen der Matrix A Kopie des Vektors x Hauptschritte des Algorithmus: x 1) Skalarprodukt- berechnung 1. Zeile von A x 1. Zeile von A y1 Prozess 1 x 1. Zeile von A y Prozess 1 2) All-gather- Kommunikation Prozess 1
Parallele Algorithmen: Zeilenweise Dekomposition Implementierung (1/2) Implementierung nach Quinn(2003): Hauptschritte:
Parallele Algorithmen: Zeilenweise Dekomposition Implementierung (2/2) Blockvektor replizieren: 1) Gemischte xfer Arrays erzeugen 2) All-gather-Kommunikation
Parallele Algorithmen: Zeilenweise Dekomposition Analyse (1/2) Zeitkomplexität (unter der Annahme m = n): Kommunikationskomplexität: All-gather-Kommunikation (in einem Hypercube-Netzwerk ) Jeder Prozess sendet Nachrichten (durch paarweisen Datenaustausch zwischen den Prozessen) Elemente je Nachricht nehmen zu (in Schritt i: Elemente) Elemente insgesamt
Parallele Algorithmen: Zeilenweise Dekomposition Analyse (2/2) Berechnungskomplexität: Je Prozess höchstens Zeilen Je Zeile eine Skalarproduktberechnung mit Θ(n) Gesamtkomplexität: Algorithmus ist nicht sehr gut skalierbar!
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation Serieller Algorithmus Parallelisieren: Daten-Dekomposition Parallele Matrix-Vektor-Multiplikations-Algorithmen Zeilenweise Dekomposition Spaltenweise Dekomposition Blockweise Dekomposition Benchmarking Fazit
Parallele Algorithmen: Spaltenweise Dekomposition Algorithmus Jeder Prozess erhält: Zusammenhängende Spalten der Matrix A Zusammenhängende Elemente des Vektors x Hauptschritte des Algorithmus: 1) Teilskalarprodukt- berechnung 1. Spalte von A x1 Teilskalar- produkte 1. Spalte von A 2) All-to-all- Austausch Prozess 1 x1 Summanden von y1 1. Spalte von A x1 Prozess 1 1. Spalte von A y1 Prozess 1 3) Teil- ergebnisse summieren x1 Prozess 1
Parallele Algorithmen: Spaltenweise Dekomposition Implementierung (1/2) Implementierung nach Quinn(2003): Hauptschritte:
Parallele Algorithmen: Spaltenweise Dekomposition Implementierung (2/2) Teilskalarproduktergebnisse verteilen: 1) Gemischte xfer Arrays erzeugen ( Senden) 2) Gleichförmige xfer Arrays erzeugen ( Empfangen) Wie gemischte xfer Arrays, aber mit gleichen Count Array-Einträgen 3) All-to-all-Kommunikation
Parallele Algorithmen: Spaltenweise Dekomposition Analyse (1/2) Zeitkomplexität (unter der Annahme m = n): Kommunikationskomplexität: All-to-all-Kommunikation Jeder Prozess sendet Nachricht an anderen Prozess p –1 Nachrichten insgesamt Jeder Prozess erhält nur die von ihm benötigten Elemente maximal n Elemente insgesamt
Parallele Algorithmen: Spaltenweise Dekomposition Analyse (2/2) Berechnungskomplexität: Je Prozess höchstens Spalten mit je n Einträgen Je Spalteneintrag Multiplikation mit Vektorelement Gesamtkomplexität: Algorithmus ist nicht sehr gut skalierbar!
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation Serieller Algorithmus Parallelisieren: Daten-Dekomposition Parallele Matrix-Vektor-Multiplikations-Algorithmen Zeilenweise Dekomposition Spaltenweise Dekomposition Blockweise Dekomposition Benchmarking Fazit
Parallele Algorithmen: Blockweise Dekomposition Algorithmus Jeder Prozess erhält: Zusammenhängende Elementblöcke der Matrix A Zusammenhängende Elemente des Vektors x Hauptschritte des Algorithmus: 1) Vektor x umver- teilen x A xi xi ai,j ai,j 2) Matrix-Vektor- Multiplikation Teilskalarproduktergebnisse y 3) Summen- Reduzierung
Parallele Algorithmen: Blockweise Dekomposition Implementierung (1/2) Implementierung nach Quinn(2003): Hauptschritte:
Parallele Algorithmen: Blockweise Dekomposition Implementierung (2/2) Vektor umverteilen (für quadratisches p):
Parallele Algorithmen: Blockweise Dekomposition Analyse (1/2) Zeitkomplexität (unter den Annahmen m = n und p ist quadratisch): Kommunikationskomplexität: Vektor x umverteilen & Summen-Reduzierung: Jeder Prozess der 1. Spalte sendet Vektorblock ( Elemente) an 1. Zeile-Prozess Spaltenverteilung & Summen-Reduzierung: je
Parallele Algorithmen: Blockweise Dekomposition Analyse (2/2) Berechnungskomplexität: Je Prozess höchstens Matrixelemente Je Element Multiplikation mit Vektorelement Gesamtkomplexität: Algorithmus ist besser skalierbar!
Parallele Algorithmen: Vergleichsüberblick Analysevergleich der drei Algorithmen: Serieller Algorithmus: Θ(n2) Blockweise Dekomposition liefert besten Algorithmus Zeilenweise Spaltenweise Blockweise Zeit-komplexität nicht gut skalierbar besser skalierbar
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation Serieller Algorithmus Parallelisieren: Daten-Dekomposition Parallele Matrix-Vektor-Multiplikations-Algorithmen Zeilenweise Dekomposition Spaltenweise Dekomposition Blockweise Dekomposition Benchmarking Fazit
Benchmarking-Werte nach Quinn(2003) Benchmarking nach Quinn(2003): Cluster mit 450 MHz Pentium II Prozessoren 1.000 x 1.000 Matrix, 100 Durchläufe Speedupergebnisse: Speedup Prozessoren
Eigene Benchmarking-Werte Eigenes Benchmarking: Cluster mit Dual Quad Core Twin Servern mit je zwei 2,1 GHz Quad Core AMD Opteron CPUs 10.000 x 10.000 Matrix, 50 Durchläufe Speedupergebnisse: Speedup Prozessoren
Benchmarking-Vergleich Quinn(2003) Eigene Werte Beste Implementierung Blockweise Dekomposition Zeilen- und blockweise Dekomposition Schlechteste Implementierung Zeilen- und spaltenweise Dekomposition Spaltenweise Dekomposition Mögliche Erklärungen: Anzahl Prozessoren für neue Hardware nicht groß genug Messfehler
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation Serieller Algorithmus Parallelisieren: Daten-Dekomposition Parallele Matrix-Vektor-Multiplikations-Algorithmen Zeilenweise Dekomposition Spaltenweise Dekomposition Blockweise Dekomposition Benchmarking Fazit
Zusammenfassung & Fazit Matrix-Vektor-Multiplikation sehr verbreitet & wichtig Parallelisieren Daten-Dekomposition: Zeilenweise Matrix-Dekomposition Spaltenweise Matrix-Dekomposition Blockweise Matrix-Dekomposition Resultierende Algorithmen, deren Analyse & mgl. Implementierung Benchmarking Theorie: Blockweise Dekomposition liefert besten Algorithmus Eigene Praxis: Zeilenweise Dekomposition ebenfalls sehr gut Abgrenzung: Parallele Matrix-Vektor-Multiplikation sehr einfach & elementar Nur vollbesetzte Matrizen (ohne Sonderfall dünnbesetzte Matrizen)
Fragen & Diskussion Hauptquelle: Michael J. Quinn: Parallel Programming in C with MPI and OpenMP, McGraw Hill Higher Education, 2003.
Backup: Zeilenweise Dekomposition Analyse Gesamtkomplexität: Isoeffizienzfunktion: Overhead: All-gather-Kommunikation Für großes n: Eigentliche Kommunikationszeit übersteigt Latenzzeit Kommunikationskomplexität vereinfacht: Θ(n) mit , , Skalierbarkeitsfunktion: Speicherauslastungsfunktion für n x n Matrix: M(n) = n2 nicht sehr skalierbar!
Backup: Spaltenweise Dekomposition Analyse Gesamtkomplexität: Isoeffizienzfunktion: Overhead: All-to-all-Kommunikation Für großes n: Eigentliche Kommunikationszeit übersteigt Latenzzeit Kommunikationskomplexität vereinfacht: Θ(n) mit , , Skalierbarkeitsfunktion: Gleiche Isoeffizienzfunktion wie bei zeilenweiser Dekomposition Gleiche Skalierbarkeitsfunktion nicht sehr skalierbar!
Backup: Blockweise Dekomposition Analyse Gesamtkomplexität: Isoeffizienzfunktion: Overhead: Kommunikationskomplexität je Prozessor mit , Skalierbarkeitsfunktion: besser skalierbar!