38
Seminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider Friedrich-Alexander Universit¨ at Erlangen-N¨ urnberg 11.07.2008 Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 1 / 34

Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

  • Upload
    phambao

  • View
    229

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Seminar Multicore Architectures and Programming 08am Lehrstuhl Informatik 12, Hardware-Software-Co-Design

Efficient Matrix Inversion in CUDA

Robert Grimm, Matthias Schneider

Friedrich-Alexander UniversitatErlangen-Nurnberg

11.07.2008

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 1 / 34

Page 2: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Outline

Outline

1 MotivationProblemstellung

2 AnsatzeGauss-EliminationBorderingCholesky-ZerlegungQR-ZerlegungSART

3 FazitZusammenfassungAlternativen

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 2 / 34

Page 3: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Motivation

Outline

1 MotivationProblemstellung

2 Ansatze

3 Fazit

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 3 / 34

Page 4: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Motivation Problemstellung

Matrixinversion

Das Problem

Zu losen: Mehrere Gleichungssysteme der Form A · ~x = ~b mitverschiedenen rechten Seiten

Idee: Berechne Inverse A−1: danach nur nochMatrix-Vektor-Multiplikation: ~x = A−1 · ~b.

Allgemein: Berechnung von Matrix-Inversen numerisch sehrbedenklich - fur uns aber nebensachlich.

Beschrankung auf relativ kleine Matrizen(A ∈ C64×64...256×256).

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 4 / 34

Page 5: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze

Outline

1 Motivation

2 AnsatzeGauss-EliminationBorderingCholesky-ZerlegungQR-ZerlegungSART

3 Fazit

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 5 / 34

Page 6: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Gauss-Elimination

Gauss-Eliminationsverfahren

Eliminationsverfahren von Gauss-Jordan

Schema zu Beginn: (A|I), nach Gauss-Verfahren:(I|A−1

).

A =

a1,1 a1,2 . . . a1,n

a2,1 a2,2 . . ....

.... . .

an,1 . . . an,n

Durch Operationen auf ganzen Zeilen: Fur alle Spalten:jeweils nur Diagonaleintrag belassen, in allen anderen Zeilen0en erzeugen

Rechenaufwand O(n3), Operationen auf Zeilen der Breite 128- sollte sich doch super eignen?

keine Pivotisierung (verbessert zwar numerische Stabilitat,aber schwerer parallelisierbar)

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 6 / 34

Page 7: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Gauss-Elimination

Gauss-Eliminationsverfahren

Naive Implementierung

Nur global memory

Nur ein thread block - jeder der 128 threads fur eine Spaltezustandig:

1 Iteriere uber alle Zeilen:2 Teile alle Eintrage der aktuellen Zeile i durch das

Diagonalelement ai,i (Normalisierung)3 Iteriere uber alle Zeilen j 6= i :4 Subtrahiere das aj,i -fache der Zeile i von Zeile j, um in der

Spalte i eine 0 zu erzeugen

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 7 / 34

Page 8: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Gauss-Elimination

Naive Implementierung

Performance

Naturlich extrem langsam

Speicherzugriffe zwar coalesced, aber pro Spaltenupdate mussdie komplette Matrix eingelesen und wieder in den Speichergeschrieben werden.

Losung: na klar, Shared Memory!

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 8 / 34

Page 9: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Gauss-Elimination

Gauss-Eliminationsverfahren

Bessere Implementierung

Implementierung mit Shared Memory

