PGI Accelerator Model

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

Praktikum: Paralleles Programmieren für Geowissenschaftler

Parallele Programmierung mit OpenMP

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

OpenCL. OpenCL. Boris Totev, Cornelius Knap

OpenCL Implementierung von OpenCV Funktionen

GPGPU mit NVIDIA CUDA

Masterpraktikum Scientific Computing

Optimierung eines neuen Logarithmic-Search-Verfahrens zum Image Mosaicing unter Einsatz des CUDA-Frameworks

Projektseminar Parallele Programmierung

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

Multicore-Architekturen

Einige Grundlagen zu OpenMP

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

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

Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP

Programmierung von Many-Cores. Seminar: Software Engineering für Exascale Computing

Efficient Matrix Inversion in CUDA

Parallele Programmierung mit GPUs

GPU-Computing im Rahmen der Vorlesung Hochleistungsrechnen

Programmierung von Graphikkarten

1. Einführung in OpenMP

GPU-Computing. Michael Vetter

OpenMP. Viktor Styrbul

Leistungs- und Geschwindigkeitssteigerung. Dipl.-Ing. Sebastian F. Kleinau Applikationsingenieur

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

Paralleles Rechnen: Multicores, Playstation 3, Rekonfigurierbare Hardware

Beschreiben Sie die Eigenschaften der verschiedenen Rechnertypen an Hand:

Programmierbeispiele und Implementierung. Name: Michel Steuwer

Tag der Umweltmeteorologie Michael Kunz

Aufgabe 1 Entwicklung einer Virtuellen Maschine

Aktuelle Trends und Herausforderungen in der Finite-Elemente-Simulation

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

Shared-Memory Parallelisierung von C++ Programmen

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

Parallel Regions und Work-Sharing Konstrukte

OpenMP - Threading- Spracherweiterung für C/C++ Matthias Klein, Michael Pötz Systemprogrammierung 15. Juni 2009

Grafikkarten-Architektur

Seminar GPU-Programmierung/Parallelverarbeitung

I Grundlagen der parallelen Programmierung 1

Exascale Computing. = Exascale braucht Manycore-Hardware...und was für Software??? 46/58

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

Moderne parallele Rechnerarchitekturen

Einführung in die Parallele Programmierung

Hochleistungsrechnen Hybride Parallele Programmierung. Prof. Dr. Thomas Ludwig Universität Hamburg Informatik Wissenschaftliches Rechnen

Staff. Tim Conrad. Zeitplan. Blockseminar: Verteiltes Rechnen und Parallelprogrammierung. Sommer Semester Tim Conrad

Die beste Infrastruktur ist nur so schnell, wie der Code der darauf läuft. Fallbeispiel Wettervorhersage

Intel Cluster Studio. Michael Burger FG Scientific Computing TU Darmstadt

Introduction Workshop 11th 12th November 2013

Grundlagen der Parallelisierung

Algorithmen mit Python

Cloud-Computing. 1. Definition 2. Was bietet Cloud-Computing. 3. Technische Lösungen. 4. Kritik an der Cloud. 2.1 Industrie 2.

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

Orientierungsveranstaltungen 2009 Informatikstudien der Universität Wien

Threads und OpenMP. Frank Mietke Cluster- & Gridcomputing Frank Mietke 7/4/04

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

Programming Models for Cell BE

1 Einleitung. 2 Parallelisierbarkeit von. Architektur

Das Prinzip der kleinsten Überraschung Konfiguration des neuen HPC-Clusters am RRZ

Entwicklungstand der GUI

Paralleles Rechnen. (Architektur verteilter Systeme) von Thomas Offermann Philipp Tommek Dominik Pich

Blockseminar: Verteiltes Rechnen und Parallelprogrammierung. Sommer Semester Tim Conrad

Angebote der Informatik 2 für Ihre Vertiefung à Fach Programmiersysteme. Prof. Dr. Michael Philippsen

Manycores: Hardware und Low-Level Programmierung

Intel 80x86 symmetrische Multiprozessorsysteme. Eine Präsentation im Rahmen des Seminars Parallele Rechnerarchitekturen von Bernhard Witte

