CUDA. 7. Vorlesung GPU Programmierung. Danke an Hendrik Lensch

Größe: px
Ab Seite anzeigen:

Download "CUDA. 7. Vorlesung GPU Programmierung. Danke an Hendrik Lensch"

Transkript

1 CUDA 7. Vorlesung Thorsten Grosch Danke an Hendrik Lensch

2 Parallele l Programmierung mit der GPU Bisher: GPU = OpenGL Pipeline mit Shadern Alles orientiert sich am Rendering Programme für Eckpunkte und Pixel Oft muß man um die Ecke denken Jetzt: t Die GPU ist ein schneller Parallelrechner l für beliebige bi Aufgaben Verteile die Aufgabe in Form von parallelen s an die GPU Die Programmierung gist dabei ähnlich zur Programmierung g der CPU CUDA OpenCL 2

3 Literatur Die Vorlesung ist an folgendem Buch orientiert: J. Sanders, E. Kandrot: CUDA by Example, NVIDIA Mehrfach vorhanden in Bibliothek Beispielprogramme verfügbar Gut zum Einstieg Fortgeschrittene Programmierung D. Kirk: CUDA Programming Guide Programmierung mit OpenCL ist ähnlich 3

4 Massiv Parallele l Berechnungen PCIe CPU (4 cores) GPU (480 cores) 4

5 Warum Parallele l Prozessoren GPU = günstiger Parallelrechner in jedem handelsüblichen PC 200 GFLOPS/Sek GFLOPS/Sek. 5

6 Warum Parallele l Prozessoren Speicherbandbreite 40 GB/Sek. 170 GB/Sek. 6

7 Amdahls Gesetz Serieller Teil α des Algorithmus,,paralleler Anteil 1-α Erwarteter Speedup (Beschleunigung) S bei P Prozessoren falls α=0 perfekt parallelisierbar Smax = P falls α=1 S = 1 S = α + 1 ( 1 α) / P 7

8 CUDA Programmiermodell

9 GF GeForce 8800 Host Input Assembler 16 highly threaded SM s, >128 FPU s, 367 GFLOPS, 768 MB DRAM, 86.4 GB/S Mem BW, 4GB/S BW to CPU Execution Manager Texture Texture Texture Texture Texture Texture Texture Texture Load/store Load/store Load/store Load/store Load/store Load/store Global Memory 9

10 Abkürzungen SPA (Device) SM SP Streaming Processor Array (variable across GeForce 8-series) Streaming Multiprocessor (8 SP for 8800, 15 SP for GTX480) Multi-threaded processor core Fundamental processing unit for CUDA thread block Streaming Processor Scalar ALU for a single CUDA thread 10

11 Streaming Processor Array Host Input Assembler Execution Manager SPA Texture Texture Texture Texture Texture Texture Texture Texture Load/store Load/store Load/store Load/store Load/store Load/store Global Memory 11

12 Streaming Multiprocessor Host Input Assembler Execution Manager SM Texture Texture Texture Texture Texture Texture Texture Texture Load/store Load/store Load/store Load/store Load/store Load/store Global Memory 12

13 Streaming Processor Host Input Assembler SP Execution Manager Texture Texture Texture Texture Texture Texture Texture Texture Load/store Load/store Load/store Load/store Load/store Load/store Global Memory 13

