Wissenschaftliches Rechnen auf Grafikkarten Achim Grolms Buyu Xiao Guanhua Bai Betreuer: Dipl.-Ing. Bastian Bandlow.

Slides:



Advertisements
Ähnliche Präsentationen
Matrixmultiplikation
Advertisements

Adaptive Systeme Prof. Rüdiger Brause WS 2011.
< CUDA implementation>
Thema: Algorithmusdesignverfahren Vu Hoang Lam IMN04 HTWK-Leipzig Obersemminar Softwareentwicklung.
Constantin Timm Informatik 12 TU Dortmund
Agenda Sitzung 2 für den Programmaufbau
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
2.5 Vektorrechner & Multimedia-Erweiterungen
GRA/TI.4 Version Animierte Beispiele - Mehrzyklenimplementierung Die Animationen auf den nächsten Seiten dienen nur zur Veranschaulichung. Beachten.
Threads Richard Göbel.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Lösung linearer Gleichungssysteme
Diskrete Mathematik I Vorlesung Arrays-
Parallele Gleichungslöser für die linearen TRACE-Module
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Optimierungstechniken für SMP- Architekturen.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
DVG Gaußscher Algorithmus1 Gaußscher Algorithmus.
Gaußscher Algorithmus
Random Heightmap on GPU
Matrix Multiplication on CUDA
< Best practices >
Beschleunigung Virtueller Privater Netze durch Netzwerkprozessoren
Leitfaden Motivation Was ist CUDA ? NVIDIA Grafikkarte Programmierung
Gliederung Motivation und Ziele Grundlagen der Rotman Linsen
Supercomputer FSJS-X3000 Lehrlingswettbewerb Züri Oberland 2013 Uster
Duo- und Quad Prozessor-Architektur
Clustering mittels Grafikprozessor
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
GPU Computing Burim Kameri Fachhochschule Hannover (FHH)
GPU Computing Burim Kameri Fachhochschule Hannover (FHH)
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Kosten / Nutzen-Optimierung komplexer Floating-Point- Berechnungen unter Ausnutzung variabler Präzision Programming Language Design and Implementation.
Einführung in die Programmiersprache C 4
Parallel Matrix Multiplication
Parallel Programming Parallel Matrix Multiplication
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Christian Mansky Design - Fallstudien Christian Mansky
Algorithm Engineering „GPU Algorithmen“
2.4 Rekursion Klassifikation und Beispiele
Ein Vortrag von Simon Bayer
Engineering tools for the NEO engineer
Purga - Scriptengine Ein Einblick.
Algorithmen und Datenstrukturen Übungsmodul 8
Algorithmen und Datenstrukturen Übungsmodul 1
0 Univ. Paderborn, FG Theoretische Elektrotechnik 0 Übersicht Motivation und Zielsetzung Grundlagen Funktionsprinzip einer Grafikarter.
BMEVIEEA100 Grundlagen der Programmierung
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Parallelisierung für Multiprozessor-Maschinen
Einführung in Optimierungsprobleme auf modernen Rechnerarchitekturen
Javelin Internet-based parallel computing using Java.
© author(s) of these slides 2013 including research results of the research network ES and TU Darmstadt otherwise as specified at the respective slide.
Arbeitsberatung der ITG Fachgruppe Matthias Fiedler, Gunter Scheller 13. Juni 2003 Fakultät für Elektrotechnik und Informationstechnik Fachbereich.
Numerical Methods of Electromagnetic Field Theory I (NFT I) Numerische Methoden der Elektromagnetischen Feldtheorie I (NFT I) / 12th Lecture / 12. Vorlesung.
Dr.-Ing. René Marklein - NFT I - WS 06/07 - Lecture 4 / Vorlesung 4 1 Numerical Methods of Electromagnetic Field Theory I (NFT I) Numerische Methoden der.
THE MATHEMATICS OF PARTICLES & THE LAWS OF MOTION.
Diskrete Mathematik I Vorlesung 2 Arrays.
Wissenschaftliches Programmieren „CUDA“ Achim Grolms Buyu Xiao Guanhua Bai Betreuer: Dipl.-Ing. Bastian Bandlow.
Erprobung von Interpolationsmethoden für plan-polare Antennenmesstechnik von Michael Delissen Michael Delissen, IHF, RWTH Aachen University.
Multiprocessing mit OpenMPI Marius Albath. Vorlesung Betriebssysteme, Was ist OpenMPI Was ist OpenMPI OpenMPI Standard Setup OpenMPI Standard.
Lineare Algebra Softwareprojekt: Anwendung von Algorithmen Sebastian Kürten, Philipp Borgers SoSe 2010.
Blowfish mit CUDA Dominik Oepen Inhalt ● Blowfish Grundlagen ● Implementierungsdetails ● Performance ● Fazit.
Dennis Kempin, Peter Schumacher, Gernot Ziegler, Tobias Rick
K-NN Klassifikation auf dem STI Cell BE Prozessor Michael Mair, Adrian Marte, Martin Schöpf, Daniel Winkler.
מבוא למערכות מחשב ואסמבלי
OFFICE 365 FOCUS SESSION SHAREPOINT ONLINE 101:LERNE DIE BASICS 19. März 2018 Höhr-Grenzhausen.
Shared Memory Programmierung: Grundlagen
 Präsentation transkript:

