Massiv parallele Sichtbarkeitsberechnung


Die Modellierung des Energietransports durch Strahlung mithilfe eines mathematischen Modells erfordert notwendigerweise die Bestimmung der Sichtbarkeiten. D. h. es ist die Frage zu klären, ob ein Punkt auf der Oberfläche des Modells im „Schatten“ eines Strahlers liegt oder nicht.
Diese einfache Frage erweist sich als überaus rechenintensiv. Der Einsatz moderner Hardware, insbesondere von GPUs, kann hierbei die Rechenzeiten stark verkürzen. Bis Mitte der 2000er Jahre steuerten Grafikkarten ausschließlich den Monitor an. Mit dem ersten CUDA-Release Anfang 2007 folgte auch hier eine erstaunliche Entwicklung: der Prozessor der Grafikkarte (Graphics Processing Unit oder kurz GPU) kann nun spezielle Programme ausführen, so dass dieser als “Recheneinheit” neben der CPU zum Einsatz kommt. Die Entwicklung ist hier soweit fortgeschritten, dass Highend-Grafikkarten heute, für bestimmte Anwendungen, auf dem Niveau früherer Supercomputer rechnen. So veröffentlicht Nvidia eine Leistung von 34 TeraFLOPS bei doppelter und 67 TFlops bei einfacher Genauigkeit für das aktuelle GPU-Spitzenmodell Hopper H200. Der effiziente Einsatz von GPUs erfordert angepasste Algorithmen, die auf die massiv parallele Architektur der Grafikkarten abgestimmt sind.

Sichtbarkeitsproblem

Die Sichtbarkeiten eines Dreieck einer Triangulierung sind alle Dreiecksindizes, die die Definition der Sichtbarkeitsfunktion erfüllen. Für eine naive Auswertung der Definition liegt der Speicherplatzverbrauch in der Größenordnung \(\mathcal{O}(n^2/2)\). Das bedeutet für ein realistisches Beispiel mit 4 Millionen Dreiecken einen möglichen Arbeitsspeicherbedarf von ca. 29 TB, und das allein für die Sichtbarkeiten. Die Formfaktormatrix ist hier noch nicht berücksichtigt.

Die Problemstellung hat aber auch eine positive Eigenschaft: die Aufgabe ist trivial parallelisierbar. Das ist leicht einzusehen, denn die Ergebnisse der Sichtbarkeitsberechnung für ein Dreieck sind völlig unabhängig von anderen Rechenergebnissen. Nur die geometrische Lage der Dreiecke zueinander ist entscheidend. Diese Trivialparallelisierbarkeit eignet sich besonders gut für massiv parallele Hardware wie die GPU.

Um die Anforderung bzgl. Speicherplatz und Rechenzeit zu bewältigen, setzen wir gezielte Opti-mierungsstrategien ein. Dazu gehören die Nutzung effizienter Datenstrukturen, clusterbasierter Ansätze und spezialisierter Algorithmen, um den Speicherplatzbedarf erheblich zu reduzieren. Ein weiterer Beitrag dazu ist die Verwendung von Nvidias OptiX-Bibliothek. Nvidia-OptiX ist auf schnelle Ray-Tracing-Algorithmen spezialisiert und für die GPU optimiert. Das ist genau die Funktionalität, die wir für den Sichtbarkeitstest benötigen.

report
Wir haben neben der Cuda-Variante für die GPU auch eine spezielle Version für Intel Embree (Version 3) entwickelt, die jedoch ausschließlich auf der CPU läuft.

Zukünftige Entwicklung

Ab Version 4 ist Embree SYCL fähig, was einen bedeutenden Schritt in Richtung fortschrittlicher Programmierung darstellt. SYCL ermöglicht das sogenannte ‘Single Source Programming’, wodurch der gesamte Code in C++ geschrieben werden kann. Diese Herangehensweise ermöglicht eine nahtlose plattformübergreifende Programmierung, bei der der Code automatisch auf verschiedenen Plattformen, einschließlich CPU und GPU, ausgeführt werden kann.