14 Programmiermodell Der Programmierer schreibt eine Kernel Funktion (in C) für die durchzuführende Aufgabe Kernel = (kleine) Funktion, die von allen s parallel ausgeführt wird Host Kernel 1 Kernel 2 Device Grid 1 Block (0, 0) Block (1, 0) Block (2, 0) Block Block Block (0, 1) (1, 1) (2, 1) Grid 2 Host = CPU Device = GPU Block (1, 1) (0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (0, 1) (1, 1) (2, 1) (3, 1) (4, 1) (0, 2) (1, 2) (2, 2) (3, 2) (4, 2) 14

15 Programmiermodell Host Device Aufteilung der s in einem 2-Level Gitter Kernel 1 Grid 1 Block (0, 0) Block (1, 0) Block (2, 0) Auf jd jedem innerhalb des Gitters läuft die gleiche Kernel Funktion Grid Gitter, aufgeteilt in Blöcke Block Aufgeteilt in s Kernel 2 Block (1, 1) (0, 0) (1, 0) Block Block Block (0, 1) (1, 1) (2, 1) Grid 2 (2, 0) (3, 0) (4, 0) (0, 1) (1, 1) (2, 1) (3, 1) (4, 1) Viele Probleme haben eine natürliche Blockstruktur (0, 2) (1, 2) (2, 2) (3, 2) (4, 2) 15

16 Gid Grid und dblocks Die Kernel Funktion wird in einem Gitter (grid) von thread blocks ausgeführt Alle threads teilen sich dabei den gleichen Adressraum Host Kernel 1 Device Grid 1 Block (0, 0) Block (1, 0) Block (2, 0) Block Block Block (0, 1) (1, 1) (2, 1) s innerhalb eines Blocks können kooperieren: Synchronisation ist möglich Benutzung von sehr schnellem, gemeinsamem Speicher ist möglich Kernel 2 Block (1, 1) (0, 0) (1, 0) Grid 2 (2, 0) (3, 0) (4, 0) Zwei s aus (0, 1) (1, 1) (2, 1) (3, 1) verschiedenen Blöcken können nicht kooperieren (!) (0, 2) (1, 2) (2, 2) (3, 2) (4, 2) (4, 1) 16

17 Blocks und s 17

18 Block und Id s und Blocks haben IDs Jeder kennt seine Position auf welche Daten muss ich zugreifen Block ID: 1D oder 2D ID: 1D, 2D, oder 3D Device Grid 1 Block Block Block (0, 0) (1, 0) (2, 0) Block Block Block (0, 1) (1, 1) (2, 1) Vereinfachter Speicherzugriff auf mehrdimensionale Daten, z.b. Bildverarbeitung Lösen von Differentialgleichungen Block (1, 1) (0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (0, 1) (1, 1) (2, 1) (3, 1) (4, 1) (0, 2) (1, 2) (2, 2) (3, 2) (4, 2) 18

19 Speichertypen Auf der GPU gibt es verschiedene Arten von Speicher die sich unterscheiden in Grösse und Geschwindigkeit Grid Block (0, 0) Block (1, 0) Shared Memory Shared Memory Registers Registers Registers Registers (0, 0) (1, 0) (0, 0) (1, 0) Bei der Implementierung sollten häufig benötigte Daten immer im schnellsten Speicher liegen Host Local Memory Global Memory Local Memory Local Memory Local Memory Die Geschwindigkeit einer GPU Implementierung hängt oft vom Speicherlayout ab Constant t Memory Texture Memory 19

20 Speichertypen Global Memory Read-write per-grid Mehrere Hundert MB Sehr langsam (600 clocks) g ( ) Texture Memory Read-only per-grid Mehrere Hundert MB Langsamer erster Speicherzugriff, aber mit filtering, clamping Constant Memory Read-only per-grid 64 KB Langsamer erster Speicherzugriff, aber mit Kann schneller als Global l Memory sein Shared! Memory Read-write per-block 16 KB per block Sehr schnell (4 clocks) Se sc e ( coc s) Local Memory Read-write per thread Sehr langsam (ähnlich zu Global Memory) Registers Read-write per thread Sehr schnell (1 clock) Die CPU kann lesen/schreiben in Global Memory Texture Memory Constant Memory 20

21 CUDA Programmiermodell Die GPU wird als Berechnungseinheit betrachtet: Coprozessor für die CPU (Host) Eigener Speicher (DRAM, device memory) Bearbeitet viele s parallel Alle (Daten-) parallelen Anteile der Anwendung werden auf der GPU ausgeführt in Form von Kernels auf vielen, parallelen s Unterschiede zwischen GPU und CPU s GPU threads sind extrem leichtgewichtig g Können schnell erzeugt werden GPU braucht e von s, um effizient zu arbeiten Multi-core CPU braucht nur wenige s 21

22 Die GPU ist gut für datenparallele Berechnungen Die gleiche Berechnung wird auf vielen Datenelementen parallel ausgeführt viel Floating-Point Arithmetik Viele Berechnungen pro Speicherzugriff Speicherzugriff immer noch der Flaschenhals 22

23 CUDA Compute Unified Device Architecture Hardware und Software Spezifikation für parallele Berechnungen Einfache Erweiterung für C Möglichkeit, Code auf der GPU auszuführen NVIDIA (seit GeForce 8800 Serie) 23

24 CUDA Application i Programming Interface Die CUDA API ist eine Erweiterung zu C/C++ Eigener Compiler: nvcc Compiliervorgang in zwei Schritten z.b. nvcc in Kombination mit gcc CUDA Files enthalten hl sowohl GPU als auch CPU Funktionen 24

25 Zusätze für Funktionen und dvariablen Funktionen device global host Funktion läuft auf GPU und wird von GPU aufgerufen Funktion läuft auf GPU und wird von CPU aufgerufen Kernel Funktion, Rückgabetyp void Funktion läuft auf CPU und wird von CPU aufgerufen Einschränkungen für GPU Funktionen keine Rekursion, keine statischen Variablen Variablen device constant shared Global Memory (per grid, GPU) Constant Memory (per Grid, GPU) Shared Memory (per Block, GPU) 25

26 Host Eingebaute Variablen griddim : Größe des Gitters (in Blocks) griddim.x = Breite, griddim.y = Höhe blockdim : Größe eines Blocks blockdim.x = Breite, blockdim.y = Höhe blockidx : Index des Blocks (vom aktuellen ) blockidx.x = x-position, blockidx.y = y-position threadidx : Index (Position des s innerhalb des Blocks) threadidx.x = x-position, threadidx.y = y-position Kernel 1 Kernel 2 Block (1, 1) (0, 0) Device (1, 0) Grid 1 Block Block Block (0, 0) (1, 0) (2, 0) Block Block Block (0, 1) (1, 1) (2, 1) Grid 2 (2, 0) (3, 0) (4, 0) (0, 1) (1, 1) (2, 1) (3, 1) (4, 1) griddim = (3,2) blockdim = (5,3) blockidx = (1,1) threadidx = (2,0) (0, 2) (1, 2) (2, 2) (3, 2) (4, 2) 26

27 GPU Einfaches CUDA Beispiel: i Addition i auf der GPU { global void add( int a, int b, int *c ) { *c = a + b; } Kernel = kleines Programm auf der GPU (pro ) int main( void ) { int c; int *dev_c; cudamalloc( (void**)&dev_c, sizeof(int) ); Speicher auf GPU reservieren (global) CPU } add<<<1,1>>>( 2, 7, dev_ c ); cudamemcpy( &c, dev_c, sizeof(int), cudamemcpydevicetohost ) ); printf( "2 + 7 = %d\n", c ); cudafree( dev_c ) ; return 0; Kernel aufrufen Ergebnis zur CPU kopieren 27

28 GPU Speicher reservieren cudamalloc( (void**)&devptr, size ); size Bytes werden auf der GPU reserviert (Global Memory) Die Anfangsadresse steht in devptr Vorsicht, das ist eine GPU Adresse (!) cudafree( devptr ) ; Speicher auf der GPU wieder freigeben 28

29 GPU CPU Datenübertragung cudamemcpy( ptr, devptr, size, cudamemcpydevicetohost ) ); Kopieren von size Bytes von der GPU (Device) zur CPU (Host) CPU Adresse: ptr GPU Adresse: devptr cudamemcpy( devptr, ptr, size, cudamemcpyhosttodevice ) ); Kopieren von size Bytes von der CPU (Host) zur GPU (Device) CPU Adresse: ptr GPU Adresse: devptr Achtung: Parameterreihenfolge vertauscht! Es gibt auch cudamemcpydevicetodevice 29

30 KernelAufruf f g global void kernel( ) { } kernel<<<gridsize,blocksize>>>( ); Die Kernel-Funktion kernel wird in einem 1D Grid der Größe gridsize mit blocksize s pro Block aufgerufen insgesamt werden gridsize * blocksize s gestartet Der Kernel läuft auf der GPU und wird von der CPU aufgerufen global 30

31 KernelAufruf fbeispiel i add<<<1,1>>>( 2, 7, dev_c ); Die Kernel-Funktion add wird mit den Parametern ( 2, 7, dev_c ) aufgerufen Die Größe von Grid/Block wird durch die Werte innerhalb von <<< >>> angegeben <<<M,N>>> entspricht einem 1D Grid mit M Blöcken mit je N s pro Block Im Beispiel wird also nur 1 (in einem Block) gestartet 31

32 1. Sinnvolles Beispiel i Parallelität ausnutzen, viele s gleichzeitigg z.b. 2 Arrays gegeben Komponentenweise Addition c[i] = a[i] + b[i] Jeder (i=1..n) berechnet eine Addition Im Programm ändert sich hfolgendes Der Kernel Aufruf erfolgt jetzt mit einem größeren Grid (N, 1) Der Speicher für die Arrays wird auf der GPU reserviert Der Kernel ermittelt über den Index den richtigen Wert 32

