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

Ähnliche Dokumente
OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

GPU-Programmierung: OpenCL

CUDA Workshop. Ausblick. Daniel Tenbrinck

Rheinisch-Westfälische Technische Hochschule Aachen. Seminararbeit

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

> High-Level Programmierung heterogener paralleler Systeme

Stream Processing und High- Level GPGPU Sprachen

Raytracing in GA mittels OpenACC. Michael Burger, M.Sc. FG Scientific Computing TU Darmstadt

GPGPU Basiskonzepte. von Marc Kirchhoff GPGPU Basiskonzepte 1

Computergrafik Universität Osnabrück, Henning Wenke,

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

Hardware-unabhängige Beschleunigung von Medizinischer Bildverarbeitung mit OpenCL

Hardware-unabhängige Beschleunigung von Medizinischer Bildverarbeitung mit OpenCL

General Purpose Computation on GPUs

Masterpraktikum Scientific Computing

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

Hot Topics. 18. Vorlesung

Java-Grundkurs für Wirtschaftsinformatiker

OpenCL Implementierung von OpenCV Funktionen

GPGPU-Programmierung

OpenCL. OpenCL. Boris Totev, Cornelius Knap

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

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

CUDA. Philip Höhlein, Nils Werner Supervision: R. Membarth, P. Kutzer, F. Hannig. Hardware-Software-Co-Design Universität Erlangen-Nürnberg

Masterpraktikum Scientific Computing

Compute Unified Device Architecture CUDA

Java-Grundkurs für rtschaftsinformatiker

GPU Programmierung 6. Juli 2004 M. Christen, T. Egartner, P. Zanoni

Vergleich von Forward und Deferred Rendering

CE-Bachelor Studiengang

PRIP-Preis. Effizientes Object Tracking durch Programmierung von Mehrkernprozessoren und Grafikkarten

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

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

GPGPU-Programmierung

Computer Graphics Shader

Memory Models Frederik Zipp

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

Untersuchung und Vorstellung moderner Grafikchiparchitekturen

Computergrafik Universität Osnabrück, Henning Wenke,

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

Visuelle Simulation eines Radiosity Algorithmus und ihre Anwendung in Lernprozessen

Hochleistungsrechnen auf dem PC

Probelektion zum Thema. Shadow Rendering. Shadow Maps Shadow Filtering

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

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

Grundlagen von CUDA, Sprachtypische Elemente

ÜBUNGS-BLOCK 7 LÖSUNGEN

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

Java als erste. Programmiersprache. Java 2 Plattform. Von Prof. Dr. Joachim Goll Cornelia Weiß Peter Rothländer. 2., durchgesehene Auflage

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

Implementierung zweier Algorithmen mittels OpenCL auf Grafikkarten

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

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

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

Thema: Hardware-Shader

TensorFlow Open-Source Bibliothek für maschinelles Lernen. Matthias Täschner Seminar Deep Learning WS1718 Abteilung Datenbanken Universität Leipzig

3D-Oberflächen-Rekonstruktion und plastisches Rendern aus Bilderserien

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

Parallel Computing in der industriellen Bildverarbeitung

Crashkurs C++ - Teil 1

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

Informatik-Seminar. Auftakt. Informatik. Grundlagen

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

Multicore und mobile, stromsparende Anwendungen ein Widerspruch? Hubert Hafner Product Marketing

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

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

Kick-Off Paralleles Programmieren

Matrikelnr. Name. Vorname

Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs)

Christoph Niederseer, Michaela Mayr, Alexander Aichinger, Fabian Küppers. Wissenschaftl. Arbeitstechniken und Präsentation

Fachgebiet Programmiermethodik Prof. Dr. Claudia Leopold. Seminar Programmierung von Grafikkarten. GPGPU Basiskonzepte. von.

GPGPU mit NVIDIA CUDA

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

Microsoft.NET Framework & Component Object Model. ein Vortrag von Florian Steuber

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

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

Rendering großer Punktwolken mittels Out-of-Core LOD-Hierarchien

Multi-threaded Programming with Cilk

High-Performance Computing mit FEMAG

Programmierbeispiele und Implementierung. Name: Michel Steuwer

