Wissenschaftliches Programmieren „CUDA“ Achim Grolms Buyu Xiao Guanhua Bai Betreuer: Dipl.-Ing. Bastian Bandlow.

Slides:



Advertisements
Ähnliche Präsentationen
Kurzwiederholung Informatik I, Teil I: Grundkonzepte
Advertisements

der Universität Oldenburg
Adaptive Systeme Prof. Rüdiger Brause WS 2011.
< CUDA implementation>
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++
Threads Richard Göbel.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.

Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
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
Motivation Design Erwartungen Theorie Spiel im Detail Spiel allgemein Ziel Auswertung Willkommen zum Experiment Finanzierung von Sozialausgaben Gruppe.
Gliederung Motivation und Ziele Grundlagen der Rotman Linsen
Supercomputer FSJS-X3000 Lehrlingswettbewerb Züri Oberland 2013 Uster
Clustering mittels Grafikprozessor
Adaptive Systeme Prof. Rüdiger Brause WS 2013.
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 Fachbereich.
Einführung in die Programmierung
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.
Portabilität Seminar aus Softwareentwicklung: Programmierstil Christine Schiestl WS 02 / 03.
Christian Mansky Design - Fallstudien Christian Mansky
Algorithm Engineering „GPU Algorithmen“
Auswahlanweisungen, Iterationsanweisungen, Blöcke, Sprunganweisungen
2.4 Rekursion Klassifikation und Beispiele
Ein Vortrag von Simon Bayer
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
Vorlesung 5. #include double fv(double x) { return sin(x); } int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; for(i=1,sum=0.0,del = (b-a)/N;i
Hochschule Fulda – FB ET Sommersemester 2014
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Parallelisierung für Multiprozessor-Maschinen
Javelin Internet-based parallel computing using Java.
Qualitätssicherung von Software Prof. Dr. Holger Schlingloff Humboldt-Universität zu Berlin und Fraunhofer FIRST.
Numerical Methods of Electromagnetic Field Theory I (NFT I) Numerische Methoden der Elektromagnetischen Feldtheorie I (NFT I) / 12th Lecture / 12. Vorlesung.
Software Engineering SS04 Paralleles Programmieren FH Aachen, Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo.
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.
Institut für Angewandte Mikroelektronik und Datentechnik Results of Phase 4: Layout for ST65 technology by Christoph Niemann Selected Topics.
Lernfeld 4: Informationstechnische Systeme Bereitstellen
Wissenschaftliches Rechnen auf Grafikkarten Achim Grolms Buyu Xiao Guanhua Bai Betreuer: Dipl.-Ing. Bastian Bandlow.
Blowfish mit CUDA Dominik Oepen Inhalt ● Blowfish Grundlagen ● Implementierungsdetails ● Performance ● Fazit.
Aufgaben zu Rückgabewerten
Einführung in die Programmierung
Syntax: while ( BEDINGUNG ) { // Anweisungen die so lange immer wieder ausgeführt // werden, wie die Bedingung zutrifft } for (INITIALISIERUNG; BEDINGUNG;
מבוא למערכות מחשב ואסמבלי
CSL211 Computer Architecture
OFFICE 365 FOCUS SESSION SHAREPOINT ONLINE 101:LERNE DIE BASICS 19. März 2018 Höhr-Grenzhausen.
 Präsentation transkript:

Wissenschaftliches Programmieren „CUDA“ Achim Grolms Buyu Xiao Guanhua Bai Betreuer: Dipl.-Ing. Bastian Bandlow

1 Univ. Paderborn, FG Theoretische Elektrotechnik 1 Übersicht  Motivation und Zielsetzung  Grundlagen  Funktionsprinzip einer Grafikarter

2 Univ. Paderborn, FG Theoretische Elektrotechnik 2 Motivation und Zielsetzung

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

4 Univ. Paderborn, FG Theoretische Elektrotechnik 4 Unterlagen

5 Univ. Paderborn, FG Theoretische Elektrotechnik 5 Vergleich GPU v. CPU NVIDIA GeForce GTX 260 Stream-Prozessoren: Multiprozessoren, mit je 8 Kernen Core-Taktfrequenz : 576 MHz Speicher-Taktfrequenz: 999 MHz Speicher : 896MB Unterstützt Datentyp DOUBLE 1,4 Mrd. Transistoren Vergleich: Intel Core i7 (11/2008) 731 Millionen Transistoren Quelle:

6 Univ. Paderborn, FG Theoretische Elektrotechnik 6

7 7 Vergleich GPU v. CPU DRAM Cache ALU Control ALU DRAM GPUCPU

8 Univ. Paderborn, FG Theoretische Elektrotechnik 8 Vergleich GPU v. CPU

9 Univ. Paderborn, FG Theoretische Elektrotechnik 9 Vergleich GPU v. CPU Hardware-Modell Quelle: NVIDIA CUDA Programming Guide

10 Univ. Paderborn, FG Theoretische Elektrotechnik 10 Ein kurzes Beispiel für „C for CUDA “

11 Univ. Paderborn, FG Theoretische Elektrotechnik 11 Device Grid 1 Block (0, 0) Block (1, 0) Block (2, 0) Block (0, 1) Block (1, 1) Block (2, 1) Block (1, 1) Thread (0, 1) Thread (1, 1) Thread (2, 1) Thread (3, 1) Thread (4, 1) Thread (0, 2) Thread (1, 2) Thread (2, 2) Thread (3, 2) Thread (4, 2) Thread (0, 0) Thread (1, 0) Thread (2, 0) Thread (3, 0) Thread (4, 0) Maximum Nummer von threads per block ist 512 Maximum Größer von jeder Dimension aus einem Grid des thread blocks ist Maximum Größer von x- y- and z- Dimension aus einem thread block sind 512, 512 und 64

12 Univ. Paderborn, FG Theoretische Elektrotechnik 12 IDR(s)

13 Univ. Paderborn, FG Theoretische Elektrotechnik 13 IDR(s) 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; %  Matrix*Vector normr = norm(r);%  Norm 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); %  Vector*Vector dX(:,k) = om*r; dR(:,k) = -om*v; x = x + dX(:,k); r = r + dR(:,k); normr = norm(r); %  Norm resvec = [resvec;normr]; M(:,k) = P*dR(:,k); %  Matrix*Vector end