33 Addition i von zwei Arrays auf der GPU int main( void ) { int a[n], b[n], c[n]; int *dev_a, *dev_b, *dev_c; CPU // allocate the memory on the GPU cudamalloc( (void**)&dev_a, N * sizeof(int) ); cudamalloc( (void**)&dev_b, N * sizeof(int) ); cudamalloc( dmll ((void**)&dev_c, N* sizeof(int) t)) ); // fill the arrays 'a' and 'b' on the CPU // copy the arrays 'a' and 'b' to the GPU cudamemcpy( dev_a, a, N * sizeof(int), cudamemcpyhosttodevice ) ); cudamemcpy( dev_b, b, N * sizeof(int), cudamemcpyhosttodevice ) ); add<<<n,1>>>( dev_a, dev_b, dev_c ); 33

34 Addition i von zwei Arrays auf der GPU // copy the array 'c' back from the GPU to the CPU cudamemcpy( c, dev_c, N * sizeof(int), cudamemcpydevicetohost ) ); CPU } // free the memory allocated on the GPU cudafree( dev_a ); cudafree( dev_b ); cudafree( df dev_c ); return 0; 34

35 Addition i von zwei Arrays auf der GPU: Kernel GP PU g global void add( int *a, int *b, int *c ) { } int tid = blockidx.x; c[tid] = a[tid] + b[tid]; Durch hden Aufruf fadd<<<n,1>>> wird idein Gid Grid mit N x 1 Blöcken angelegt (1 pro Block) Daher wird über den Blockindex auf das Array zugegriffen 35

36 Addition i von zwei Arrays auf der GPU: Kernel Was würde sich ändern, wenn der Kernel mit add<<<1,n>>> aufgerufen wird? Es wird ein Grid mit einem Block angelegt, in dem einen Block laufen N s Im Kernel muß daher mit int tid = threadidx.x auf das Array zugegriffen werden An der Laufzeit ändert sich in diesem Fall nichts 36

37 Gid Grid-und dblockgröße für 2D-Fall Fllfestlegen Eigener Typ dim3 Beschreibt praktisch Integer Vektor mit 3 Komponenten Bei einem 2D Grid/Block wird hier die 3. Komponente automatisch auf 1 gesetzt dim3 gridsize(gridwidth, idwidth gridheight) i dim3 blocksize(blockwidth, blockheight) kernel<<<gridsize, blocksize>>> Das 2D Grid besteht aus gridwidth x gridheight Blöcken jeder Block besteht aus blockwidth x blockheight s 37

38 2D-Grid Gid Aufteilung Grid in Blocks An welcher xy-position befindet sich der aktuelle? int x = threadidx.x + blockidx.x * blockdim.x; int y = threadidx.y + blockidx.y * blockdim.y; 38

39 Bsp. Kernelfür Fraktal global void fractalkernel( float *imageptr, int ticks ) { int pixelx = threadidx.x + blockidx.x * blockdim.x; int pixely = threadidx.y + blockidx.y * blockdim.y; int offset = pixelx + pixely * blockdim.x * griddim.x; float cx = 0.41 * sin(0.001 * float(ticks)); float cy = 0.77 * cos( * float(ticks)); } float x = 2.0f * (pixelx / (float)dim) - 1.0f; float y = 2.0f * (pixely / (float)dim) - 1.0f; inti= 0; int max = 256; float dist = x*x + y*y; while ((i < max) && (dist < 4.0)) { float newx = x*x - y*y + cx; y = 2*x*y + cy; x = newx; dist = x*x + y*y; i++; } imageptr[offset] = pow(float(i) / float(max), 0.25f); 39

40 Bildanzeigei Für die Anzeige von einem Bild verwenden wir zunächst folgendes kernel<<<gridsize, blocksize>>>(devptr ); cudamemcpy( pixels, devptr, size, cudamemcpydevicetohost ); gldrawpixels( width, height,, pixels ); Da sich die Pixeldaten bereits auf der GPU befinden sind dies zwei unnötige Kopiervorgänge Effizientere Lösung später 40

41 Wer ist das? siehe Übung 41

42 Asynchrone Kommandos Viele CUDA Kommandos arbeiten asynchron d.h. das CPU Programm läuft weiter Dies sind z.b. Kernel Aufrufe Kommandos zum Kopieren von Speicher, die auf Async() enden Device Device Speicherkopie 42

43 Fhl Fehlerabfrage static void HandleError( cudaerror_t err, const char *file, int line ) { if (err!= cudasuccess) { printf( "%s in %s at line %d\n", cudageterrorstring( err ), file, line ); exit( EXIT_ FAILURE ); } } #define HANDLE_ ERROR( err ) (HandleError(( err, FILE, LINE )) Mit HANDLE_ERROR(function) wird ein vorkommender Fehler direkt angezeigt und abgebrochen Ist evtl. eine Bremse, aber sicherer Alternative: cutilsafecall( ) 43

44 Zi Zeitmessung cudaevent_t start, stop; cudaeventcreate( &start ); cudaeventcreate( &stop ); cudaeventrecord( start, 0 );. cudaeventrecord( stop, 0 ); cudaeventsynchronize( stop ); float elapsedtime; cudaeventelapsedtime( &elapsedtime, start, stop ); printf( "Time to generate: %3.1f ms\n", elapsedtime ); cudaeventdestroy( start ); cudaeventdestroy( stop ); 44

45 GPU Eigenschaften abfragen cudadeviceprop prop; int count; HANDLE_ERROR( cudagetdevicecount( &count ) ); for (int i=0; i< count; i++) { HANDLE_ERROR( cudagetdeviceproperties( &prop, i ) ); printf( " --- General Information for device %d ---\n", i ); } printf( "Name: %s\n", prop.name p ); printf( "Compute capability: %d.%d\n", prop.major, prop.minor ); printf( "Clock rate: %d\n", prop.clockrate ); Wieviele CUDA-fähige Grafikkarten sind in meinem Rechner und was können die? 45

46 CUDA Compiler Der CUDA Compiler nvcc benötigt einen C-Compiler Aufruf z.b.: nvcc ccbin CompilerDirectory L LibraryDirectory mycudaprogram.cu o mycudaprogram.exe CompilerDirectory ist z.b. bei Visual Studio (cl.exe) : C:\Program Files\Microsoft Visual Studio 9.0\VC\bin 46

47 Device Properties von Laptop --- General Information for device Name: GeForce 9600M GT Compute capability: 1.1 Clock rate: Device copy overlap: Enabled Kernel execution timeout : Enabled --- Memory Information for device Ttl Total global lblmem: Total constant Mem: Max mem pitch: Texture Alignment: MP Information for device Multiprocessor count: 4 Shared mem per mp: Registers per mp: 8192 s in warp: 32 Max threads per block: 512 Max thread dimensions: i (512, 512, 64) Max grid dimensions: (65535, 65535, 1) CUDA Version Gleichzeitig MemCopy und Kernel ausführen Max. Zeit für Kernel Anzahl Streaming Multiprocessors (SMP) Shared Memory pro SMP Anzahl Register pro SMP s im Gleichschritt Max. Gesamtanzahl (!) s pro Block Max. Größe der Achsen von einem Block 47

48 Installation von CUDA 1. CUDA Toolkit installieren Wir nutzen CUDA 3.2 (Download) 2. Treiber aktualisieren Treiber muss zur CUDA Version passen (Download) 3. CUDA in Visual Studio 2008 integrieren Build Rules (*.rules) von \ NVIDIA GPU Computing Toolkit\CUDA\v3.2\extras\visual_studio_integration\rules studio integration\rules nach \Microsoft Visual Studio 9.0\VC\VCProjectDefaults kopieren fertig CUDA in Visual Studio 2010 integrieren Wir haben es nicht getestet, aber hier schon mal ein Anfang 48

49 CUDA Debugging Device Emulation CUDA Kernel läuft auf CPU (langsam) Dafür z.b. printf() im Kernel möglich nvcc -G -g -deviceemu file.cu 49

50 Zusammenfassung CUDA Erste Schritte Programmiermodell, Grids und Blocks Kernel Funktionen Nächstes Mal Speichertypen Synchronisation 50

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg CUDA Seminar Multi-Core Architectures and Programming 1 Übersicht Einleitung Architektur Programmierung 2 Einleitung Computations on GPU 2003 Probleme Hohe Kenntnisse der Grafikprogrammierung nötig Unterschiedliche

Mehr

Grundlagen von CUDA, Sprachtypische Elemente

Grundlagen von CUDA, Sprachtypische Elemente Grundlagen von CUDA, Sprachtypische Elemente Stefan Maskanitz 03.07.2009 CUDA Grundlagen 1 Übersicht 1. Einleitung 2. Spracheigenschaften a. s, Blocks und Grids b. Speicherorganistion c. Fehlerbehandlung

Mehr

Compute Unified Device Architecture CUDA

Compute Unified Device Architecture CUDA Compute Unified Device Architecture 06. Februar 2012 1 / 13 Gliederung 2 / 13 : Compute Unified Device Architecture entwickelt von Nvidia Corporation spezifiziert Software- und Hardwareeigenschaften Ziel:

Mehr

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg GPU-Versuch andreas.schaefer@cs.fau.de Friedrich-Alexander-Universität Erlangen-Nürnberg Praktikum Parallele Rechnerarchitekturen SS2014 Outline 1 Einführung 2 Outlook 1 Einführung 2 Eine kurze Geschichte

Mehr

GPGPU-Programmierung

GPGPU-Programmierung 12 GPGPU-Programmierung 2013/04/25 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation (1) General Purpose Computing on

Mehr

Programmierbeispiele und Implementierung. Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de

Programmierbeispiele und Implementierung. Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de > Programmierbeispiele und Implementierung Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de 2 > Übersicht > Matrix Vektor Multiplikation > Mandelbrotmenge / Apfelmännchen berechnen > Kantendetektion

Mehr

Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern

Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern Institut für Betriebssysteme und Rechnerverbund TU Braunschweig 25.10., 26.10.

Mehr

GPGPU-Programmierung

GPGPU-Programmierung 12 GPGPU-Programmierung 2014/04/29 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation (1) General Purpose Computing on

Mehr

Masterpraktikum Scientific Computing

Masterpraktikum Scientific Computing Masterpraktikum Scientific Computing High-Performance Computing Thomas Auckenthaler Wolfgang Eckhardt Prof. Dr. Michael Bader Technische Universität München, Germany Outline Organisatorisches Entwicklung

Mehr

Masterpraktikum Scientific Computing

Masterpraktikum Scientific Computing Masterpraktikum Scientific Computing High-Performance Computing Thomas Auckenthaler Wolfgang Eckhardt Technische Universität München, Germany Outline Entwicklung General Purpose GPU Programming (GPGPU)

Mehr

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm. Einführung CUDA. Ralf Seidler. Friedrich-Alexander-Universität Erlangen-Nürnberg

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm. Einführung CUDA. Ralf Seidler. Friedrich-Alexander-Universität Erlangen-Nürnberg Einführung CUDA Friedrich-Alexander-Universität Erlangen-Nürnberg PrakParRA, 18.11.2010 Outline 1 GPGPU-Architekturen 2 CUDA Programmiermodell 3 Beispielprogramm Outlook 1 GPGPU-Architekturen 2 CUDA Programmiermodell

Mehr

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell

Mehr

CUDA. Axel Jena, Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Axel Jena, Jürgen Pröll 1

CUDA. Axel Jena, Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Axel Jena, Jürgen Pröll 1 CUDA Axel Jena, Jürgen Pröll Multi-Core Architectures and Programming Axel Jena, Jürgen Pröll 1 Warum Tesla? Traditionelle Graphikkarten Getrennte Prozessoren für Vertex- / Pixelberechnungen - Nachteil:

Mehr

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm Organiosatorisches. Tutorial CUDA. Ralf Seidler

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm Organiosatorisches. Tutorial CUDA. Ralf Seidler Friedrich-Alexander-Universität Erlangen-Nürnberg 05.10.2010 Outline 1 GPGPU-Architekturen 2 CUDA Programmiermodell 3 Beispielprogramm 4 Organiosatorisches Outlook 1 GPGPU-Architekturen 2 CUDA Programmiermodell

Mehr

Software Engineering für moderne parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner

Software Engineering für moderne parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner Software Engineering für moderne parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner Dipl.-Inform. Korbinian Molitorisz M. Sc. Luis Manuel Carril Rodriguez KIT Universität des Landes Baden-Württemberg

Mehr

GPGPU-Programming. Constantin Timm Informatik 12 TU Dortmund 2012/04/09. technische universität dortmund. fakultät für informatik informatik 12

GPGPU-Programming. Constantin Timm Informatik 12 TU Dortmund 2012/04/09. technische universität dortmund. fakultät für informatik informatik 12 12 GPGPU-Programming Constantin Timm Informatik 12 TU Dortmund 2012/04/09 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation

Mehr

Eine kurze Geschichte der Grafikkarten

Eine kurze Geschichte der Grafikkarten 3.1 Einführung Eine kurze Geschichte der Grafikkarten ursprünglich: Graphics Card steuert Monitor an Mitte 80er: Grafikkarten mit 2D-Beschleunigung angelehnt an Arcade- und Home-Computer frühe 90er: erste

Mehr

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr: Yilmaz, Tolga MatNr: 157317 Mesaud, Elias MatNr: 151386 1. Aufbau und Funktionsweise einer Grafikkarte 2. CPU vs. GPU 3. Software 4. Beispielprogramme Kompilierung und Vorführung 5. Wo wird Cuda heutzutage

Mehr

Parallele Programmierung mit GPUs

Parallele Programmierung mit GPUs Parallele Programmierung mit GPUs Jutta Fitzek Vortrag im Rahmen des Moduls Parallele Programmierung, WS12/13, h_da Agenda GPUs: Historie GPU Programmierung Konzepte Codebeispiel Generelle Tipps & Tricks

Mehr

Programmierung von Graphikkarten

Programmierung von Graphikkarten Programmierung von Graphikkarten Stefan Lang Interdisziplinäres Zentrum für Wissenschaftliches Rechnen Universität Heidelberg INF 368, Raum 532 D-69120 Heidelberg phone: 06221/54-8264 email: Stefan.Lang@iwr.uni-heidelberg.de

Mehr

CUDA. Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Jürgen Pröll 1

CUDA. Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Jürgen Pröll 1 CUDA Jürgen Pröll Multi-Core Architectures and Programming Jürgen Pröll 1 Image-Resize: sequentiell resize() mit bilinearer Interpolation leicht zu parallelisieren, da einzelne Punkte voneinander unabhängig

Mehr

Grafikkarten-Architektur

Grafikkarten-Architektur > Grafikkarten-Architektur Parallele Strukturen in der GPU Name: Sebastian Albers E-Mail: s.albers@wwu.de 2 > Inhalt > CPU und GPU im Vergleich > Rendering-Pipeline > Shader > GPGPU > Nvidia Tesla-Architektur

Mehr

Architektur und Programmierung von Grafik- und Koprozessoren

Architektur und Programmierung von Grafik- und Koprozessoren Architektur und Programmierung von Grafik- und Koprozessoren General Purpose Programmierung auf Grafikprozessoren Stefan Zellmann Lehrstuhl für Informatik, Universität zu Köln SS2018 Host Interface Ausführungszeit

Mehr

Software Engineering für moderne, parallele Plattformen. 9. GPGPUs: Grafikkarten als Parallelrechner. Dr. Victor Pankratius

Software Engineering für moderne, parallele Plattformen. 9. GPGPUs: Grafikkarten als Parallelrechner. Dr. Victor Pankratius Software Engineering für moderne, parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner Dr. Victor Pankratius Dr. Victor Pankratius, Dipl.Inform. Frank Otto IPD Tichy Lehrstuhl für Programmiersysteme

Mehr

Ferienakademie Erik Muttersbach

Ferienakademie Erik Muttersbach Ferienakademie 2009 - Erik Muttersbach 1. Einführung 2. Kernels, Threads, Blocks 3. CUDA Execution Model 4. Software Stack 5. Die CUDA Runtime API 6. Speichertypen/ Zugriff 7. Profiling und Optimierung

Mehr

GPU-Programmierung: OpenCL

GPU-Programmierung: OpenCL Seminar: Multicore Programmierung Sommerstemester 2009 04.06.2009 Inhaltsverzeichnis 1 GPU-Programmierung von Grafikkarten von GPU-Computing 2 Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

Mehr

Proseminar. GPU-Computing Cuda vs. OpenCL. SS 2013 Alexander Stepanov

Proseminar. GPU-Computing Cuda vs. OpenCL. SS 2013 Alexander Stepanov Proseminar GPU-Computing Cuda vs. OpenCL SS 2013 Alexander Stepanov Inhaltsverzeichnis 1. Einführung: Warum GPU Computing? CPU vs. GPU GPU Architektur 2. CUDA Architektur Beispiel Matrix Multiplikation

Mehr

Multi-Core Architectures and Programming. Bilateral Grid Filter

Multi-Core Architectures and Programming. Bilateral Grid Filter Multi-Core Architectures and Programming Bilateral Grid Filter - Parallelisierung mit CUDA - C. Kugler und E. Sert Inhalt Motivation Bilateral Filter (Exkurs) Bilateral Grid Filter Portierung auf Grafikkarte

Mehr

Volumenrendering mit CUDA

Volumenrendering mit CUDA Volumenrendering mit CUDA Arbeitsgruppe Visualisierung und Computergrafik http://viscg.uni-muenster.de Überblick Volumenrendering allgemein Raycasting-Algorithmus Volumen-Raycasting mit CUDA Optimierung

Mehr

OpenCL. OpenCL. Boris Totev, Cornelius Knap

OpenCL. OpenCL. Boris Totev, Cornelius Knap OpenCL OpenCL 1 OpenCL Gliederung Entstehungsgeschichte von OpenCL Was, warum und überhaupt wieso OpenCL CUDA, OpenGL und OpenCL GPUs OpenCL Objekte Work-Units OpenCL Adressbereiche OpenCL API Codebeispiel

Mehr

Cuda Speicherhierarchie

Cuda Speicherhierarchie Cuda Speicherhierarchie Threads eines Blocks können über Shared Memory kommunizieren Der Shared Memory ist klein aber sehr schnell Alle Threads können nur über Global Memory kommunizieren Der Global Memory

Mehr

Paralleler Cuckoo-Filter. Seminar: Implementierungstechniken für Hauptspeicherdatenbanksysteme Jeremias Neth München, 21.

Paralleler Cuckoo-Filter. Seminar: Implementierungstechniken für Hauptspeicherdatenbanksysteme Jeremias Neth München, 21. Paralleler Cuckoo-Filter Seminar: Implementierungstechniken für Hauptspeicherdatenbanksysteme Jeremias Neth München, 21. November 2017 1 Paralleler Cuckoo-Filter Cuckoo-Hashtabelle Serieller Cuckoo-Filter

Mehr

GPGPU WITH OPENCL. Praktikum Parallele Rechnerarchitekturen, 2015w Franz Richter-Gottfried

GPGPU WITH OPENCL. Praktikum Parallele Rechnerarchitekturen, 2015w Franz Richter-Gottfried GPGPU WITH OPENCL Praktikum Parallele Rechnerarchitekturen, 2015w Franz Richter-Gottfried INFRASTRUCTURE Enqueue interactive job srun --gres --pty bash Graphics cards available for tesla_k20,

Mehr

General Purpose Computation on GPUs

General Purpose Computation on GPUs General Purpose Computation on GPUs Matthias Schneider, Robert Grimm Universität Erlangen-Nürnberg {matthias.schneider, robert.grimm}@informatik.stud.uni-erlangen.de M. Schneider, R. Grimm 1 Übersicht

Mehr

Multicore-Architekturen

Multicore-Architekturen Universität Erlangen- Nürnberg Technische Universität München Universität Stuttgart Multicore-Architekturen Vortrag im Rahmen der Ferienakademie 2009 Kurs 1: Programmierkonzepte für Multi-Core Rechner

Mehr

GPU Architektur CUDA - OpenCL

GPU Architektur CUDA - OpenCL GPU Architektur und Programmiermöglichkeiten für GPGPU-Anwendungen kernel void matsq( global const float *mat, global float *out ) { int dim = get_global_size(0); //Matrix dimension int i = get_global_id(0);

Mehr

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck RST-Labor WS06/07 GPGPU General Purpose Computation On Graphics Processing Units (Grafikkarten-Programmierung) Von: Marc Blunck Ablauf Einführung GPGPU Die GPU GPU Architektur Die Programmierung Programme

Mehr

GPGPU Basiskonzepte. von Marc Kirchhoff GPGPU Basiskonzepte 1

GPGPU Basiskonzepte. von Marc Kirchhoff GPGPU Basiskonzepte 1 GPGPU Basiskonzepte von Marc Kirchhoff 29.05.2006 GPGPU Basiskonzepte 1 Inhalt Warum GPGPU Streams, Kernels und Prozessoren Datenstrukturen Algorithmen 29.05.2006 GPGPU Basiskonzepte 2 Warum GPGPU? Performance

Mehr

Parallelisierung mit Hilfe grafischer Prozessoren 318

Parallelisierung mit Hilfe grafischer Prozessoren 318 Parallelisierung mit Hilfe grafischer Prozessoren 318 Schon sehr früh gab es diverse Grafik-Beschleuniger, die der normalen CPU Arbeit abnahmen. Die im März 2001 von Nvidia eingeführte GeForce 3 Series

Mehr

ANALYSE DER LATENZEN IM KOMMUNIKATIONSSTACK EINES PCIE-GEKOPPELTEN FPGA-BESCHLEUNIGERS. Sascha Kath

ANALYSE DER LATENZEN IM KOMMUNIKATIONSSTACK EINES PCIE-GEKOPPELTEN FPGA-BESCHLEUNIGERS. Sascha Kath ANALYSE DER LATENZEN IM KOMMUNIKATIONSSTACK EINES PCIE-GEKOPPELTEN FPGA-BESCHLEUNIGERS Sascha Kath Dresden, Gliederung 1. Motivation & Zielstellung 2. Systembeschreibung 3. Implementierung und Messungen

Mehr

PGI Accelerator Model

PGI Accelerator Model PGI Accelerator Model Philip Höhlein, Nils Werner Supervision: R. Membarth, P. Kutzer, F. Hannig Hardware-Software-Co-Design Universität Erlangen-Nürnberg Philip Höhlein, Nils Werner 1 Übersicht Motivation

Mehr

GPGPU Programming nvidia CUDA vs. AMD/ATI Stream Computing. Seminar HWS 08/09 by Erich Marth

GPGPU Programming nvidia CUDA vs. AMD/ATI Stream Computing. Seminar HWS 08/09 by Erich Marth Computing 1 Inhalt Einführung nvidia CUDA AMD Stream Computing CUDA vs. Stream Computing - Warum, Vorteile, Motivation - Überblick, API - Details, Beispiele - Überblick, API - Details, Beispiele - wesentliche

Mehr

CUDA by Example. Paralleles Rechnen auf der Grafikkarte. Leipzig, Paul Jähne SethosII

CUDA by Example. Paralleles Rechnen auf der Grafikkarte. Leipzig, Paul Jähne SethosII CUDA by Example Paralleles Rechnen auf der Grafikkarte Leipzig, 31.03.2017 Paul Jähne SethosII 1 Warum? 2 Aufbau CPU geringe Latenz große Zwischenspeicher besser für serielle Ausführung GPU hohe Rechenleistung

Mehr

Compute Unified Device Architecture (CUDA)

Compute Unified Device Architecture (CUDA) Compute Unified Device Architecture (CUDA) Thomas Koller 12. Februar 2012 Zusammenfassung Diese Ausarbeitung beschäftigt sich mit der Programmierung von Grafikkarten mittels CUDA. Bei bestimmten Berechnungen

Mehr

Automatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern

Automatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern Automatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern Bachelorarbeit Moritz Lüdecke 8. Juli 2014 INSTITUT FÜR TECHNISCHE INFORMATIK - LEHRSTUHL FÜR RECHNERARCHITEKTUR UND PARALLELVERARBEITUNG

Mehr

Parallelisierung mit Hilfe grafischer Prozessoren 323

Parallelisierung mit Hilfe grafischer Prozessoren 323 Parallelisierung mit Hilfe grafischer Prozessoren 323 Schon sehr früh gab es diverse Grafik-Beschleuniger, die der normalen CPU Arbeit abnahmen. Die im März 2001 von Nvidia eingeführte GeForce 3 Series

Mehr

Motivation (GP)GPU CUDA Zusammenfassung. CUDA und Python. Christian Wilms. Integriertes Seminar Projekt Bildverarbeitung

Motivation (GP)GPU CUDA Zusammenfassung. CUDA und Python. Christian Wilms. Integriertes Seminar Projekt Bildverarbeitung CUDA und Python Christian Wilms Integriertes Seminar Projekt Bildverarbeitung Universität Hamburg WiSe 2013/14 12. Dezember 2013 Christian CUDA und Python 1 Gliederung 1 Motivation 2 (GP)GPU 3 CUDA 4 Zusammenfassung

Mehr

Computergrafik Universität Osnabrück, Henning Wenke,

Computergrafik Universität Osnabrück, Henning Wenke, Computergrafik Universität Osnabrück, Henning Wenke, 2012-06-25 Kapitel XV: Parallele Algorithmen mit OpenCL 15.1 Parallele Programmierung Quellen: V.a. Wikipedia. Leistungsdaten unter Vorbehalt. Bitte

Mehr

2.6 Graphikprozessoren

2.6 Graphikprozessoren 12 2.6 Graphikprozessoren Peter Marwedel Informatik 12 TU Dortmund 2012/04/16 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt.

Mehr

Computergrundlagen Moderne Rechnerarchitekturen

Computergrundlagen Moderne Rechnerarchitekturen Computergrundlagen Moderne Rechnerarchitekturen Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2010/11 Aufbau eines modernen Computers DDR3- Speicher Prozessor Prozessor PEG

Mehr

2.6 Graphikprozessoren

2.6 Graphikprozessoren 12 2.6 Graphikprozessoren Peter Marwedel Informatik 12 TU Dortmund 2014 年 04 月 24 日 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt.

Mehr

Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE

Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE 754 Standard festgelegt. Es stehen sogenannte einfach

Mehr

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff Parallel Computing Einsatzmöglichkeiten und Grenzen Prof. Dr. Nikolaus Wulff Parallel Architekturen Flynn'sche Klassifizierung: SISD: single Instruction, single Data Klassisches von-neumann sequentielles

Mehr

GPGPU mit NVIDIA CUDA

GPGPU mit NVIDIA CUDA 01.07.12 GPGPU mit NVIDIA CUDA General-Purpose on Formatvorlagecomputing des Graphics Processing durch Units Untertitelmasters mit KlickenCompute bearbeiten NVIDIA Unified Device Architecture Gliederung

Mehr

Enblend - Portierung auf die GPU

Enblend - Portierung auf die GPU Multi-Core Architectures and Programming Enblend - Portierung auf die GPU Hardware/Software Co-Design September 25, 2009 1 Inhalt 1 Motivation 2 Enblend-Algorithmus 3 Beschleunigung mittels Cuda 4 Benchmark

Mehr

Master-Thread führt Programm aus, bis durch die Direktive

Master-Thread führt Programm aus, bis durch die Direktive OpenMP seit 1998 Standard (www.openmp.org) für die Shared-Memory Programmierung; (Prä-)Compiler für viele Systeme kommerziell oder frei (z.b. Omni von phase.hpcc.jp/omni) verfügbar Idee: automatische Generierung

Mehr

MESIF- (links) vs. MESI-Protokoll (rechts)

MESIF- (links) vs. MESI-Protokoll (rechts) 2.3 Beispiele für Multikern-Architekturen 2.3.1 Intel-Nehalem-Architektur MESIF- (links) vs. MESI-Protokoll (rechts) Annahme: Prozessor links unten und rechts oben haben Kopie MESIF : Nur Prozessor, dessen

Mehr

Computergrundlagen Moderne Rechnerarchitekturen

Computergrundlagen Moderne Rechnerarchitekturen Aufbau eines modernen Computers Computergrundlagen Moderne Rechnerarchitekturen Axel Arnold Institut für Computerphysik Universität Stuttgart DDR3- Speicher Prozessor Prozessor PEG Graphikkarte(n) weitere

Mehr

Rechnerarchitektur (RA)

Rechnerarchitektur (RA) 12 Rechnerarchitektur (RA) Sommersemester 2015 Foliensatz 6: Grafikprozessoren und GPGPU-Programmierung Michael Engel Informatik 12 michael.engel@tu-.. http://ls12-www.cs.tu-.de/daes/ Tel.: 0231 755 6121

Mehr

Rheinisch-Westfälische Technische Hochschule Aachen. Seminararbeit

Rheinisch-Westfälische Technische Hochschule Aachen. Seminararbeit Rheinisch-Westfälische Technische Hochschule Aachen Seminararbeit Analyse von General Purpose Computation on Graphics Processing Units Bibliotheken in Bezug auf GPU-Hersteller. Gregori Kerber Matrikelnummer

Mehr

Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs)

Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs) Fakultätsname XYZ Fachrichtung XYZ Institutsname XYZ, Professur XYZ Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs) im Rahmen des Proseminars Technische Informatik Juni

