Masterpraktikum Scientific Computing

Ähnliche Dokumente
Masterpraktikum Scientific Computing

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

Compute Unified Device Architecture CUDA

Grundlagen von CUDA, Sprachtypische Elemente

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

GPGPU-Programmierung

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

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

Programmierung von Graphikkarten

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

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

Eine kurze Geschichte der Grafikkarten

Parallele Programmierung mit GPUs

Programmierbeispiele und Implementierung. Name: Michel Steuwer

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

GPU-Programmierung: OpenCL

Ferienakademie Erik Muttersbach

Rheinisch-Westfälische Technische Hochschule Aachen. Seminararbeit

OpenCL. OpenCL. Boris Totev, Cornelius Knap

Stream Processing und High- Level GPGPU Sprachen

General Purpose Computation on GPUs

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

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

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

Grafikkarten-Architektur

Compute Unified Device Architecture (CUDA)

Cuda Speicherhierarchie

Multicore-Architekturen

GPGPU mit NVIDIA CUDA

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

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

Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs)

OpenCL Implementierung von OpenCV Funktionen

CUDA. (Compute Unified Device Architecture) Thomas Trost. May 31 th 2016

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

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

FPGA Beschleuniger. Your Name. Armin Jeyrani Mamegani Your Organization (Line #2)

Multi-Core Architectures and Programming. Bilateral Grid Filter

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

GPU-Computing. Michael Vetter

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

1 Einleitung. 2 Parallelisierbarkeit von. Architektur

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

Seminar GPU-Programmierung/Parallelverarbeitung

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

GPU Architektur CUDA - OpenCL

> High-Level Programmierung heterogener paralleler Systeme

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

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

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

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

Gliederung. Problemstellung Motivation Multi-Agenten Simulation GPU Programmierung Stand der Technik Abgrenzung

GPU-Computing im Rahmen der Vorlesung Hochleistungsrechnen

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

PGI Accelerator Model

Spezialprozessoren zur Übernahme Grafik-spezifischer Aufgaben, vorrangig der Bildschirmausgabe

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

Parallel Computing in der industriellen Bildverarbeitung

Prozessor- und Rechnerarchitekturen (Master)

Intels Tick-Tock-Prinzip

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

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

Rechnerarchitektur (RA)

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

Vertiefungsrichtung Rechnerarchitektur

Digital Image Interpolation with CUDA

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

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

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

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

27. Januar 2016

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

Hardware-unabhängige Beschleunigung von Medizinischer Bildverarbeitung mit OpenCL

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

Computer Graphics Shader

Parallelisierung der Matrixmultiplikation

Automatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

Mehrprozessorarchitekturen

GPGPUs am Jülich Supercomputing Centre

MULTICORE- UND GPGPU- ARCHITEKTUREN

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

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

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

Tools zur Programmierung mit C Software Entwicklung 1

Untersuchung und Vorstellung moderner Grafikchiparchitekturen

Hardware-unabhängige Beschleunigung von Medizinischer Bildverarbeitung mit OpenCL

Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP

Effizientes Memory Debugging in C/C++

Cilk Sprache für Parallelprogrammierung. IPD Snelting, Lehrstuhl für Programmierparadigmen

Parallelisierungspotentiale mit CUDA-Streams 387

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

Einführung in die Parallele Programmierung

Rechnerarchitektur (RA)

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

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

Numerik und Rechnen. Martin Heide & Dominik Holler. 12. Juni 2006

Transkript:

Masterpraktikum Scientific Computing High-Performance Computing Thomas Auckenthaler Wolfgang Eckhardt Technische Universität München, Germany

Outline Entwicklung General Purpose GPU Programming (GPGPU) C for CUDA conference, location, December 21, 2010 2

Herkömmliche Implementierung der Graphik-Pipeline Figure: Klassische Graphikpipeline - Ein Prozessor (Shader) pro Stufe conference, location, December 21, 2010 3

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 21, 2010 4

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 Table: Preise Mitte 2009 conference, location, December 21, 2010 5

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 21, 2010 6

Outline Entwicklung General Purpose GPU Programming (GPGPU) C for CUDA conference, location, December 21, 2010 7

C for CUDA conference, location, December 21, 2010 8

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

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 21, 2010 10

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 21, 2010 11

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<<<grid,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 21, 2010 12

Speicher-Hierachie globaler Speicher langsam, nicht gecached shared memory: modifier shared außerdem: Textur-Speicher, Constant-Memory conference, location, December 21, 2010 13

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 21, 2010 14

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 21, 2010 15

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 21, 2010 16

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

Fermi / CUDA 3.0 kein device emulation mode mehr cuda-gdb (erfordert Graphikkarte ohne X) memory-checker: Cuda error: Kernel Execution : unspecified launch failure. ========= Invalid read of size 4 ========= at 0x00000108 in gauss_cuda_kernel ========= by thread 917504 in block 1 ========= Address 0x000186a8 is out of bounds ========= ========= ERROR SUMMARY: 1 errors printf() als Befehl in HW unterstützt konfigurierbare, echte Caches ECC Speicherschutz 32 Threadprozessoren pro SM Gleichzeitige Ausführung von Kernels conference, location, December 21, 2010 18

Hinweise - Aufgaben Evtl. Nutzung von cudamallocpitch() Test auf gvs1.lrz-muenchen.de und gvs2.lrz-muenchen.de (Quadro FX 5800) Auf gvs1/2 existiert kein Reservierungssystem, daher: prüfe mit top last prüfe mit lsof /dev/nvi*, dass niemand sonst die Graphikkarten benutzt (Ausgabe 2 Zeilen) module load cuda (default 2.3) module load gcc Nutzung von 2 GPUs auf gvs2 möglich! Große Bilder z.b. unter http://visibleearth.nasa.gov conference, location, December 21, 2010 19