News-Center

Schneller im Fluss. Software für Strömungssimulation rechnet mit NVIDIA-Grafikprozessoren

Schon beim Design vieler Produkte muss das gewünschte Strömungsverhalten berücksichtigt werden. In dieser frühen Phase hilft die Software LBultra von FluiDyna, die Strömung zu erforschen und das Verhalten von physikalischen Körpern zu simulieren. Sie nutzt die besonderen Rechenkapazitäten von NVIDIA-Grafikprozessoren, um die Resultate erheblich schneller zu liefern.

Bei der Entwicklung bestimmter Produkte wie Automobile ist ein günstiges Strömungsverhalten unerlässlich. Schlechte Aerodynamik führt beispielsweise zu hohem Kraftstoffverbrauch. Diese Untersuchung wurde früher in einem Windkanal durchgeführt. Sie war sehr kostenintensiv, weil für den Test von realen Prototypen oder Modellen ein großer Aufwand für die Vorbereitung des Modells und den Versuchsaufbau im Windkanal sowie teure Analysewerkzeuge anfielen. Auch die Untersuchung des Strömungsverhaltens in der Entwicklung von Pumpen oder Ventilatoren konnte nur mit hohen Kosten realisiert werden.

LBultra_Gitter.jpg

Strömungsverhalten eines PKW (Quelle: FluiDyna)

Mittlerweile stellen computergestützte Strömungssimulationen eine günstige Alternative dazu dar. Das Ingenieurbüro FluiDyna aus Garching bei München hat sich auf solche Simulationen spezialisiert und berechnet physikalische Strömungen in und um Körper. Das Unternehmen wurde 2006 vom Lehrstuhl für Aerodynamik an der Technischen Universität München gegründet. Eugen Riegel, ein Absolvent der TU, hat mit Unterstützung durch Geschäftsführer Dr. Thomas Indinger, der an der TU München den Bereich Automobilaerodynamik leitet, die Simulationssoftware LBultra entwickelt, die zur schnelleren Berechnung NVIDIA-Grafiksprozessoren (GPU, Graphics Porcessing Unit) nutzt. Indinger trägt bei der Entwicklung seine Expertise in der Strömungsmechanik bei.

Die Kalkulationen der Software beruhen auf der Lattice-Boltzmann-Methode. Die aus der statistischen Physik stammende Vorgehensweise zergliedert ein komplexes Modell auf Teilchenebene. Bei der Lattice-Boltzmann-Methode wird das zu simulierende Volumen in viele kleine Zellen aufgeteilt. Die Methode bietet im Vergleich zu anderen Methoden den Vorteil, dass zur Berechnung des neuen Zustands einer Zelle nur die Informationen der Zelle selbst sowie deren Nachbarzellen zum alten Zustand benötigt werden. Dadurch ist die Lattice-Boltzmann-Methode ideal für eine hochgradig parallele Implementierung geeignet.

LBultra_Stromlinien_1.jpg

Strömungslinienmodell am Kraftfahrzeug (Quelle: FluiDyna)

Eine CPU (Central Processing Unit), die diese Berechnungen durchführt, wirkt hier wie ein Flaschenhals. Lange Zeit griffen Systementwickler auf schnellere CPUs mit immer leistungsfähigeren Architekturen und höheren Taktfrequenzen zurück. Dabei liegt das Problem nicht in der Leistung, sondern in der Struktur der Prozessoren. Eine Single-Core-CPU kann Aufgaben nur sequenziell abarbeiten. Multitasking oder Multithreading bieten hier keinen Performance-Gewinn, da sie Aufgaben nur scheinbar parallel ablaufen lassen – bei diesen zwei Verfahren arbeitet die CPU die Aufgaben ebenfalls hintereinander ab, wobei durch geschickte Ausnutzung der System-Ressourcen der Eindruck der Gleichzeitigkeit entsteht. Mit wachsender Anzahl der CPU-Kerne steigt die Fähigkeit, mehrere Rechenaufgaben parallel zu erledigen. Daher könnte eine Lösung in der simultanen Nutzung vieler Multicore-CPUs liegen, was aber angesichts der damit verbundenen hohen Kosten oft keine Alternative ist. Es müssten ganze Cluster mit vielen Knoten aufgebaut werden, da in einem Rechner nicht unzählig viele CPUs einsetzbar sind. Neben dem Kostenaspekt ist ein weiterer Nachteil eines ausschließlich auf CPUs basierenden Cluster-Konzepts, dass das aufwändige Management des Gesamt-Systems wertvolle Kapazitäten bindet. Für Berechnungen nach der Lattice-Boltzmann-Methode ist daher eine massiv parallele GPU-Architektur vorzuziehen, denn mit ihr kann jede einzelne Zelle des simulierten Volumens von einem eigenen GPU-Kern berechnet werden.

LBultra_Stromlinien_2.jpg

Darstellung von Luft-Verwirbelungen hinter einem fahrenden PKW (Quelle: FluiDyna)

„Ursprünglich wurden GPUs für die Berechnung von Visualisierungen konzipiert und optimiert. Sie haben sich durch die Anforderung der unabhängigen Berechnung jedes einzelnen Pixels einer Darstellung zu massiv parallelen Prozessoren gewandelt“, erklärt Thomas Indinger. „Seit dem Erscheinen der NVIDIA-CUDA-Technologie eignen sich die Grafikprozessoren auch für die Berechnung von Nicht-Bilddaten.“ Für die Berechnung einer Aufgabe auf GPUs mit der CUDA-Technologie muss sie parallelisierbar sein, also sich in viele kleine Einheiten aufteilen lassen, die nebeneinander unabhängig berechnet werden. Wie auch die zweite Voraussetzung, die prozedurale Unabhängigkeit der einzelnen Berechnungseinheiten, liegt die Parallelisierbarkeit bei der Strömungssimulation mit der Lattice-Boltzmann-Methode vor. Damit eignet sich diese Problemstellung für den Einsatz von GPUs. Die Vorteile der parallelen Berechnung auf einer GPU anstelle der Verwendung einer oder mehrerer CPUs liegen in der vielfach höheren Rechenleistung und besseren Verteilbarkeit der einzelnen Aufgaben durch die spezielle Ausrichtung der GPU-Architektur auf kleine modulare Rechenschritte. Ein Grafikprozessor stellt dafür viele Recheneinheiten zur Verfügung. In NVIDIA-GPUs, die auf der Fermi-Achitektur basieren, sind bis zu 512 Rechenkerne vorhanden.

LBultra_Stromlinien_3.jpg

NVIDIA-Grafikprozessoren führen die Berechnung von Luftströmen an einem fahrenden Automobil durch (Quelle: FluiDyna)

Riegel hat sich zu Beginn seiner Entwicklungsarbeit zunächst dafür entschieden, die Open-Source-Implementierung einer auf Lattice-Boltzmann basierten Strömungssimulation für GPUs zu portieren. „Die Portierung konnte die besonderen Vorzüge der GPU-Architektur nicht ausreichend nutzen. Daher waren die Berechnungen nicht wesentlich schneller“, betont Riegel. „Der Durchbruch bei der Performance kam erst durch die Entwicklung von LBultra. Durch den Einsatz der GPU-Technologie rechnet LBultra dieselbe Aufgabe zwanzig mal schneller als ein Quadcore-Prozessor.“ Dabei verwendet LBultra die NVIDIA-CUDA-Technologie (Compute Unified Device Architecture) und ist in der Lage, mehrere GPUs zu verwenden, um das System gemäß den Anforderungen zu skalieren.