Mehr

Computergestütztes wissenschaftliches Rechnen SoSe 2004

Computergestütztes wissenschaftliches Rechnen SoSe 2004 Computergestütztes wissenschaftliches Rechnen SoSe 00 Alexander K. Hartmann, Universität Göttingen. Mai 00. Dynamisches Programmieren Fibonacci Zahlen: (n = ) fib(n) = (n = ) fib(n ) + fib(n ) (n > ) Z.B.

Mehr

Wiederholung. Vorlesung GPU Programmierung Thorsten Grosch

Wiederholung. Vorlesung GPU Programmierung Thorsten Grosch Wiederholung Vorlesung Thorsten Grosch Klausur 2 Zeitstunden (26.7., 8:30 10:30 Uhr, G29/307) Keine Hilfsmittel Kein Bleistift / Rotstift verwenden 3 Aufgabentypen Wissensfragen zur Vorlesung (ca. 1/3)

Mehr

OpenCL. Multi-Core Architectures and Programming (Seminar) Apelt, Nicolas / Zöllner, Christian

OpenCL. Multi-Core Architectures and Programming (Seminar) Apelt, Nicolas / Zöllner, Christian OpenCL Multi-Core Architectures and Programming (Seminar) Apelt, Nicolas / Zöllner, Christian Hardware-Software-Co-Design Universität Erlangen-Nürnberg Apelt, Nicolas / Zöllner, Christian 1 Was ist OpenCL?