14 Univ. Paderborn, FG Theoretische Elektrotechnik 14 IDR(s) % Main iteration loop, build G-spaces: iter = s; oldest = 1; m = P*r; %  Matrix*Vector while ( normr > tolr ) & ( iter < maxit ) for k = 0:s c = M\m; %  Gauss Elimination q = -dR*c; % s-1 updates + 1 scaling v = r + q; % simple addition if ( k == 0 ) % 1 time: t = A*v; % 1 matmul %  Matrix*Vector om = dot(t,v)/dot(t,t); % 2 inner products %  Vector*Vector dR(:,oldest) = q - om*t; % 1 update dX(:,oldest) = -dX*c + om*v; % s updates + 1 scaling %-  Matrix*Vector else % dX(:,oldest) = -dX*c + om*v; % s updates + 1 scaling %-  Matrix*Vector dR(:,oldest) = -A*dX(:,oldest); % 1 matmul %  Matrix*Vector end r = r + dR(:,oldest); % simple addition x = x + dX(:,oldest); % simple addition iter = iter + 1; normr=norm(r); % 1 inner product (not counted) %  Norm resvec = [resvec;normr]; dm = P*dR(:,oldest); % s inner products %  Matrix*Vector 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

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

16 Univ. Paderborn, FG Theoretische Elektrotechnik 16 Norm und dotMul a1 a b1 b T1... Tn T1... Tn T1... A B Block 1 × × × × × × × × Block Cs Block n sum_1 sum_2 sum_n Result C1 C2 Cn C1 C2 Cn... Ck

17 Univ. Paderborn, FG Theoretische Elektrotechnik 17 matrixMul 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

18 Univ. Paderborn, FG Theoretische Elektrotechnik 18 DotMul Implementierung CUDA v. C __global__ void device_dotMul(t_ve* in1, t_ve* in2,t_ve* out, unsigned int N) { //define a Result Vector for each block __shared__ float Cs[VECTOR_BLOCK_SIZE]; // get a thread indentifier int idx = blockIdx.x*blockDim.x+threadIdx.x; Cs[threadIdx.x] = 0; //initialise Cs // compute scalar product if ( idx < N ) Cs[threadIdx.x] = in1[ idx ] * in2[ idx ]; t_ve blocksum = 0; //blocksum ist thread memory. //initialize output vector for each block if(threadIdx.x==0)out[blockIdx.x]=0; __syncthreads(); //compute summe of all thread's results for each block if(threadIdx.x==0){ for ( int i = 0; i < blockDim.x; i++ ) blocksum += Cs[i]; out[blockIdx.x]=blocksum; } __syncthreads(); //compute the sume of all block's result for the grid if ( idx == 0 ) for ( int i = 1; i < gridDim.x; i++ ) out[0] += out[i]; }

19 Univ. Paderborn, FG Theoretische Elektrotechnik 19 DotMul Implementierung CUDA v. C void dotMul_cpu(t_ve* in1, t_ve* in2,t_ve* out, unsigned int N) { int i; out[0] = 0; //initialize for( i = 0; i < N; i++){ out[0] += in1[i]*in2[i]; }

20 Univ. Paderborn, FG Theoretische Elektrotechnik 20 Analyse

21 Univ. Paderborn, FG Theoretische Elektrotechnik 21 Summation mit einem Thread #define BLOCK_EXP 9 #define DEF_BLOCKSIZE 1 << BLOCK_EXP typedef float t_ve; __shared__ t_ve v [DEF_BLOCKSIZE]; t_ve blocksum = 0; if ( threadIdx.x == 0 ) { for ( int i = 0; i < DEF_BLOCKSIZE; i++ ) { blocksum += v[i]; } out[0] = blocksum; }

22 Univ. Paderborn, FG Theoretische Elektrotechnik 22 Dreieckförmige Summation

23 Univ. Paderborn, FG Theoretische Elektrotechnik 23 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]; }

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

25 Univ. Paderborn, FG Theoretische Elektrotechnik 25 Optimierung

26 Univ. Paderborn, FG Theoretische Elektrotechnik 26 Literature [1] NVIDIA_CUDA_BestPracticesGuide_2.3.pdf [2] NVIDIA_CUDA_BestPracticesGuide_2.3.pdf [3]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