Wissenschaftliches Rechnen auf Grafikkarten Achim Grolms Buyu Xiao Guanhua Bai Betreuer: Dipl.-Ing. Bastian Bandlow

1 Univ. Paderborn, FG Theoretische Elektrotechnik 1 Übersicht  Motivation und Zielsetzung  Einleitung CUDA  Sparse Matrix  IDR(s) Integration  Zusammenfassung und Ausblick

2 Univ. Paderborn, FG Theoretische Elektrotechnik 2 Aufgabenstellung Motivation: Was ist CUDA? Anwendung von CUDA. Unterschied zwischen GPU und CPU. Zielsetzung: Einarbeiten in CUDA und Matlab Festlegen, welche mathematischen Teilaufgaben im IDR-Algorithmus erledigt werden müssen Gleichungssystemlöser implementieren Wissenschaftliches Rechnen auf Grafikkarten

3 Univ. Paderborn, FG Theoretische Elektrotechnik 3 Übersicht Motivation und Zielsetzung  Einleitung CUDA  Sparse Matrix  IDR(s) Integration  Zusammenfassung und Ausblick

4 Univ. Paderborn, FG Theoretische Elektrotechnik 4 Was ist CUDA CUDA: Compute Unified Device Architecture Entwickelt von NVIDIA Standard-C-Entwicklungsumgebung Ermöglicht die Benutzung des Grafikprozessors zur Beschleunigung und Visualisierung wissenschaftlicher und technischer Berechnungen Anwendungsbeispiele: Numerik Grafik Signalverarbeitung Wissenschaft Quelle:

5 Univ. Paderborn, FG Theoretische Elektrotechnik 5 GPU vs. CPU Vergleich Gflops von GPU und CPU Quelle:

6 Univ. Paderborn, FG Theoretische Elektrotechnik 6 GPU vs. CPU DRAM Cache ALU Control ALU DRAM Unterschiedliche Architektur Design zwischen GPU und CPU GPU CPU geeignet für allgemeine Anwendungen gut geeignet für spezielle Anwendungen Quelle:

7 Univ. Paderborn, FG Theoretische Elektrotechnik 7 Maximale Größe von x- y- and z-Dimension aus einem thread block sind 512, 512 und 64 CUDA Programmier-Modell GPU Prozessor mit vielen parallel ausführten Threads Anwendung zum Kernel auf die GPU Der Kernel wird parallel von mehreren Threads auf unterschiedlichen Daten ausgeführt Maximale Anzahl von threads per block ist 512 Maximale Größe von jeder Dimension aus einem Grid des thread blocks ist Quelle:

8 Univ. Paderborn, FG Theoretische Elektrotechnik 8 CUDA GPU-Modell Hardware-Modell Quelle: NVIDIA CUDA Programming Guide