Mehr

> High-Level Programmierung heterogener paralleler Systeme

> High-Level Programmierung heterogener paralleler Systeme > High-Level Programmierung heterogener paralleler Systeme Projektseminar im SoSe 2012 Prof. Sergei Gorlatch, Michel Steuwer, Tim Humernbrum AG Parallele und Verteilte Systeme, Westfälische Wilhelms-Universität

Mehr

OpenCL Implementierung von OpenCV Funktionen

OpenCL Implementierung von OpenCV Funktionen Multi-Core Architectures and Programming OpenCL Implementierung von OpenCV Funktionen julian.mueller@e-technik.stud.uni-erlangen.de Hardware/Software Co-Design August 18, 2011 1 Table of content 1 OpenCL

Mehr

Gliederung. Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo

Gliederung. Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo Gliederung Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo Was ist CUDA? Nvidia CUDA ist eine von NvidiaGPGPU-Technologie, die es Programmierern erlaubt, Programmteile

Mehr

Prinzipieller Aufbau der Architektur eines Multikern- Prozessors. Programmierung Standard-Mulitkern-Prozessoren mit OpenMP

Prinzipieller Aufbau der Architektur eines Multikern- Prozessors. Programmierung Standard-Mulitkern-Prozessoren mit OpenMP 3.1 Einführung Multi-Core-Architekturen Motivation Multikern-Prozessoren Prinzipieller Aufbau der Architektur eines Multikern- Prozessors Programmierung Standard-Mulitkern-Prozessoren mit OpenMP Programmierung