Speicherbedarf: 128× 128 Komplexzahlen (2× 4 Byte). vielzu viel :(

Dann laden wir eben nur eine “Kachel” oder wenigeZeilen/Spalten und diagonalisieren erstmal die.

Und wann werden die 0en in den anderen Zeilen erzeugt?

Dafur braucht man die (normalisierte) Referenz-Zeile bzw.Koeffizienten der Subtraktion.

Keine Moglichkeit zu inter-block Synchronisation bzw.“Broadcast”

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 9 / 34

Page 10: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Gauss-Elimination

Gauss-Eliminationsverfahren

Bessere Implementierung

Implementierung mit Shared Memory

Speicherbedarf: 128× 128 Komplexzahlen (2× 4 Byte). vielzu viel :(

Dann laden wir eben nur eine “Kachel” oder wenigeZeilen/Spalten und diagonalisieren erstmal die.

Und wann werden die 0en in den anderen Zeilen erzeugt?

Dafur braucht man die (normalisierte) Referenz-Zeile bzw.Koeffizienten der Subtraktion.

Keine Moglichkeit zu inter-block Synchronisation bzw.“Broadcast”

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 9 / 34

Page 11: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Gauss-Elimination

Gauss-Eliminationsverfahren

Bessere Implementierung

Implementierung mit Shared Memory

Speicherbedarf: 128× 128 Komplexzahlen (2× 4 Byte). vielzu viel :(

Dann laden wir eben nur eine “Kachel” oder wenigeZeilen/Spalten und diagonalisieren erstmal die.

Und wann werden die 0en in den anderen Zeilen erzeugt?

Dafur braucht man die (normalisierte) Referenz-Zeile bzw.Koeffizienten der Subtraktion.

Keine Moglichkeit zu inter-block Synchronisation bzw.“Broadcast”

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 9 / 34

Page 12: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Gauss-Elimination

Gauss-Eliminationsverfahren

Bessere Implementierung

Implementierung mit Shared Memory

Speicherbedarf: 128× 128 Komplexzahlen (2× 4 Byte). vielzu viel :(

Dann laden wir eben nur eine “Kachel” oder wenigeZeilen/Spalten und diagonalisieren erstmal die.

Und wann werden die 0en in den anderen Zeilen erzeugt?

Dafur braucht man die (normalisierte) Referenz-Zeile bzw.Koeffizienten der Subtraktion.

Keine Moglichkeit zu inter-block Synchronisation bzw.“Broadcast”

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 9 / 34

Page 13: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Gauss-Elimination

Gauss-Eliminationsverfahren

Bessere Implementierung

Shared Memory nur eingeschrankt nutzbar:1 Lade “Source”-Zeile i in Shared Memory R (1 KB)2 Teile Zeile i durch ai,i

3 Lade nacheinander alle “Target”-Zeilen j, j 6= i in SharedMemory S (1 KB)

4 Subtrahiere aj,i -faches der Zeile R von S5 Schreibe S wieder zuruck in globalen Speicher

Optimierung:“in-place”, daher Speicherbedarf fur eineMatrix-Zeile nur 128, aber benotigt aber eine zusatzlicheSpalte mit Koeffizienten im Shared Memory.

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 10 / 34

Page 14: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Gauss-Elimination

Elimination mit Shared Memory

Performance

Nur geringfugig besser als naiver Ansatz

Fur 100 parallele Inversionen gleichzeitig: Knapp 5mallangsamer als unoptimierte Elimination auf CPU.

Praktisch keine Kommunikation zwischen den Threadsinnerhalb eines Blocks

Berechnung von 1ai,i

, mit dem jeder Thread “seinen” Wert

multipliziert: Musste eigentlich nicht jeder Thread selbstmachen, aber branch wurde sonst divergieren.

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 11 / 34

Page 15: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Bordering

Bordering Methode

Konzept

Angenommen, die Inverse einer (k − 1)× (k − 1) Matrix Ak−1

ist bekannt

Dann lasst sich daraus die Inverse der k × k Matrix Ak

berechnen, die man erhalt, wenn man Ak−1 um eineZeile/Spalte erganzt.

Beginne mit k = 1:

A1 =(a1,1

); A−1

1 =(

1a1,1

).

Konstruiere daraus A−12 , usw. bis A−1

k .

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 12 / 34

Page 16: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Bordering

Bordering Schema

Rekursive bzw. iterative Rechenvorschrift

Ak =

Ak−1 ~u

~vT ak,k

;

A−1k =

A−1k−1

~0

~0T 0

+ p ·

A−1k−1 · ~u

−1

·(~vT · A−1

k−1 −1),

mit

p = pk = (akk − ~vTA−1k−1~u)−1.

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 13 / 34

Page 17: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Bordering

Bordering

Analyse

A−1k =

A−1k−1

~0

~0T 0

+ p ·

A−1k−1 · ~u

−1

·(~vT · A−1

k−1 −1)

p = pk = (akk − ~vTA−1k−1~u)−1.

Eigentlich nur lineare Algebra (Matrix-Addition, Matrix-Vektor/ Vektor-Vektor Multiplikationen) - lasst sich i.A. gutparallelisieren

Problem: Dimensionen zwischen 1 und 128 - da lohnt sichkein CUBLAS-Aufruf.

Operationen mit Vektoren, deren Lange nicht ein Vielfachesvon 32 ist, meist ineffizient.

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 14 / 34

Page 18: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Cholesky-Zerlegung

Cholesky-Zerlegung

Ubersicht

Spezialfall der LU-Zerlegung

Faktorisierungsmethode fur symmetrisch positiv definiteMatrizen

A = L · LH

L: untere Dreiecksmatrix

Losung von A x = b erhalt man durch je einmal vorwarts (1)und ruckwarts (2) einsetzen

1 L · y = b2 LH · x = y

(ohne explizite Berechnung der Inversen!)

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 15 / 34

Page 19: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Cholesky-Zerlegung

Cholesky-Zerlegung

Input: X ∈ Cn×n transponiert komplexe Matrix

// i n i t L wi th l owe r l e f t p a r t o f XL=z e r o s ( n ) ;f o r i =1:n

L ( i : n , i )=X( i : n , i ) ;end

f o r k=1:n// no rma l i z e k$ˆ{\ t e x t i t { th }}$ column

$$L ( k : n , k)=L( k : n , k )/ s q r t (L ( k , k ) ) ;

// ou t e r p roduc t i t e r a t i o nf o r i =(k+1):n

L ( i : n , i )=L( i : n , i ) − L( i , k )∗L( i : n , k ) ;end

end

Output: L ∈ Cn×n untere Dreiecksmatrix mit X = L · LH

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 16 / 34

Page 20: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Cholesky-Zerlegung

Cholesky-Zerlegung

Feststellungen & Probleme:

Außeres Produkt in k-ter Iteration verandert alle Eintrage desunteren Dreiecks in den verbleibenden Spalte k + 1 - n

Berechnung des außeren Produkts benotigt normalisierteEintrage der k-ten Spalte

Außere for-Schleife lasst sich also nicht parallelisieren

Losung:

Parallelisierung der Normalisierung und des außeren Produktsmit Kernel auf 1× 1-Grid

Multiprozessoren der Hardware alles andere als ausgelastet

⇒ Schlechte Losung

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 17 / 34

Page 21: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze Cholesky-Zerlegung

Cholesky-Zerlegung

Feststellungen & Probleme:

Außeres Produkt in k-ter Iteration verandert alle Eintrage desunteren Dreiecks in den verbleibenden Spalte k + 1 - n

Berechnung des außeren Produkts benotigt normalisierteEintrage der k-ten Spalte

Außere for-Schleife lasst sich also nicht parallelisieren

Losung:

Parallelisierung der Normalisierung und des außeren Produktsmit Kernel auf 1× 1-Grid

Multiprozessoren der Hardware alles andere als ausgelastet

⇒ Schlechte Losung

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 17 / 34

Page 22: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze QR-Zerlegung

QR-Zerlegung

Ubersicht

Faktorisierungsmethode

A = Q · R

Q: orthonormale Matrix, R: obere Dreiecksmatrix

Losung von A x = b erhalt man durch ruckwarts einsetzen

R x = QT · b

(ohne explizite Berechnung der Inversen!)

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 18 / 34

Page 23: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze QR-Zerlegung

QR-Zerlegung

Der Weg zur Faktorisierung (Numerical Recipes)

Sukzessive Erzeugung von Nulleintragen unterhalb derDiagonale durch geeignete Householderspiegelungen

A(0) = A ∈ Cm×n

A(k+1) = Q(k) · A(k)

A(k) besitzt in den ersten k Spalten nur Nulleintrageunterhalb der Diagonale

∀(i , j) : j < k ∧ j < i =⇒ a(k)i ,j = 0

A(n) ist also obere Dreiecksmatrix mit

A(n)︸︷︷︸R

= Q(n−1) . . .Q(1)Q(0)︸ ︷︷ ︸QT

· A

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 19 / 34

Page 24: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze QR-Zerlegung

QR-Zerlegung

Die Q-Matrix erhalt man also als Produkt von insgesamt nMatrizen Q(i):

A(n)︸︷︷︸R

= Q(n−1) . . .Q(1)Q(0)︸ ︷︷ ︸QT

· A

Problem:

Berechnung der Matrixprodukte ubersteigt Berechnungszeitfur vollstandige Invertierung auf CPU

Berechnungszeiten fur das Aufstellen der Q(i) und dasruckwarts einsetzen dabei noch vollkommen unberucksichtigt

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 20 / 34

Page 25: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze SART

Simultaneous Algebraic Reconstruction (SART)

Gleichungssysteme mal anders ...

Verfahren zum Losen von Gleichungssystem

A · x = b

Jede Gleichung definiert Hyperebene Hi mit Normale ai :

ai · x = bi

Losung = Schnitt der Hyperebenen

x =Na−1⋂i=0

Hi

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 21 / 34

Page 26: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze SART

Simultaneous Algebraic Reconstruction (SART)

Losungsansatz

1 Initialisierung des Losungsvektors x (0)

2 Orthogonale Projektion auf alle Hyperebenen

3 Berechnung der neuen Schatzung aus projizierten Vektoren(z.B. Mittelwert)

x (k+1) = x (k) + λk

Na−1∑i=0

uk,i ·bi − aT

i x (k)

aTi ai

ai

Na−1∑i=0

uk,i = 1

λk : Relaxationsparameter

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 22 / 34

Page 27: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze SART

Simultaneous Algebraic Reconstruction (SART)

Abbildung: SART-Iterationsschema mit ui ,k = 1/Na und λ = 1.Quelle: Skript zur Vorlesung “Digital Medical Image Processing” (LME)

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 23 / 34

Page 28: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze SART

Simultaneous Algebraic Reconstruction (SART)

Vereinfachtes Schema:

x (k+1) = x (k) +1

Na

Na−1∑i=0

bi − aTi x (k)

aTi ai

ai

Parallelisierung (Versuch 1)

1 Jeder Thread berechnet die Projektion von x (k) auf eineHyperebene HTID.

2 Synchronisation

3 Berechnung des neuen Schatzwertes x (k+1) aus Projektionen

4 Wiederholen der Schritte 1 bis 3 bis Konvergenz bzw.maximale Iterationsanzahl erreicht

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 24 / 34

Page 29: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze SART

Simultaneous Algebraic Reconstruction (SART)

Vereinfachtes Schema:

x (k+1) = x (k) +1

Na

Na−1∑i=0

bi − aTi x (k)

aTi ai

ai

Parallelisierung (Versuch 1)

Probleme:

nur ein aktiver Block (VIEL zu wenig)

Threads vollkommen uberlastet (Skalarprodukte als for-loop)

Losung:

Verteilung der Arbeit auf mehrere Blocke

Skalarprodukte parallel mit mehreren Threads berechnen

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 25 / 34

Page 30: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze SART

Simultaneous Algebraic Reconstruction (SART)

Vereinfachtes Schema:

x (k+1) = x (k) +1

Na

Na−1∑i=0

bi − aTi x (k)

aTi ai

ai

Parallelisierung (Versuch 2)

Jeder Block berechnet die Projektion von x (k) auf eineHyperebene HBID.

Synchronisation

Berechnung des neuen Schatzwerts x (k+1) aus Projektionen

Wiederholen der Schritte 1 bis 3 bis Konvergenz bzw.maximale Iterationsanzahl erreicht

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 26 / 34

Page 31: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze SART

Simultaneous Algebraic Reconstruction (SART)

Vereinfachtes Schema:

x (k+1) = x (k) +1

Na

Na−1∑i=0

bi − aTi x (k)

aTi ai

ai

Parallelisierung (Versuch 2)

Problem:

Synchronisation uber Blockgrenzen hinweg nicht moglich

Losung:

“Manuelle” Synchronisation uber Kernelaufrufe

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 27 / 34

Page 32: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Ansatze SART

Simultaneous Algebraic Reconstruction (SART)

Zu fruh gefreut: Auch nichts tun kostet Zeit...

Problem:

Jede Iteration erfordert mindestens zwei Kernelaufrufe

Mehrere hundert Iterationen benotigt fur akzeptable Losung

Aufrufzeit von sinnfreien, leeren Kernels (leerer Rumpf, keineArgumente, kein shared memory) ubersteigt bereits die Zeitfur komplette Invertierung auf CPU

Losung:

CPU-Ansatz =)

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 28 / 34

Page 33: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Fazit

Outline

1 Motivation

2 Ansatze

3 FazitZusammenfassungAlternativen

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 29 / 34

Page 34: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Fazit Zusammenfassung

Das hatten wir gebraucht

Gauss-Elimination:

Schnellerer / breiterer globaler SpeicherbusMehr Shared MemoryGlobale Synchronisation

Bordering:

Effiziente lineare Algebra mit kleinen Vektoren beliebiger Lange

SART:

Schnellerer / breiterer globaler SpeicherbusGlobale Synchronisation

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 30 / 34

Page 35: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Fazit Alternativen

Alternativen

Matrix-Invertierung allgemein

kleinere Matrizen: passen in den Shared Memory

grossere Matrizen: Aufwand fur Zerlegung lohnt sich(Cholesky auf Tesla: ca. 75 GFLOPs bei 5000× 5000)in der Literatur: Matrix-Dimensionen in Timing-Diagrammenbeginnen meist erst bei 500-1000... [3, 1]

LU-Zerlegung: Bei ausreichenden Dimensionen 2x schnellerals auf CPU [3], Pivotisierung bremst etwas

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 31 / 34

Page 36: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Fragen?

Vielen Dank fur die Aufmerksamkeit!

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 32 / 34

Page 37: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Literatur & Quellen

M. C. Pease, Matrix Inversion Using Parallel Processing,Journal of the Association for Computing Machinery, Vol. 13,No. 4, October 1967, pp. 757-764

Press, W.H., S.A. Teukolsky, W.T. Vetterling, and B.P.Flannery, Numerical Recipes in C: The Art of ScientificComputing, 2nd ed., Cambridge Univ. Press, New York, 1992,pp.98-102.

N. Galoppo, N. K. Govindaraju, M. Henson, D. Manocha,LU-GPU: Efficient Algorithms for Solving Dense LinearSystems on Graphics Hardware, November 2005, SC ’05:Proceedings of the 2005 ACM/IEEE conference onSupercomputing

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 33 / 34

Page 38: Efficient Matrix Inversion in CUDA - ... · PDF fileSeminar Multicore Architectures and Programming 08 am Lehrstuhl Informatik 12, Hardware-Software-Co-Design Efficient Matrix Inversion

Literatur & Quellen

M. Castillo et al., Making Programming Synonymous withProgramming for Linear Algebra Libraries, SC08, Austin,Texas, November 2008.

G. H. Golub and Ch. F. Van Loan, Matrix Computations, TheJohns Hopkins University Press, Baltimore and London, 3edition, 1996.

A.C. Kak and M. Slaney, Principles of ComputerizedTomographic Imaging, IEEE Press, 1988.

Efficient Matrix Inversion in CUDA Robert Grimm, Matthias Schneider 34 / 34