Kommentierung in C. Kommentierung in C. Von Sebastian Rothe 1/26. Kommentierung in C

Programmierung von Many-Cores

Eine kurze Geschichte der Grafikkarten

LabVIEW Real Time Hands on

CUDA Nvidia s Parallel Programming Language

User Level Device Driver am Beispiel von TCP

4. Parallelprogrammierung

Impulse C. Seminar Ausgewählte Themen in Hardwareentwurf und Optik. Steffen Liebscher, HWS 2009/2010. Steffen Liebscher

Installationsanleitung pixel-fox

Thema: Hardware-Shader

Untersuchung und Vorstellung moderner Grafikchiparchitekturen

Bibliotheks-basierte Virtualisierung

Nutzung paralleler Prozesse bei der Umweltsimulation

Im Kapitel Resourc Manager werden die verschiedenen Möglichkeiten der Überwachung von Messwerten eines Server oder Benutzers erläutert.

Beispiel Parallelisierung 2D Laplace. Lagrange Formulierung/Hyperelastisches Material. Finite Differenzen Diskretisierung

Virtualisierung im Echtzeitbereich. Andreas Hollmann FH Landshut EADS Military Air Systems

C C. Hochleistungsrechnen (HPC) auf dem Windows Compute Cluster des RZ der RWTH Aachen. 1 WinHPC Einführung Center. 31.

Computational Biology: Bioelektromagnetismus und Biomechanik

Programmierung von Multicore-Rechnern

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

Universität Karlsruhe (TH)

Simplivity Rechenzentrum in a Box

Busse. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2008/2009

Parallele Programmierung mit OpenMP

Current and Emerging Architectures Multi-core Architectures and Programming

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

Die IBM Netezza Architektur für fortgeschrittene Analysen

0. Einführung. C und C++ (CPP)

Grundlagen der Rechnerarchitektur

Assembler - Einleitung

CONCURRENCY MODELS. Auf der Suche nach dem heiligen Gral der ManyCores Peter Sturm. (c) Peter Sturm, Universität Trier

OpenMP am Beispiel der Matrizenmultiplikation

DIPLOMARBEIT. Entwurf und Implementierung eines modularen USB-Stacks für eingebettete Controller ohne Betriebssystem. Uwe Pfeiffer

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

Effizientes Memory Debugging in C/C++

Transkript:

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 Das PGI Accelerator Modell Eigenschaften einer NVIDIA GPU Funktionsweise Fazit Philip Höhlein, Nils Werner 2

Übersicht Motivation Das PGI Accelerator Modell Eigenschaften einer NVIDIA GPU Funktionsweise Fazit Philip Höhlein, Nils Werner 3

Motivation GPUs bieten hohen Performancegewinn bei parallelisierbaren Schleifen Fehlende Portabilität existierender Lösungen (CUDA, OpenCL,...) Umständliche Erzeugung der Schnittstellen und manuelle Allozierung des GPU-Speichers Daher wurde PGI Accelerator entworfen... Philip Höhlein, Nils Werner 4

Motivation Unterstützung für NVIDIA Familie (weitere in Entwicklung) Zusatz für Hochsprachen C und Fortran Programmieren der GPU alleine mit Pragmas Code zum Speicher Allozieren u. Kopieren wird vom Compiler automatisch generiert Schleifen werden automatisch in Kernels umgewandelt und zur GPU übertragen Spezielle Compiler PGCC und PGFortran Philip Höhlein, Nils Werner 5

Übersicht Motivation Das PGI Accelerator Modell Eigenschaften einer NVIDIA GPU Funktionsweise Fazit Philip Höhlein, Nils Werner 6

Das PGI Accelerator Modell OpenMP-Ähnliche Syntax #pragma in C #pragma acc region { } [...] Sentinals in Fortran!$acc region [...]!$acc end region Philip Höhlein, Nils Werner 7