Mehr

Parallelisierung auf CUDA

Parallelisierung auf CUDA Parallelisierung auf CUDA Seminar Multi-Core Architectures and Programming 1 Übersicht RSA-Faktorisierung Image Flooding 2 RSA-Faktorisierung Erster Ansatz Implementierung des Pollard-Rho Algorithmus (sequentiell)

Mehr

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss

Mehr

Stream Processing und High- Level GPGPU Sprachen

Stream Processing und High- Level GPGPU Sprachen Stream Processing und High- Level GPGPU Sprachen Seminar Programmierung von Grafikkarten Jens Breitbart Problem 5000% 4000% 3000% 2000% Rechenleistung: +71% pro Jahr Bandbreite: +25% pro Jahr Zugriffszeit:

Mehr

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches

Mehr

1 Einleitung. 2 Parallelisierbarkeit von. Architektur

1 Einleitung. 2 Parallelisierbarkeit von. Architektur Beschleunigung von Aufgaben der parallelen Bildverarbeitung durch Benutzung von NVIDIA-Grafikkarten mit der Compute Unified Device Architecture (CUDA) Roman Glebov roman@glebov.de Abstract Diese Arbeit

Mehr

OpenCL (Cell B. E., PS3) Multicore Architectures and Programming

OpenCL (Cell B. E., PS3) Multicore Architectures and Programming OpenCL (Cell B. E., PS3) Multicore Architectures and Programming Apelt, Nicolas Zoellner, Christian Hardware-Software-Co-Design Universität Erlangen-Nürnberg Apelt, Nicolas Zoellner, Christian 1 Übersicht

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von