Inhaltsverzeichnis. 4.9 Aufgaben... 63

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

OpenCL mit Aparapi. Seminararbeit. Studiengang: Scientific Programming. 1. Betreuer: Prof. Ulrich Stegelmann

PGI Accelerator Model

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

Seminar Ausgewählte Themen der medizinischen Visualisierung

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

Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP

Parallele Programmierung mit C++ SS 2011

Grafikkarten-Architektur

Wiederholung. Vorlesung GPU Programmierung Thorsten Grosch

Volumenrendering mit CUDA

GPU Architektur CUDA - OpenCL

Seminar: Multi-Core Architectures and Programming

Aufgabenstellung zum Projektseminar Parallele Programmierung im WS 2017/2018

Partitionierung von rechenintensiven Aufgaben zwischen FPGA und CPUs

Multi- und Many-Core

Seminar GPU-Programmierung/Parallelverarbeitung

Systemsoftware (SYS) Fakultät für Informatik WS 2007/2008 Christian Baun. Übungsklausur

Transkript:

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

Zielstellung Globales Beleuchtungsverfahren für die OpenCL umsetzen. Erfahrungen sammeln, Integration ins CGV- Framework. Ausgewähltes Verfahren: Antiradiance

Grundlagen Antiradiance-Verfahren: Implicit visibility and antiradiance for interactive global illumination. Dachsbacher et al. 2007 Link-Erzeugung auf der GPU: Data-parallel hierarchical Link Creation for Radiosity. Meyer et al., 2009

Antiradiance Analog zu Radiosity-Verfahren: Einteilung der Szene in Patch-Hierarchie Verknüpfen der Patches zum Lichttransport Globale Richtungsdiskretisierung der Hemisphären (Bins).

Antiradiance Beschleunigungsansatz: Verzicht auf Sichtbarkeitsberechnung bei Verknüpfungen. Negative Leuchtstärke wird von Patch-Rückseite abgestrahlt.

Emitter-Patch Links AR-Link

Kern des Verfahrens,*./01 2"34*4/0"3# *56)*53#!"#$"#% &'()*'+,*--!(/*'+,*-- 73#834"#%

OpenCL Programmieren verschiedener Prozessortypen, plattformunabhängig. Kernels in C-Programmiersprache. Einschränkungen: keine Rekursion, kein dynamischer Speicher innerhalb Kernels. Programme werden zur Laufzeit kompiliert. Scheduling durch die OpenCL-Runtime, Queue-basiert.

OpenCL: Potential Ablösung von CUDA, ATI-Stream, Shadern bei der Programmierung von GPUs. Vereinfachung der Programmierung parallelisierter und vektorisierter Programme, auch auf CPUs. Lese- & Schreib-Zugriff auf 2D- und 3D-OpenGL- Textur-Objekte.

Umsetzung

Kollaborationsdiagramm!3*'* 9*:&*2%; >*"0*%,&*+6%*' -"#./0*12 9*:&*2%; <6%32&'=",06%&"'!"#4*, 1%*##%;!"#$%&"';&';+*,;!:*'*;+6,!"#$%&"'( )*'+*,*, 9&*%*%;>?@;$'+; 7*,86#%*% 5'%&,6+&6'3*( 7&*8

Kollaborationsdiagramm!3*'* 9*:&*2%; >*"0*%,&*+6%*' -"#./0*12 9*:&*2%; <6%32&'=",06%&"'!"#4*, 1%*##%;!"#$%&"';&';+*,;!:*'*;+6,!"#$%&"'( )*'+*,*, 9&*%*%;>?@;$'+; 7*,86#%*% 5'%&,6+&6'3*( 7&*8

Kollaborationsdiagramm!3*'* 9*:&*2%; >*"0*%,&*+6%*' -"#./0*12 9*:&*2%; <6%32&'=",06%&"'!"#4*, 1%*##%;!"#$%&"';&';+*,;!:*'*;+6,!"#$%&"'( )*'+*,*, 9&*%*%;>?@;$'+; 7*,86#%*% 5'%&,6+&6'3*( 7&*8