Das PGI Accelerator Modell Regionen: (compute) region: Auswahl der Schleifen und zu kopierenden Daten data region (optional): Manuelle Kopieranweisungen - copy: Kopiere Variable zur GPU und anschließend zurück - local: Erzeuge lokale Variablen auf GPU - copyin: Kopiere Variable zur GPU und nicht zurück loop (optional): Optionen für die direkt folgende Schleife Philip Höhlein, Nils Werner 8

Das PGI Accelerator Modell Beispiel:!$acc data region copy(a(1:n,1:m)) &!$acc& local(b(2:n 1,2:m 1)) copyin(w(2:n 1)) do while(resid.gt.tol) resid = 0.0!$acc region do i = 2, n 1 do j = 2, m 1 b(i,j) = 0.25*w(i)*(a(i 1,j)+a(i+1,j)+a(i,j 1)+a(i,j+1)) enddo enddo do i = 2, n 1 do j = 2, m 1 resid = resid + (b(i,k) a(i,j))**2 a(i,j) = b(i,j) enddo enddo!$acc end region enddo!$acc end data region Philip Höhlein, Nils Werner 9

Übersicht Motivation Das PGI Accelerator Modell Eigenschaften einer NVIDIA GPU Funktionsweise Fazit Philip Höhlein, Nils Werner 10

Eigenschaften einer NVIDIA GPU... Multiprozessor Multiprozessor Multiprozessor Shared Memory Shared Memory Shared Memory GPU Speicher Host Speicher PCI Express Philip Höhlein, Nils Werner 11

Eigenschaften einer NVIDIA GPU Kernel Grid Block Block Block Threads Warp Threads Threads Block Block Block Threads Threads Threads Philip Höhlein, Nils Werner 12

Übersicht Motivation Das PGI Accelerator Modell Eigenschaften einer NVIDIA GPU Funktionsweise Fazit Philip Höhlein, Nils Werner 13

Funktionsweise 1. Finden von Parallelisierungsmöglichkeiten Suchregionen werden z.b. mittels #pragma acc vom Programmierer festgelegt Feedback wird zu Kompilierungszeit gegeben Philip Höhlein, Nils Werner 14

Funktionsweise 2. Abbilden der parallelen Schleifen auf die Hardware Jede Schleife wird auf 2 oder mehr verschachtelte Schleifen abgebildet Zwischenliegende Schleifen werden umsortiert um Stride-1 Speicherzugriffe zu ermöglichen Ggf. wird innerste Schleife abgerollt Anzahl Threads pro Block wird so angepasst um sämtliche MPs (min. ein Block pro MP!) auszulasten Daten für den Shared Memory werden auswählt Philip Höhlein, Nils Werner 15

Funktionsweise Unter Beachtung der User Direktiven: Äußerste Schleifen werden auf Blockindexraum abgebildet Gleichzeitig auf mehreren MPs MIMD-Parallelisierung Innerste Schleifen werden auf Threadindexraum abgebildet Gleichzeitig in einem Multiprozessor SIMT/Vektor-Parallelisierung Philip Höhlein, Nils Werner 16

Funktionsweise 3. Generierung und Optimierung des Kernel-Codes Maximale Anzahl der Threads pro Block festgelegt durch deren Resourcenbedarf (Shared Memory + Register) Compiler probiert 1-, 2- und 3-dimensionale Blockformen Maximal 512 Threads pro Block möglich: Sämtliche möglichen Blockformen innerhalb der Limits finden Philip Höhlein, Nils Werner 17

Funktionsweise Blockform wird gewählt nach 1 Plan mit den wenigsten Speicherzugriffen 2 Falls gleich, Plan mit den wenigsten zufälligen Speicherzugriffen 3 Falls gleich, Plan mit der größten Blockgröße 4 Falls gleich, Plan mit der größten Verschachtelungstiefe 5 Falls gleich, Plan mit kleinstem Speicherbedarf 6 (weitere kleinere, Unentschieden abwendende Regeln) Philip Höhlein, Nils Werner 18