Mehr

Architektur moderner GPUs. W. Sczygiol - M. Lötsch

Architektur moderner GPUs. W. Sczygiol - M. Lötsch Architektur moderner GPUs W. Sczygiol - M. Lötsch Überblick Chipentwicklung Aktuelle Designs Nvidia: NV40 (ATI: R420) Vertex-Shader Pixel-Shader Shader-Programmierung ROP - Antialiasing Ausblick Referenzen

Mehr

Betriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.

Betriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk. Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware

Mehr

Betriebssysteme. Agenda. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.

Betriebssysteme. Agenda. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk. Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware

Mehr

Digital Image Interpolation with CUDA

Digital Image Interpolation with CUDA Digital Image Interpolation with CUDA Matthias Schwarz & Martin Rustler Hardware-Software-Co-Design Universität Erlangen-Nürnberg matthias.schwarz@e-technik.stud.uni-erlangen.de martin.rustler@e-technik.stud.uni-erlangen.de

Mehr

Arrays (Felder/Vektoren)

Arrays (Felder/Vektoren) Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke,

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke, Parallele Algorithmen mit OpenCL Universität Osnabrück, Henning Wenke, 203-04-24 Was bisher geschah Host Device Platform Führt aus Führt aus Device Context Applikation Java, C++, Kernel (OpenCL C) Memory

