FluidX3D 3.7 – ein Paket für computational Fluid Dynamics, das die Methode der lattice Boltzmann equations (LBM) und OpenCL nutzt. Das Projekt wird als leistungsstark und speichereffizienter CFD-Paket positioniert, das auf GPUs und CPUs verschiedener Hersteller über OpenCL arbeitet.
Die Hauptänderung in Version 3.7 ist die Optimierung des Kernelements zur Darstellung der Isophären des Q-Kriteriums (graphics_q()), das zur Visualisierung von Strömungswirbeln verwendet wird. In der vorherigen Implementierung lud der Kern ein umfangreiches Muster von 32 dreidimensionalen Geschwindigkeiten für jede Zelle des Gitters aus dem Videospeicher. Jetzt lädt die Arbeitsgruppe von 8×8×8 Threads einen Block von 11×11×11 Geschwindigkeiten in 16 KB erstklassiger lokaler Speicher, woraufhin benachbarte Threads diese Daten wiederverwenden. Der Autor schätzt, dass dies die Anzahl der Ladevorgänge aus dem VRAM um etwa das 12-fache reduziert — auf 2,6 Geschwindigkeiten pro Zelle — und den Kern von einem speicherbandbreitenlimitierten Modus in einen rechnerisch limitierten Modus überführt.
Der praktische Gewinn hängt von der spezifischen Hardware ab. Auf neuen GPUs mit einem entwickelten Caching-System kann die manuelle Optimierung des lokalen Speichers kaum einen Anstieg der Bildrate bewirken oder diese sogar leicht reduzieren. Bei einigen älteren GPUs verzeichnete der Autor eine Beschleunigung von bis zu dem Doppelten, was besonders im interaktiven Grafikmodus FluidX3D auffällt. So erreichte beispielsweise die getestete NVIDIA Titan Xp einen Anstieg von 7 auf 13 Bildern pro Sekunde, die Intel UHD 770 von 8 auf 14 Bildern pro Sekunde in einem der Modi, und die Intel Arc A750 von 22 auf 26 Bildern pro Sekunde.
Für ältere integrierte GPUs gibt es eine automatische Rückkehr zur vorherigen Implementierung: Einige solcher Geräte unterstützen keine Arbeitsgruppen mit 512 Threads oder haben weniger als 16 KB lokalen L1-Speicher. In diesen Fällen wird FluidX3D die alte Version des Kernels weiter nutzen und die Kompatibilität aufrechterhalten.
In dieser Version wurden auch die Bedingungen für das VR-Rendering vereinfacht, die Schleifenentfaltung in der Rasterisierung deaktiviert, um "Spaghetti" im Assemblertest zu reduzieren, eine Mikro-Optimierung in convert_triangle/_interpolated() hinzugefügt, und im OpenCL-Adapter wurde die Fehlermeldung bei leerem Kernnamen und Arbeitsgrüppengröße korrigiert.
FluidX3D verfügt über einen integrierten interaktiven 3D-Renderer, der es ermöglicht, Geschwindigkeitsfelder, Stromlinien, Isoplänen des Q-Kriteriums und Schnitte während der Berechnung direkt zu visualisieren, ohne dass ein Export in ein separates Post-Processing-Tool erforderlich ist. FluidX3D Das Projekt bietet zudem Unterstützung für freie Oberflächen, Wärmeübertragung, das Smagorinsky-Lilly-Turbulenzmodell, Partikelverfolgung, VTK-Export und die Nutzung mehrerer GPUs.
Besonders erwähnenswert ist der Lizenzstatus: Der Quellcode von FluidX3D ist offen und auf GitHub verfügbar, jedoch die Lizenz des Projekts ist nicht im strengen Sinne der OSI/FSF frei. Sie erlaubt die Nutzung für öffentliche Forschung, Bildung und private Zwecke, verbietet jedoch kommerzielle und militärische Anwendungen sowie das Training von KI-Modellen mit dem Quellcode.
Quelle: linux.org.ru
