Masterpraktikum Scientific Computing

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

Grundlagen von CUDA, Sprachtypische Elemente

Compute Unified Device Architecture CUDA

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

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

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

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

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

Programmierung von Graphikkarten

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

Parallele Programmierung mit GPUs

Eine kurze Geschichte der Grafikkarten

Programmierbeispiele und Implementierung. Name: Michel Steuwer

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

OpenCL. OpenCL. Boris Totev, Cornelius Knap

GPU-Programmierung: OpenCL

General Purpose Computation on GPUs

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

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

Compute Unified Device Architecture (CUDA)

Grafikkarten-Architektur

Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs)

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

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

Cuda Speicherhierarchie

GPGPU mit NVIDIA CUDA

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

Multicore-Architekturen

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

GPU-Computing. Michael Vetter

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

Seminar GPU-Programmierung/Parallelverarbeitung

OpenCL. Seminar Programmiersprachen im Multicore-Zeitalter Universität Siegen Tim Wiersdörfer

1 Einleitung. 2 Parallelisierbarkeit von. Architektur

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

OpenCL Implementierung von OpenCV Funktionen

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

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

Viele Rechenaufgaben können auf verschiedene CPUs und/oder Maschinen aufgeteilt und verteilt werden, um die Leistung zu steigern

GPGPU-Architekturen CUDA CUDA Beispiel OpenCL OpenCL Beispiel. CUDA & OpenCL. Ralf Seidler. Friedrich-Alexander-Universität Erlangen-Nürnberg

GPU-Computing im Rahmen der Vorlesung Hochleistungsrechnen

technische universität dortmund Lehrstuhl für Hochfrequenztechnik Übertragungssysteme

Hochleistungsrechnen Grafikkartenprogrammierung. Prof. Dr. Thomas Ludwig Universität Hamburg Informatik Wissenschaftliches Rechnen

Rechnerarchitektur (RA)

Intels Tick-Tock-Prinzip

GPUs. Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg

Vertiefungsrichtung Rechnerarchitektur

Automatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern

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

Propädeutikum. Dipl.-Inf. Frank Güttler

Digital Image Interpolation with CUDA

GPU-BESCHLEUNIGTE PACKUNGSOPTIMIERUNG. André Müller, Johannes J. Schneider, Elmar Schömer

Parallelisierung der Matrixmultiplikation

27. Januar 2016

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

Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP

GPGPUs am Jülich Supercomputing Centre

Linux-Cluster mit Raspberry Pi. Dr. René Richter Sächsische Studienakademie Dresden

SS08, LS12, Friedrich-Alexander-Universität Erlangen Florian Hänel, Frederic Pollmann HS Multicore Architectures and Programming GPU EVOLUTION

2. Der ParaNut-Prozessor "Parallel and more than just another CPU core"

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

Lösung der zweidimensionalen Wirbeltransportgleichung auf NVIDIA Grafikkarten - Bachelorarbeit -

MULTICORE- UND GPGPU- ARCHITEKTUREN

Präprozessor und make. einfache Makros Makros nehmen eine Textersetzung vor. Erst nach der Ersetzung muss gültiger C-Code vorliegen.

Entwicklung algorithmischer Skelette für CUDA am Beispiel von Affintiy Propagation

Einführung in die Parallele Programmierung

Neue Dual-CPU Server mit Intel Xeon Scalable Performance (Codename Purley/Skylake-SP)

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

Thema: Hardware-Shader

Seminarvortrag: Direktivenbasierte Programmierung von Beschleunigern mit OpenMP 4.5 und OpenACC 2.5 im Vergleich

Evolution of GPUs. Die Entwicklung der Graphics Processing Units. Marvin Kampf und Michael Moese. Seminar: Multi-Core Architectures and Programming

Cell Broadband Engine & CellSs: ein Programmiermodel für den Cell Prozessor

Prozessor- und Rechnerarchitekturen (Master)


Predator G3. Premium Design. Advanced Technology. Immersive entertainment

Ansätze 4. GPU. Echtzeit- Raytracing. Polygon- Rendering. Computerspiele Sommer (c) 2013, Peter Sturm, Universität Trier 1

Mehrprozessorarchitekturen

Untersuchung und Vorstellung moderner Grafikchiparchitekturen

Algorithmen für moderne Rechnerarchitekturen

OpenGL. (Open Graphic Library)

Bachelorthesis. Marc-Ruben Lorbeer. Analyse der NVIDIA CUDA-Architektur für die Implementierung von Signal- und Bildverarbeitungsalgorithmen

MITK-OpenCL: Eine Erweiterung für das Medical Imaging Interaction Toolkit

Deklarationen in C. Prof. Dr. Margarita Esponda

Praktikum: Paralleles Programmieren für Geowissenschaftler

Transkript:

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

Outline Organisatorisches Entwicklung General Purpose GPU Programming (GPGPU) C for CUDA conference, location, December 8, 2009 2

Organisatorisches Diese Woche: Programmierung mit NVidia CUDA Di, 15.12.09: Besprechung der Lösung Blatt 3 Di, 22.12.09: Ausgabe der Projektaufgabe Di, 12.01.09: Abgabe der Lösung zu CUDA conference, location, December 8, 2009 3

Outline Organisatorisches Entwicklung General Purpose GPU Programming (GPGPU) C for CUDA conference, location, December 8, 2009 4

Herkömmliche Implementierung der Graphik-Pipeline Figure: Klassische Graphikpipeline - Ein Prozessor (Shader) pro Stufe conference, location, December 8, 2009 5