Mehr

Parallelisierungspotentiale mit CUDA-Streams 387

Parallelisierungspotentiale mit CUDA-Streams 387 CUDA-Streams 386 Bislang wurden überwiegend alle CUDA-Aktivitäten sequentiell durchgeführt, abgesehen davon, dass die Kernel-Funktionen parallelisiert abgearbeitet werden und der Aufruf eines Kernels asynchron

Mehr

1 Fehler in Bibliotheksfunktionen. 1 Überblick. 2 Ziele der Aufgabe. Besprechung der 1. Aufgabe

1 Fehler in Bibliotheksfunktionen. 1 Überblick. 2 Ziele der Aufgabe. Besprechung der 1. Aufgabe U3 3. Übung U3 3. Übung U3-1 Fehlerbehandlung U3-1 Fehlerbehandlung Besprechung der 1. Aufgabe Fehlerbehandlung Infos zur Aufgabe 3: malloc-implementierung U3.1 Fehler können aus unterschiedlichsten Gründen

Mehr

Dipl. Math. F. Braun Universitt Regensburg Rechenzentrum C:/Users/brf09510/svn/clib/trunk/c_lib/mathlib/complex/t/amdgus.tex 17.

Dipl. Math. F. Braun Universitt Regensburg Rechenzentrum C:/Users/brf09510/svn/clib/trunk/c_lib/mathlib/complex/t/amdgus.tex 17. Ein Illustration der Gesetze von Amdahl und Gustavson an einem Beispiel mit Cuda Dipl. Math. F. Braun Universitt Regensburg Rechenzentrum C:/Users/brf09510/svn/clib/trunk/c_lib/mathlib/complex/t/amdgus.tex

Mehr

einlesen n > 0? Ausgabe Negative Zahl

einlesen n > 0? Ausgabe Negative Zahl 1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen

Mehr

Physikalische Simulationen mit. 9. Vorlesung GPU Programmierung Thorsten Grosch

Physikalische Simulationen mit. 9. Vorlesung GPU Programmierung Thorsten Grosch Physikalische Simulationen mit CUDA 9. Vorlesung g Thorsten Grosch Übersicht Verschiedene physikalische Simulationen mit CUDA Deformationen Wärmeausbreitung Lichtausbreitung Können oft parallelisiert werden

Mehr

Interaktive Globale Beleuchtung nach dem Antiradiance-Verfahren mittels der Open Computing Language (OpenCL)

Interaktive Globale Beleuchtung nach dem Antiradiance-Verfahren mittels der Open Computing Language (OpenCL) Interaktive Globale Beleuchtung nach dem Antiradiance-Verfahren mittels der Open Computing Language (OpenCL) Verteidigung der Belegarbeit Andreas Stahl Zielstellung Globales Beleuchtungsverfahren für die

Mehr

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13 C++ Teil 7 Sven Groß 30. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 30. Nov 2015 1 / 13 Themen der letzten Vorlesung Zeiger, Felder (Wdh.) dynamische Speicherverwaltung Sven Groß (IGPM, RWTH Aachen)

Mehr

Der Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, 27.03.2014, Ingo Josopait

Der Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, 27.03.2014, Ingo Josopait Der Goopax Compiler GPU-Programmierung in C++ AMD R9 290X: 5.6 TFLOPS (SP MulAdd) Programmierung ~10000 Threads Entwicklungsumgebungen Entwicklungsumgebungen CUDA, OpenCL Compiler: kernel GPU Maschinencode

Mehr

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke, 2013-05-08

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke, 2013-05-08 Parallele Algorithmen mit OpenCL Universität Osnabrück, Henning Wenke, 2013-05-08 Aufräumen Ressourcen in umgekehrter Abhängigkeitsreihenfolge freigeben Objekte haben Reference-Count (RC), initial 1 clrelease

Mehr

High Performance Computing I WS 2015/2016

High Performance Computing I WS 2015/2016 High Performance Computing I WS 2015/2016 Andreas F. Borchert und Michael Lehn Universität Ulm 8. Februar 2016 Parallelisierung mit Hilfe grafischer Prozessoren 2 Schon sehr früh gab es diverse Grafik-Beschleuniger,

Mehr

Parallelisierung der Matrixmultiplikation

Parallelisierung der Matrixmultiplikation Ein Beispiel für parallele Algorithmen Ivo Hedtke hedtke@math.uni-jena.de www.minet.uni-jena.de/~hedtke/ ehem. Hiwi am Lehrstuhl für Wissenschaftliches Rechnen (Prof. Dr. Zumbusch) Institut für Angewandte

Mehr

Beispielvortrag: HPCG auf Intel Haswell-EP

Beispielvortrag: HPCG auf Intel Haswell-EP Beispielvortrag: HPCG auf Intel Haswell-EP Johannes Hofmann 1 Seminarvortrag Architekturen von Multi- und Vielkern-Prozessoren Erlangen, 19.4.2016 1 Computer Architecture, University Erlangen-Nuremberg

Mehr