GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2...

27
GPU-Programmierung OpenCL Referenzen GPU-Programmierung: OpenCL Markus Hauschild Seminar: Multicore Programmierung Sommerstemester 2009 04.06.2009 Markus Hauschild GPU-Programmierung: OpenCL

Transcript of GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2...

Page 1: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

GPU-Programmierung: OpenCL

Markus Hauschild

Seminar: Multicore ProgrammierungSommerstemester 2009

04.06.2009

Markus Hauschild GPU-Programmierung: OpenCL

Page 2: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Inhaltsverzeichnis

1 GPU-ProgrammierungEntwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

2 OpenCLEntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Markus Hauschild GPU-Programmierung: OpenCL

Page 3: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

GPU-Programmierung

Was ist GPU-Computing

Unter GPU-Computing versteht man die Nutzung der Grafikkartezur Berechnung allgemeiner Probleme.

Wieso

Gunstige Hardware durch die Verbereitung von PC-Spielen

Speedup um Faktor 10 bis 100 im Vergleich zu CPUs (beigeeigneten Anwendungen)

Markus Hauschild GPU-Programmierung: OpenCL

Page 4: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

Entwicklung von Grafikkarten

[Owe07]

Markus Hauschild GPU-Programmierung: OpenCL

Page 5: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

Einsatzgebiete von GPU-Computing

Allgemein

Streamcomputing

Anwendungen mit hoher Datenparallelitat

Beispiele

Signalverarbeitung

Audio/Bild/Video-Verarbeitung

Raytracing

Kryptographie

Physik-Simulation/Effekte

Markus Hauschild GPU-Programmierung: OpenCL

Page 6: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

Ubersicht

Sprachen und APIs

Shader in OpenGL/DirectX

BrookGPU

CUDA

OpenCL

Markus Hauschild GPU-Programmierung: OpenCL

Page 7: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

Shader in OpenGL/DirectX (1)

Entwicklung

Erste wissenschaftliche Nutzung mit Einfuhrung vonGleitkommazahlen in Shadern mit DirectX 9 kompatiblenGrafikkarten.

Vorteile/Neuerungen

Erstmalige Nutzung der Rechenleistung von Grafikkarten

Nachteile

Algorithmen als Pixel-Shader

Manuelles Ver- und Entpacken der Daten in Texturen

Texturdimension 2n × 2m, max 4096× 4096

Markus Hauschild GPU-Programmierung: OpenCL

Page 8: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

Shader in OpenGL/DirectX (2)

Als Beispiel fur die vorgestellten Sprachen soll die folgendeBerechnung in C dienen:

Berechnung in C

f o r ( i n t i =0; i <N; i ++){

z [ i ] = a l p h a ∗ x [ i ] + y [ i ] ;}

Markus Hauschild GPU-Programmierung: OpenCL

Page 9: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

Shader in OpenGL/DirectX (3)

Berechnung als Shader (in Cg)

f l o a t 4 saxpy (f l o a t 2 c o o r d s : TEXCOORD0,u n i f o r m samplerRECT t e x t u r e Y ,u n i f o r m samplerRECT t e x t u r e X ,u n i f o r m f l o a t a l p h a ) : COLOR

{f l o a t 4 y = texRECT ( t e x t u r e Y , c o o r d s ) ;f l o a t 4 x = texRECT ( t e x t u r e X , c o o r d s ) ;r e t u r n a l p h a ∗ x + y ;

}

Markus Hauschild GPU-Programmierung: OpenCL

Page 10: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

BrookGPU (1)

Entwicklung

Entwickelt an der Stanford University seit 2003.

Vorteile/Neuerungen

Einfuhrung des kernel

API vereinfacht kopieren von Daten in den/aus demGrafikspeicher

Markus Hauschild GPU-Programmierung: OpenCL

Page 11: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

BrookGPU (2)

Nachteile

BrookGPU erzeugt Shader, daher z.B. keine Nutzung desScratchpad moglich

Nur Streamcomputing moglich, d.h. keine Arrays alskernel-Parameter

Markus Hauschild GPU-Programmierung: OpenCL

Page 12: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

BrookGPU (3)

Berechnung als Brook kernel

k e r n e l v o i d k ( f l o a t y<>, f l o a t x<>,f l o a t a lpha , out f l o a t z<>)

{z = a l p h a ∗ x + y ;

}

Markus Hauschild GPU-Programmierung: OpenCL

Page 13: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

CUDA (1)

Vorteile/Neuerungen

Direkte Ausfuhrung auf der Hardware durch denGrafikkartentreiber

Gruppierung und Indizierung von Threads

Arrays statt Streams als Parameter

Nutzung weiterer Hardware Features wie z.B. dem Scratchpad

Nachteile

Lauft nur auf Nvidia Grafikkarten

Unzureichende Fehlerbehandlung in kerneln

Markus Hauschild GPU-Programmierung: OpenCL