Kollaborationsdiagramm!3*'* 9*:&*2%; >*"0*%,&*+6%*' -"#./0*12 9*:&*2%; <6%32&'=",06%&"'!"#4*, 1%*##%;!"#$%&"';&';+*,;!:*'*;+6,!"#$%&"'( )*'+*,*, 9&*%*%;>?@;$'+; 7*,86#%*% 5'%&,6+&6'3*( 7&*8

C++/CPU-Solver Dient als Referenz-Implementierung des Verfahrens. Benutzt rekursive Algorithmen. Single-Threaded.

OpenCL-Solver OpenCL-Setup Erzeugt und befüllt Speicherpuffer Veranlasst Kernel-Scheduling Parallelisiertes Linking und iterative Beleuchtungsrechnung

Problem Parallelisierte Beleuchtungsrechnung mittels Shooting verursacht Race-Conditions. Thread 1 T 2 T 3 Meyer et al: CUDA-Atomic- Operations. Nachteile: nur für Integer- Datentypen, langsam, wirkt sich bei jeder Iteration aus.

Lösung Parallele Gathering Radiosity! Sortiere und Zähle Verknüpfungen pro Empfänger-Patch (einmalig). T 1 T 2 Gathering: Sammle parallel pro Patch die Beleuchtungswerte der Links ein. Vorteile: einmaliger Vorgang. Volle Unterstützung von Float. Nachteil: Thread-Lebensdauer schwer abzuschätzen.

Ergebnisse

Renderer konstant bilinear blending

Renderer konstant bilinear blending

Renderer konstant bilinear blending

Renderer konstant bilinear blending

Laufzeiten - Linking Bins 64 128 256 512 4,3 ms 7,8 ms 26,8 ms 20,7 ms 76,9 ms 46,4 ms 171,9 ms 420,7 ms 961,5 ms 281,7 ms C++ OpenCL CPU OpenCL GPU 1718,7 ms 813,0 ms 1 ms 10 ms 100 ms 1000 ms Laufzeit (log)

64 3,4 ms 4,2 ms Laufzeiten - Iteration 148,7 ms C++ OpenCL CPU OpenCL GPU Bins 128 256 8,4 ms 5,2 ms 18,9 ms 8,9 ms 327,6 ms 692,4 ms 512 41,6 ms 17,3 ms 1311,7 ms 1 ms 10 ms 100 ms 1000 ms Laufzeit (log)

Bewertung Beleuchtungsrechnung unter OpenCL ist schon auf CPU bis zu 30x schneller als C++/CPU Vektorisierung, parallelisierung. GPU nur bis zu 2-3 mal schneller als CPU Speicherzugriffs-Muster z.z. wenig optimal. GPU-CL Treiber noch preview

Updateraten 1x Linking 1x Iteration 18,9 ms 8,9 ms 20,7 ms 692,4 ms 961,5 ms 281,7 ms 1 ms 10 ms 100 ms 1000 ms C++ OpenCL CPU OpenCL GPU OpenCL GPU für 7 Iterationen bei 256 Bins Nur Beleuchtung: 16 Hz Vollständig (inkl. Linking): 12 Hz

Demonstration

Diskussion OpenCL

OpenCL plattformunabhängig? Bei der Entwicklung ausschließlich OpenCL SDK von AMD/ATI benutzt, wegen CPU-Unterstützung. Erst seit Ende Dezember mehrere Plattformen auf einem System ansteuerbar (ICD - Installable Client Driver). Auf NVIDIA nicht zum Laufen gebracht (kein ICD).

OpenCL - ausgereift? Seit 21.12.: ATI Stream v2.0 with OpenCL 1.0 Support Performanceunterschiede Beta 4 zu Final: GPU: + ~10% CPU: - ~10% Stabilität, Speicherlecks wurden ausgebessert.

Aufwand Programmierung in OpenCL ist völlig anderes Paradigma als normales C++/CPU Übertragen der Algorithmen in nicht-rekursive Kernels, beschränkter Speicherzugriff. Der Host ist nur für Buchhaltung zuständig, d.h. Scheduling, Puffermanagement.

Ausblick

Erweiterungen Direkte Licht- und Schatteneffekte. Flexiblere Patch-Hierarchie-Erzeugung. Optimieren der verwendeten Kernels. Übertragen aller Verfahrensteile in die OpenCL.