9 Univ. Paderborn, FG Theoretische Elektrotechnik 9 IDR‘s(Induced dimension Reduction) function [x,resvec,iter]=idrs(A,b,s,tol,maxit,x0) % see paper in this directory % Creating start residual: N = length(b); x = x0; r = b - A*x; normr = norm(r);% tolr = tol * norm(b); % tol: relative tolerance resvec=[normr]; if (normr <= tolr) % Initial guess is a good enough solution iter=0; return; end; % Shadow space: rand('state', 0); %for reproducibility reasons. P = rand(N,s); P(:,1) = r; % Only for comparison with Bi-CGSTAB P = orth(P)'; % transpose for efficiency reasons. % Produce start vectors: dR = zeros(N,s); dX = zeros(N,s); for k = 1:s v = A*r; om = dot(v,r)/dot(v,v); dX(:,k) = om*r; dR(:,k) = -om*v; x = x + dX(:,k); r = r + dR(:,k); normr = norm(r); resvec = [resvec;normr]; M(:,k) = P*dR(:,k); end r = b - A*x M(:,k) = P*dR(:,k); normr = norm(r); tolr = tol * norm(b); Norm Matrix*Vector Skalarprodukt om = dot(v,r)/dot(v,v);

10 Univ. Paderborn, FG Theoretische Elektrotechnik 10 IDR‘s(Induced dimension Reduction) % Main iteration loop, build G-spaces: iter = s; oldest = 1; m = P*r; while ( normr > tolr ) & ( iter < maxit ) for k = 0:s c = M\m; q = -dR*c; % s-1 updates + 1 scaling v = r + q; % simple addition if ( k == 0 ) % 1 time: t = A*v; % 1 matmul om = dot(t,v)/dot(t,t); % 2 inner products dR(:,oldest) = q - om*t; % 1 update dX(:,oldest) = -dX*c + om*v; % s updates + 1 scaling else % dX(:,oldest) = -dX*c + om*v; % s updates + 1 scaling dR(:,oldest) = -A*dX(:,oldest); % 1 matmul end r = r + dR(:,oldest); % simple addition x = x + dX(:,oldest); % simple addition iter = iter + 1; normr=norm(r); % 1 inner product (not counted) resvec = [resvec;normr]; dm = P*dR(:,oldest); % s inner products M(:,oldest) = dm; m = m + dm; % cycling s+1 times through matrices with s columns: oldest = oldest + 1; if ( oldest > s ) oldest = 1; end end; % k = 0:s end; %whilereturn Matrix*Vector m = P*r; t = A*v; dX(:,oldest) = -dX*c + om*v; dR(:,oldest) = -A*dX(:,oldest); Skalarprodukt om = dot(t,v)/dot(t,t); normr=norm(r); Norm

11 Univ. Paderborn, FG Theoretische Elektrotechnik 11 Parallele Operationen in IDR(s) Norm dotMul Matrix*Vector

12 Univ. Paderborn, FG Theoretische Elektrotechnik 12 Übersicht Motivation und Zielsetzung Einleitung CUDA  Sparse Matrix  IDR(s) Integration  Zusammenfassung und Ausblick

13 Univ. Paderborn, FG Theoretische Elektrotechnik 13 Sparse Matrix Nmax (Anzahl der nonzero Elemente) Nmax<<m*n Größe = m*n Was ist Sparse Matrix? Sparse Matrix

14 Univ. Paderborn, FG Theoretische Elektrotechnik 14 Sparse Matrix Beispiel

15 Univ. Paderborn, FG Theoretische Elektrotechnik 15 Sparse Matrix Multiplikation

16 Univ. Paderborn, FG Theoretische Elektrotechnik 16 BLOCK1 Sparse Matrix Multiplikation Nmax N IrPr Jc B A C BLOCK

17 Univ. Paderborn, FG Theoretische Elektrotechnik 17 SparseMatrixMultiplikation BlkY\BlkX Matrix: x Diagonale GPU:GTX260 Grid size:1024 (ms)

18 Univ. Paderborn, FG Theoretische Elektrotechnik 18 SparseMatrixMultiplikation BlkY\BlkX Matrix: x Diagonale GPU:GTX260 Grid size:1024 (ms)

19 Univ. Paderborn, FG Theoretische Elektrotechnik 19 SparseMatrixMultiplikation Diagonale matlab CPU GPU Matrix:5000x5000 Quad CPU: RAM:3.25GB GPU:GTX260 Grid size:1024 Block size: 16x16 Matlab version: 2009b (ms)

20 Univ. Paderborn, FG Theoretische Elektrotechnik 20 Optimierung  Mögliche Strategie: Dreiecks-Summierung (Summierung in Parallel) Shared Memory (geringere Latenz als globales Memory) Minimierung leer laufender Threads (32 Threads pro Warp)

