Back to results

Universität Bayreuth

Effiziente SPH-basierte Flüssigkeitssimulation mit Visualisierung auf einem GPU-Cluster

Abstract

dc:description.abstract

Dreidimensionale Flüssigkeitssimulationen sind in vielen Bereichen der Forschung und Entwicklung unverzichtbar. Eine sehr beliebte Methode für die dreidimensionale Flüssigkeitssimulation ist die sogenannte Smoothed-Particle-Hydrodynamics-Methode, welche kurz auch als SPH-Methode bezeichnet wird. Solche SPH-basierte Flüssigkeitssimulationen sind sehr rechenaufwändig. Dafür sind sie aber sehr gut parallelisierbar und besitzen einen mittelmäßigen Grad an Datenparallelität. Des Weiteren sind moderne GPUs parallele Rechner, welche die Instruktionen datenparallel per Single-Instruction-Multiple-Data (SIMD) abarbeiten. Deshalb sind sie für SPH-Simulationen gut geeignet. Auch sind die Speicherzugriffe einer SPH-Simulation extrem lokal. Deshalb eignen SPH-Simulationen sich auch sehr gut für einen GPU-Cluster. Es ist das Ziel der Masterarbeit eine SPH-Simulation auf einen GPU-Cluster zu implementieren, optimieren und untersuchen. Die Optimierungen und Untersuchungen sollen dabei im Hinblick auf die auf die Skalierbarkeit und die bestmögliche Ausnutzung der GPUs stattfinden. Des Weiteren ist für die Auswertung einer SPH-Simulation oft eine Visualisierung von Vorteil. Eine solche Visualisierung ist jedoch sehr rechenaufwändig. Deswegen beschäftigt sich die Arbeit zusätzlich damit, wie sie eine Visualisierung der SPH-Simulation in einem GPU-Cluster implementieren kann. Hierfür erklärt die Arbeit zunächst OpenGL- und CUDA-Grundlagen. Dafür wird als erstes der Hardware-Aufbau einer GPU erklärt. Auch wird die Ausführung von Programmen auf der GPU, den sogenannten Kernels, erläutert. Hierfür werden insbesondere die SIMT- beziehungsweise SIMD-Eigenschaften der GPU und die damit verbundene Warp-Ausführungseffizienz hervorgehoben. Ebenso wird erläutert, wie die GPU Latenzen überbrückt. Auch stellt die Arbeit die stark mit der Latenzüberbrückung verbundene Occupancy vor. Zudem wird auf die einzelnen Speicherbereiche einer GPU in CUDA eingegangen. Zusätzlich wird kurz die Programmierung von CUDA mit CUDA-C gezeigt. Schließlich demonstriert die Arbeit die grundlegende OpenGL-Funktionalität an einer einfachen OpenGL-Pipeline. Als Nächstes werden die physikalischen Grundlagen einer SPH-Simulation diskutiert. So diskretisiert ein SPH-Verfahren die Flüssigkeit zunächst durch einzelne Partikel. Dabei übernehmen die einzelnen Partikel die Strömungsgrößen der Flüssigkeit, die Dichte, und die Geschwindigkeit, an ihrer Position. Die Partikel dienen zudem als Stützstellen zur kurzreichweitigen Interpolation der Vektorfelder, Skalarfelder und Gradientenfelder von denjenigen Differentialgleichungen, welche die Flüssigkeit beschreiben. Für die Beschreibung der Flüssigkeit werden in dieser Arbeit die Kontinuitätsgleichung der Dichte und die Impulsgleichung verwendet. Durch die Interpolation wird die Ortsdiskretisierung ausgeführt, womit die SPH-Simulation die zeitlichen Änderungen der Strömungsgrößen der Partikel bestimmt. Da die Interpolation kurzreichweitig ist, handelt es sich bei ihr algorithmisch gesehen um ein Fixed-Radius-Near-Neighbors-Problem. Bei einem solchen Problem geht es immer darum, für jedes Partikel alle benachbarten Partikel innerhalb einer Cutoff-Distance zu finden. Anhand der gefundenen Nachbarn werden dann problemspezifische Berechnungen durchgeführt. Dabei ist zu beachten, dass die Lösung der Fixed-Radius-Near-Neighbors-Probleme bei einer SPH-Simulation immer einen Großteil der Rechenzeit ausmachen. Anschließend kann die Zeitdiskretisierung beziehungsweise Zeitintegration der zeitlichen Änderungen erfolgen, wofür die Arbeit das Prädiktor-Korrektor-Verfahren zweiter Ordnung verwendet. Mit Hilfe dieser Zeitintegration werden die Partikel dann bewegt. Danach beschreibt die Arbeit, wie die physikalischen Grundlagen zunächst in eine SPH-Simulation für eine einzige GPU umgesetzt werden. Für die Lösung der Fixed-Radius-Near-Neighbors-Probleme der SPH-Simulation wird eine Space-Partitioning-Datenstruktur benötigt. Die Arbeit verwendet eine spezielle Gitterdatenstruktur, in welche die Partikel einsortiert werden. Für die Konstruktion des Gitters wird ein atomarer Counting-Sort-Ansatz verwendet. Für die Berechnungen selbst verwendet die Arbeit den Linked-Cell-Ansatz. Bei ihm wird über die Partikel parallelisiert. Für jedes Partikel werden die benachbarten Gitterzellen nach Nachbarpartikeln innerhalb der Cutoff-Distance durchsucht, um mit ihnen die SPH-Interpolation ausführen zu können. Da die Fixed-Radius-Near-Neighbors-Berechnungen einen Großteil der Laufzeit des Programms ausmachen, wird versucht diese in Kombination mit dem verwendeten Linked-Cell-Ansatz weiter zu optimieren. Dabei wird besonderen Wert darauf gelegt, die Auswirkungen der limitierenden Latenzen zu reduzieren und die Datenparallelität zu erhöhen. Die Untersuchungen finden beispielhaft anhand von zwei Fixed-Radius-Near-Neighbors-Problemen aus der SPH-Simulation statt. Das eine Problem berechnet die zeitlichen Änderungen der SPH-Simulation, während das andere Problem die Dichten der SPH-Simulation mit einem Shepard-Filter normiert. Durch die Optimierungen lassen sich zwar die Laufzeiten beider Fixed-Radius-Near-Neighbors-Probleme deutlich reduzieren. Dennoch verursachen die Latenzen und die nur mittelmäßige Datenparallelität weiterhin große Performanceverluste. Als Nächstes wird die Simulation um eine Visualisierung erweitert. Bei der Visualisierung verwendet die Arbeit eine Ellipsoid-Splatting-Technik, um die einzelnen Partikel als Ellipsoide auf den Bildschirm zu projizieren. Für dieses Splatting muss zunächst für jedes Partikel die Anisotropie der Partikelverteilung an dessen Stelle per Fixed-Radius-Near-Neighbors-Berechnung bestimmt werden. Aus dieser Anisotropie lassen sich die Hauptachsen der Ellipsoide berechnen. Anschließend werden die Ellipsoide mit OpenGL gezeichnet, wodurch die GPU ein Tiefenbild und ein Dickebild erstellt. Nun wird das Tiefenbild per Screen-Space-Curvature-Flow geglättet, damit der Betrachter die Wölbungen der Ellipsoide im finalen Renderergebnis nicht mehr erkennen kann. Zuletzt wird das geglättete Tiefenbild und Dickebild zum finalen Renderergebnis zusammengesetzt. Dabei dient das Dickebild dafür die Durchsichtigkeit der Flüssigkeit zu bestimmen und das Tiefenbild dafür die Reflexion der Flüssigkeitsoberfläche zu bestimmen. Zu Letzt wird die Simulation mitsamt Visualisierung so erweitert, dass sie effizient auf einem GPU-Cluster ausgeführt werden kann. Anschließend wird sie in Hinblick auf die Skalierbarkeit und die Ausnutzung der GPUs untersucht. Für die Modifikationen wird das Volumen der Simulation und damit die in dem Volumen enthaltenen Partikel eindimensional in Scheiben auf die einzelnen GPUs aufgeteilt. Für sowohl die Bewegung der Partikel durch die Zeitintegration als auch für die Berechnungen der Fixed-Radius-Near-Neighbors-Probleme ist jedoch eine Kommunikation zwischen den GPUs des Clusters notwendig. Deshalb wird die Simulation so modifiziert, dass sie gleichzeitig einen Netzwerktransfer und ein Berechnen auf den GPUs erlaubt. Zusätzlich verwendet die Arbeit eine Lastbalancierung, die die Scheibendicke anhand der Kernel-Laufzeiten variiert, so dass die GPUs des Clusters gleichmäßig ausgelastet werden. Ebenso werden die Berechnungen der Visualisierung auf die Knoten des Clusters per Compositing-Technik aufgeteilt. Dafür berechnet jede GPU zunächst mit ihren eigenen Partikeln ein Tiefenbild und ein Dickebild, die dann über das Netzwerk per Min-Operation beziehungsweise per Additionsoperation zu einem einzigen Tiefenbild und Dickebild reduziert werden. Die Reduktion der Tiefenbilder und Dickebilder findet asynchron in einer Pipeline statt, damit die GPUs währenddessen weiter die SPH-Simulation berechnen können. Anschließend findet der Screen-Space-Curvature-Flow und das finale Shading auf einem separaten Knoten des Clusters statt, so dass die GPUs der anderen Knoten nicht ungleichmäßig ausgelastet werden. Die Untersuchungen zeigen, dass die Simulation sehr gut mit der Partikelzahl bei konstanter GPU-Zahl skaliert. Auch skaliert sie sehr gut mit der GPU-Zahl bei konstanter Partikelzahl. Wird die Partikelzahl der Simulation bei konstanter GPU-Zahl zu groß, so treten kleine Performanceeinbrüche wegen verringerter Cache-Trefferraten auf. Werden zu wenige Partikel bei zu vielen GPUs simuliert, so geht ebenfalls Performance verloren, da in diesem Fall die Netzwerkbandbreite limitiert. Zusätzlich wird die Laufzeit dadurch ein bisschen erhöht, dass die GPUs des Clusters trotz Lastbalancierung ein wenig auf ihre Berechnungen untereinander warten müssen. Wird die Problemgröße groß genug gewählt so lässt sich im Cluster beinahe der optimale Speedup erzielen.

Degree

thesis:*
Level thesis:degree_level
master
Grantor dc:publisher
Universität Bayreuth

Author and committee

dc:creator, dc:contributor.*
Author dc:creator
  • Werner, Tim

Identifiers

dc:identifier.*
Repository record source_url
https://epub.uni-bayreuth.de/id/eprint/1999/
OAI identifier oai:identifier
oai:epub.uni-bayreuth.de:1999

Chain of custody

source
Harvested from
Universität Bayreuth
Base URL
epub.uni-bayreuth.de/cgi/oai2
Last updated
2026-07-27
Source record
OAI-PMH GetRecord
related terms
citation

Werner, Tim. Effiziente SPH-basierte Flüssigkeitssimulation mit Visualisierung auf einem GPU-Cluster. master thesis, Universität Bayreuth, https://epub.uni-bayreuth.de/id/eprint/1999/