Unified Architecture Herkömmlich Einschränkungen durch HW (fixed-function pipeline), gleichzeitig z.t. redundante Logik NVidia Lösung: Unified Device Architecture (UDA) Implementierungen: G80 (2006), GT200 (2007), Fermi (2009) ATI / AMD: Unified Shader Architecture, z.b. HD-2000 Reihe, HD-3000 Reihe conference, location, December 8, 2009 6

Vergleich CPU - GPU Intel Xeon X5355 NVidia Tesla C1060 (T10) Clock Speed 2.66 GHZ 1296 #Cores / SPEs 4 240 theor. Peak Perf. 85 933 Price ca. 1100 USD 1200 EUR conference, location, December 8, 2009 7

GPU Programming Shader Programmierung, sehr hardwarenah: Microsoft HLSL NVidia Cg OpenCL (Open Computing Language) Heterogene, parallele Platformen mit CPU s, GPU s, DSP s,... 8. Dezember 2008 Apple, Intel, IBM, Nvidia, AMD Brook (Stanford University) NVidia: CUDA (C for Cuda, Cuda Driver API, CUBLAS, CUFFT)... conference, location, December 8, 2009 8

Outline Organisatorisches Entwicklung General Purpose GPU Programming (GPGPU) C for CUDA conference, location, December 8, 2009 9

C for CUDA conference, location, December 8, 2009 10

C for CUDA - Übersetzung Cuda-Programm wird als C-Programm mit geringfügig erweiterter Syntax geschrieben. nvcc test.cu -o test conference, location, December 8, 2009 11

Kernels: Bsp. Vektoraddition global void vecadd(float* A, float* B, float* C) { int i = threadidx.x; C[i] = A[i] + B[i]; } Kernel wird parallel von N Threads ausgeführt In Kernel Built-in Variables verfügbar (threadidx.x) Kernels sind C-Funktionen mit zusätzlichem Modifier Modifier gibt an, wo Funktion lebt: global global : wird auf Graphikkarte ausgeführt, von Host aus aufgerufen device : kann nur von Kernels aufgerufen werden host : kann nur auf Host aufgerufen werden conference, location, December 8, 2009 12

Thread-Hierachie Threads werden in 1d/2d/3d Blöcke unterteilt, Blöcke liegen in 1d/2d Gittern; wird bei Aufruf des Kernels spezifiziert dim3 block(w, h, d); dim3 grid(w2, h2); mykernel<<<grid, block>>>(...); Konfiguration innerhalb Kernels durch built-in Variablen zugänglich threadidx Thread-Index blockidx Block-Index blockdim Dimensionen eines Blocks griddim Dimensionen des Grids Synchronisation innerhalb eines Blockes mit syncthreads() conference, location, December 8, 2009 13

Kernels global void vecaddgpu(float* A, float* B, float* C) { int i = threadidx.x; C[i] = A[i] + B[i]; } host void vecadd(int n, float* A, float* B, float* C) { dim3 grid(1); dim3 block(n); vecaddgpu<<<gid,block>>>(a, B, C); } Wie könnte eine Aufteilung für die Addition von n n Matrizen aussehen? Beachte: Einschränkungen durch HW (z.b. nur 512 Threads pro Block) conference, location, December 8, 2009 14

Speicher-Hierachie globaler Speicher langsam, nicht gecached shared memory: modifier shared außerdem: Textur-Speicher, Constant-Memory conference, location, December 8, 2009 15

Speicher-Verwaltung Allokation von globalem Graphikspeicher float* ptr; cudamalloc(&ptr, n * sizeof(float)); Kopieren cudamemcpy(void* target, void* source, int size, enum cudamemcpykind); cudamemcpyhosttohost cudamemcpyhosttodevice cudamemcpydevicetohost cudamemcpydevicetodevice Freigabe von globalem Graphikspeicher cudafree(void* ptr); conference, location, December 8, 2009 16

Error Checking and Debugging Alle Runtime-Funktionen geben Fehlercode zurück. Problematisch bei asynchronen Funktionsaufrufen. Daher: cudathreadsynchronize() in Verbindung mit cudagetlasterror(). Debugging: übersetze Code mit --device-emulation: Graphikkarte wird emuliert, Makro DEVICE_EMULATION definiert z.b. printf() oder Debugger möglich #ifdef DEVICE_EMULATION printf("variable i: %d\n", i); #endif conference, location, December 8, 2009 17

Performance - Hinweise Speicher: Verschmelzen von Zugriffen auf globalen Speicher Speicherart Bankkonflikte Figure: zu einem Speicherzugriff verschmolzen Figure: resultiert in 16 Speicherzugriffen (CUDA 1.0/1.1 conference, location, December 8, 2009 18

Performance - Hinweise Threads eines Blockes unterteilt in Warps a 32 Threads Code-Verzweigungen / ifs... genügend Blöcke Latenzen verbergen conference, location, December 8, 2009 19

Hinweise - Aufgaben Nutzung des Codes zum Einlesen einer.pgm-datei möglich, nachdem die Implementierung zum.cpp umbenannt wurde Entwicklung auf atsccs30 (Quadro NVS 290) Test auf gvs2.lrz-muenchen.de (Quadro FX 5800) Auf gvs2 existiert kein Reservierungssystem, daher: prüfe mit top last prüfe mit lsof /dev/nvi*, dass niemand sonst die Graphikkarten benutzt (Ausgabe 4 Zeilen) module load cuda module load gcc Nutzung von 4 GPUs auf gvs2 möglich! Große Bilder z.b. unter http://visibleearth.nasa.gov conference, location, December 8, 2009 20