21 Univ. Paderborn, FG Theoretische Elektrotechnik 21 Block 1 Optimierung A A(1,1) A(2,1) A(3,1) A(4,1) A(n,1) A(1,2) A(1,n) b(1) b(2) b(n) share b(1) c11 c21 c12 c22 c1n c2n A(1,1)A(2,1) b(n) A(1,n)A(2,n) C2 C1

22 Univ. Paderborn, FG Theoretische Elektrotechnik 22 Optimierung M x N 1000 x x x x x5000 CPU Old GPU GPU Quad CPU: RAM:3.25GB GPU:GTX260 Grid size:1024 Block size: 8x64

23 Univ. Paderborn, FG Theoretische Elektrotechnik 23 Übersicht Motivation und Zielsetzung Einleitung CUDA Sparse Matrix  IDR(s) Integration  Zusammenfassung und Ausblick

24 Univ. Paderborn, FG Theoretische Elektrotechnik 24 IDR(s) verteilt über die Hardware RAM PCI-Bus Device Host CPU Device Memory GPU Core CudaMemCopy

25 Univ. Paderborn, FG Theoretische Elektrotechnik 25 Testproblem

26 Univ. Paderborn, FG Theoretische Elektrotechnik 26 Grobe Übersicht Kontrollfluß for (1... s ) op; end; while( norm(r) < tolr ) for (1... s ) op; Löse( s,s ); op; x = x + delta; r = rest(A,x,b); end op; end;

27 Univ. Paderborn, FG Theoretische Elektrotechnik 27 Convergence History IDR(4)Matlab-double, N=1000, tol = 1e-16

28 Univ. Paderborn, FG Theoretische Elektrotechnik 28 Lösung x IDR(4)Matlab-double, N=1000, tol = 1e-16

29 Univ. Paderborn, FG Theoretische Elektrotechnik 29 Zum Test verwendete Systeme HardwareOS GTX 260Windows XP TeslaLinux

30 Univ. Paderborn, FG Theoretische Elektrotechnik 30 Convergence History IDR(4)CUDAfloat, N=300, tol =

31 Univ. Paderborn, FG Theoretische Elektrotechnik 31 Lösung x IDR(4)CUDAfloat, N=300, tol =

32 Univ. Paderborn, FG Theoretische Elektrotechnik 32 Convergence History IDRS(4)CUDAfloat, N=5000, tol =

33 Univ. Paderborn, FG Theoretische Elektrotechnik 33 (keine) Lösung x IDR(4)CUDAfloat, N=5000, tol =