Funktionsweise Beispiel do i = 2, n 1 do j = 2, m 1 b(i,j) = enddo enddo do i0 = 2, n 1, bi0!blockindex x do j0 = 2, m 1, bj0!blockindex y do i1 = i0, min(n 1, i0+bi0 1), bi1!sequentiell do j1 = j0, min(m 1, j0+bj0 1), bj1!sequentiell do i = i1, min(n 1, i1+bi1 1)!Threadindex x do j = j1, min(m 1, j1+bj1 1)!Threadindex y b(i,j) = enddo enddo enddo enddo enddo enddo Philip Höhlein, Nils Werner 19

Funktionsweise do i = 2, n-1 do j = 2, m-1 Philip Höhlein, Nils Werner 20

Funktionsweise do i0 =... do j0 =... do i1 =... do j1 =... do i =... do j =... Zum Beispiel: i0, j0 in 100er- Schritten i1,j1 in 10er- Schritten i, j in 1er-Schritten Philip Höhlein, Nils Werner 21

Funktionsweise Ausschnitt aus Aufteilung der Daten in x- und y-indizes Philip Höhlein, Nils Werner 22

Funktionsweise Feedback zu Kompilierzeiten smooth: 3, PGI Unified Binary version for tp=k8 64e ta=host 10, Loop interchange produces reordered loop nest: 11,10... smooth: 3, PGI Unified Binary version for tp=k8 64e ta=nvidia 8, Generating copyout(a(2:n 1,2:m 1)) Generating copyin(b(1:n,1:m)) Generating copyout(b(2:n 1,2:m 1))... Philip Höhlein, Nils Werner 23

Funktionsweise Feedback zu Kompilierzeiten for( i = 0; i < n 1; ++i ){ y = a[i+1]; b[i] = x + y; x = y; } >> 48, Loop carried scalar dependence for 'x' for( i = 0; i < n 1; ++i ){ b[i] = a[i] + a[i+1]; } Philip Höhlein, Nils Werner 24

Funktionsweise Feedback zu Kompilierzeiten for( i = 0; i < n; ++i ){ for( j = 0; j < n; ++i ){ a[j] = b[i][j] * w + c[i]*d[j]; if( a[j] > 0 ) p[i] = a[j]; } } >> Parallelization would require privatization of array 'a[0:n 1]' #pragma acc for private(a[0:n 1]) Philip Höhlein, Nils Werner 25

Funktionsweise Feedback zu Kompilierzeiten Accelerator Kernel Timing data c5.c test 32: region entered 1 time time(us): total=1411909 init=1408006 region=3903 kernels=44 data=3859 w/o init: total=3903 max=3903 min=3903 avg=3903 35: kernel launched 1 times grid: [7x7] block: [16x16] time(us): total=28 max=28 min=28 avg=28 39: kernel launched 1 times grid: [7x7] block: [16x16] time(us): total=16 max=16 min=16 avg=16 Philip Höhlein, Nils Werner 26

Übersicht Motivation Das PGI Accelerator Modell Eigenschaften einer NVIDIA GPU Funktionsweise Fazit Philip Höhlein, Nils Werner 27

Fazit PGI Accelerator versucht Auf existierenden Sprachen aufzubauen Den Anwender mit Feedback zu unterstützen Nicht Stride-1 Zugriffe zu vermeiden Portabel zu sein Noch nicht portabel z.b. zu ATI oder Intel Larrabee Planungen: Abbildung auf OpenMP, Standard Multicore funktioniert nur mit Fortran und C, kein C++, keine Structs Fehlt die feingranulare manuelle Optimierbarkeit z.b. von CUDA, Code ist meist langsamer Philip Höhlein, Nils Werner 28

Quellen [1] WOLFE, M. Implementing the PGI Accelerator Model (2010) [2] LEBACK, B., NAKAMOTO S., WOLFE, M. An Accelerator Programming Model for Multicore (2009) [3] WOLFE, M. et al. The PGI Accelerator Programming Model on NVIDIA GPUs (2009) http://www.pgroup.com/accelerate [4] BRADLEY, T. Advanced Cuda Optimization (2010) http://www.gris.informatik.tu-darmstadt.de/cuda-workshop/slides.html Philip Höhlein, Nils Werner 29

Vielen Dank für die Aufmerksamkeit! Noch Fragen? Philip Höhlein, Nils Werner 30