Page 14: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Entwicklung von GrafikkartenEinsatzgebiete von GPU-ComputingEntwicklung von GPU-Computing

CUDA (2)

Berechnung als CUDA kernel

g l o b a l v o i d k ( f l o a t ∗ x , f l o a t ∗ y ,f l o a t a lpha , f l o a t ∗ z )

{i n t i = t h r e a d I d x . x +

blockDim . x ∗ b l o c k I d x . x ;z [ i ] = a l p h a ∗ x [ i ] + y [ i ] ;

}

Markus Hauschild GPU-Programmierung: OpenCL

Page 15: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Entwicklung

offener Stanard von der Khronos Group betreut

initiiert von Apple, AMD, Intel und Nvidia

Juni 2008: OpenCL working group bei Khronos eingerichtet

Dezember 2008: Spezifikation fertiggestellt

Markus Hauschild GPU-Programmierung: OpenCL

Page 16: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Architektur

[Khr09]

Markus Hauschild GPU-Programmierung: OpenCL

Page 17: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Execution Model (1)

Bestandteile eines OpenCL Programms

Host-Anwendung (Initialisierung, Speicherverwaltung, etc)

Kernel (enthalt den auf dem OpenCL-Device auszufuhrendenCode)

Kernel Ausfuhrung

Hostprogramm ruft kernel auf einem Indexraum mit1-3 Dimensionen auf

Eine Instanz eines kernels ist ein work-item

Work-items sind in work-groups aufgeteilt

Markus Hauschild GPU-Programmierung: OpenCL

Page 18: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Execution Model (2)

Markus Hauschild GPU-Programmierung: OpenCL

Page 19: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Command-queue

Command-queue

Kernelausfuhrung

Speichertransfer

Synchronisation

Markus Hauschild GPU-Programmierung: OpenCL

Page 20: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Speichermodell (1)

Markus Hauschild GPU-Programmierung: OpenCL

Page 21: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Speichermodell (2)

Adressraume

private - zu einem work-item gehorend

local - zu einer work-group gehorend

global - von allen work-items aus allen work-groups benutzbar

constant - nur lesender zugriff moglich

Markus Hauschild GPU-Programmierung: OpenCL

Page 22: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Spracheigenschaften

Kernel erlauben im wesentlichen C99, ohne

Funktionspointer

Rekursion

Arrays variabler Lange

structs

optionale Features

Gleitkommezahlen mit doppelter Genauigkeit

Atomare Funktionen (z.B. increment)

Markus Hauschild GPU-Programmierung: OpenCL

Page 23: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Vergleich mit CUDA

Unterschiede

API-Befehle ahneln sich, haben jedoch z.B. unterschiedlicheParameter

Pointer mussen in OpenCL mit einem address spacequalifier versehen werden

Command-Queues

OpenCL kompiliert kernel erst zur Laufzeit fur dieentsprechende Plattform

Markus Hauschild GPU-Programmierung: OpenCL

Page 24: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Beispiel

Berechnung als OpenCL kernel

k e r n e l v o i d k ( g l o b a l c o n s t f l o a t ∗ y ,g l o b a l c o n s t f l o a t ∗ x ,g l o b a l c o n s t f l o a t a lpha ,g l o b a l f l o a t ∗ z )

{i n t i n d e x = g e t g l o b a l i d ( 0 ) ;z [ i n d e x ] = a l p h a ∗ x [ i n d e x ] + y [ i n d e x ] ;

}

Markus Hauschild GPU-Programmierung: OpenCL

Page 25: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Besonderheiten

Unterstutzte Hardware

(neuere) Grafikkarten von AMD/ATI und Nvidia

Intel Larrabee

Cell

(multicore) CPUs

embedded/mobile Devices

Markus Hauschild GPU-Programmierung: OpenCL

Page 26: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

EntwicklungArchitekturSpracheigenschaftenVergleich mit CUDABeispielBesonderheitenVerfugbarkeit

Verfugbarkeit

AMD/ATI

Treiber angekundigt fur das zweite Halbjahr 2009.

Nvidia

Beta-Treiber verfugbar seit Ende April und zur Zertifizierungeingereicht.

Markus Hauschild GPU-Programmierung: OpenCL

Page 27: GPU-Programmierung: OpenCL€¦ · Einsatzgebiete von GPU-Computing Entwicklung von GPU-Computing 2 OpenCL Entwicklung Architektur Spracheigenschaften Vergleich mit CUDA Beispiel

GPU-ProgrammierungOpenCL

Referenzen

Referenzen

Khronos Group.OpenCL - The Open Standard for Heterogeneous ParallelProgramming, February 2009.Available online at http://www.khronos.org/developers/library/overview/opencl_overview.pdf.

John Owens.GPU Architecture Overview.SIGGRAPH, 2007.Available online at http://gpgpu.org/static/s2007/slides/02-gpu-architecture-overview-s07.pdf.

Markus Hauschild GPU-Programmierung: OpenCL