34 Univ. Paderborn, FG Theoretische Elektrotechnik 34 IEEE 754 (single) (Bildquelle:

35 Univ. Paderborn, FG Theoretische Elektrotechnik 35 typedef double t_ve; t_ve*

36 Univ. Paderborn, FG Theoretische Elektrotechnik 36 Grobe Übersicht Kontrollfluß for (1...s) op; end; while( norm(r) < tolr ) for (1...s) op; Löse(s,s); op; x = x + delta; r = rest(A,x,b); end op; end;

37 Univ. Paderborn, FG Theoretische Elektrotechnik 37 Zeitverhalten Im Bereich N < 5000 im Sekundenbereich (0s bis 2s) (langsamer als Matlab) Im Bereich 5000 < N < läuft IDR(s)_cuda, aber ohne hinreichende precision (double) momentan nicht sinnvoll meßbar.

38 Univ. Paderborn, FG Theoretische Elektrotechnik 38 Herausforderung Testbarkeit RAM PCI-Bus Device Host CPU Device Memory GPU Core CudaMemCopy()

39 Univ. Paderborn, FG Theoretische Elektrotechnik 39 Kontrollfluss im Selbstest-Modus for (1...s) op; op->selbsttest(); end; while( norm(r) < tolr ) for (1...s) op; op->selbsttest(); Löse(s,s); op; op->selbsttest(); x = x + delta; r = rest(A,x,b); end op; op->selbsttest(); end;

40 Univ. Paderborn, FG Theoretische Elektrotechnik 40 Struktur für die Testbarkeit CodeteilDesignpattern IDR(s)„Template“ Operationen„Command“

41 Univ. Paderborn, FG Theoretische Elektrotechnik 41 Testbarkeit im IDR(s)-Durchlauf dotmul_Kernel dotmul_cu Matmul_Kernel matmul_CPU IDR(s)-Kontrollfluß operation() selbsttest() operation() selbsttest()

42 Univ. Paderborn, FG Theoretische Elektrotechnik 42 idrs.h // function [x,resvec,iter]=idrs(A,b,s,tol,maxit,x0) extern "C" void idrs( t_SparseMatrix A_in, /* A Matrix in buyu-sparse-format */ t_ve* b_in, /* b as in A * b = x */ t_mindex s, t_ve tol, t_mindex maxit, t_ve* x0_in, t_mindex N, t_ve* x_out, t_ve* resvec_out, unsigned int* piter );

43 Univ. Paderborn, FG Theoretische Elektrotechnik 43 idrs.lib Norm() Add() Matmul() idrs.lib idrs.h Matlab idrs.exe idrs_mex.cpp

44 Univ. Paderborn, FG Theoretische Elektrotechnik 44 OP-Ergebnisse sind „nur“ Vektoren S N Ac b N 1 S

45 Univ. Paderborn, FG Theoretische Elektrotechnik 45 Spaltenweise Speicherung C_n N t_ve*C; t_ve C_n=&C[n*N]; n=1 C_n = C(:,n )

46 Univ. Paderborn, FG Theoretische Elektrotechnik 46 Übersicht Motivation und Zielsetzung Einleitung CUDA Sparse Matrix IDR(s) Integration  Zusammenfassung und Ausblick

47 Univ. Paderborn, FG Theoretische Elektrotechnik 47 Zusammenfassung und Ausblick Bislang in float gemessen, double Fehler wurde heute mittag gefunden. Performanceverbesserungen durch adaptive Kernelwahl möglich, aber noch nicht eingebaut. Problemgrößen für N < handhabbar.

48 Univ. Paderborn, FG Theoretische Elektrotechnik 48 Subversion-Repository Zum Nachmessen: (Code, Bauanleitung README.txt, changelog,…)

49 Univ. Paderborn, FG Theoretische Elektrotechnik 49 Vielen Dank für Ihre Aufmerksamkeit

50 Univ. Paderborn, FG Theoretische Elektrotechnik 50 Matrizenmultiplikation b a1 a2 a3 a4 a5 a6 a7 a8 A C BLOCKBLOCK 1 a1 b c1 BLOCK 2 a2 b c2 BLOCK 3 a3 b c3 BLOCK n an b c4 c5 c6 c7 c8

51 Univ. Paderborn, FG Theoretische Elektrotechnik 51 Dreieckförmige Summation Iterationsschritte

52 Univ. Paderborn, FG Theoretische Elektrotechnik 52 Dreiecksummation #define BLOCK_EXP 9 #define DEF_BLOCKSIZE 1 << BLOCK_EXP short offset = 1; for ( short i = 1; i < BLOCK_EXP ; i++ ) { short old = offset; offset <<= 1; if ( threadIdx.x % offset == 0 ) { Vs[threadIdx.x] += Vs[ threadIdx.x + old ]; } __syncthreads(); } if ( threadIdx.x == 0 ) { out[0] = Vs[0] + Vs[offset]; }

53 Univ. Paderborn, FG Theoretische Elektrotechnik 53 Dreiecksummation Erwartetes Ergebnis, bei einer Reduktion von 512 Iterationen auf 8 Iterationen Erwartung: Beschleunigung um ca. Faktor Gemessenes Ergebnis: Beschleunigung „ nur“ um Faktor 5 (in Bezug auf rein iterative Summierung auf der GPU)

54 Univ. Paderborn, FG Theoretische Elektrotechnik 54 Literatur 1.NVIDIA CUDA BestPracticesGuide NVIDIA CUDA PrommingGuide CudaReferenceManual.pdf 4.White Paper “Accelerateing MATLAB with CUDA Using MEX Files” 5.Gaußsches Eliminationsverfahren 6.Peter sonneveld, Martin B. Van Gijzen, “IDR(s):A Family of simple and fast algorithms for solving large nosysmmetric systems of linear equations” 7.Robert Sedgewick,” Algorithmen in C.”, Pearson Studium, ISBN-10: Robert Sedgewick 8.Donald E. Knuth, The Art of Computer Programming 1-3, Addison-Wesley Longman, ISBN-10: David A. Patterson, John L. Hennessy, Computer Organization & Design: The Hardware/Sofware Interface; Morgan Kaufmann; ISBN-10: X 10.Brian W. Kernighan, Dennis Ritchie; The C Programming Language; Prentice Hall International; ISBN-10: