FluidX3D 3.7 – ein Paket für numerische Strömungsmechanik, das die Methode der Lattice-Boltzmann-Gleichungen (LBM) und OpenCL verwendet. Das Projekt wird als leistungsstarkes und speichereffizientes CFD-Paket positioniert, das auf GPUs und CPUs verschiedener Hersteller über OpenCL arbeiten kann.
Die Hauptänderung in Version 3.7 war die Optimierung des Rendering-Kerns für die Isoflächen des Q-Kriteriums (graphics_q()), der zur Visualisierung von Wirbelstrukturen im Fluss verwendet wird. In der früheren Implementierung lud der Kern ein schweres Muster aus 32 dreidimensionalen Geschwindigkeiten für jede Gitterzelle aus dem Videospeicher. Jetzt lädt eine Arbeitsgruppe von 8×8×8 Threads einen Block von 11×11×11 Geschwindigkeiten in 16 KB L1-Cache-Speicher, wonach benachbarte Threads diese Daten erneut verwenden. Laut dem Autor reduziert dies die Anzahl der Ladevorgänge aus dem VRAM um etwa das 12-fache – auf 2,6 Geschwindigkeiten pro Zelle – und verwandelt den Kern von einem speicherbandbreitenlimitierten in einen rechenlimitierten Modus.
Der praktische Gewinn hängt von der spezifischen Hardware ab. Bei neuen GPUs mit einem fortschrittlichen Cache-System kann die manuelle Optimierung des lokalen Speichers kaum einen Anstieg bringen oder sogar die Bildrate leicht senken. Bei einigen älteren GPUs stellte der Autor eine Beschleunigung um das Doppelte fest, was insbesondere im interaktiven Grafikmodus von FluidX3D deutlich bemerkbar ist. Beispielsweise beschleunigte im veröffentlichten Test die NVIDIA Titan Xp von 7 auf 13 Bilder/s, Intel UHD 770 von 8 auf 14 Bilder/s in einem Modus und Intel Arc A750 von 22 auf 26 Bilder/s.
Für ältere integrierte GPUs ist ein automatischer Rückfall auf die frühere Implementierung vorgesehen: Einige dieser Geräte unterstützen keine Arbeitsgruppen mit 512 Threads oder verfügen über weniger als 16 KB lokalen L1-Speicher. In diesen Fällen wird FluidX3D die alte Version des Kerns weiterhin verwenden, um die Kompatibilität zu gewährleisten.
In dieser Version wurden auch die Bedingungen für das VR-Rendering vereinfacht, die Schleifenentfaltung in der Rasterisierung deaktiviert, um „Spaghetti“ im Assembler-Ausgabe zu reduzieren, sowie Mikrooptimierungen in convert_triangle/_interpolated() hinzugefügt, und im OpenCL-Adapter wurde die Fehlerausgabe bei leerem Kernamen und Arbeitsgruppengröße korrigiert.
FluidX3D umfasst einen integrierten interaktiven 3D-Renderer, der es ermöglicht, Geschwindigkeitsfelder, Stromlinien, Isoplänen des Q-Kriteriums und Schnitte direkt während der Berechnung zu visualisieren, ohne dass ein Export in ein separates Nachbearbeitungstool erforderlich ist. FluidX3D Das Projekt umfasst auch die Unterstützung freier Oberflächen, Wärmeleitung, das Smagorinsky-Lilly-Turbulenzmodell, Partikelverfolgung, VTK-Export und den Betrieb mit mehreren GPUs.
Besonders hervorzuheben ist der Lizenzstatus: Der Quellcode von FluidX3D ist offen und auf GitHub verfügbar, jedoch die Lizenz des Projekts ist im strengen Sinne der Begriffe OSI/FSF nicht frei. Sie erlaubt die Nutzung für öffentliche Forschungs-, Bildungs- und persönliche Zwecke, untersagt jedoch kommerzielle und militärische Anwendungen sowie das Training von KI-Modellen mit dem Quellcode.
Quelle: linux.org.ru
