FluidX3D 3.7 – pakiet do obliczeniowej hydrodynamiki, który wykorzystuje metodę równań Boltzmanna na siatce (LBM) i OpenCL. Projekt jest pozycjonowany jako wydajny i oszczędny pakiet CFD, zdolny do pracy na GPU i CPU różnych producentów za pośrednictwem OpenCL.
Główną zmianą w wersji 3.7 była optymalizacja rdzenia renderowania izopowierzchni Q-kryterium (graphics_q()), stosowanego do wizualizacji struktur wirujących w przepływie. W poprzedniej implementacji rdzeń ładował z pamięci wideo ciężki szablon 32 trójwymiarowych prędkości dla każdej komórki siatki. Teraz grupa robocza wątków o rozmiarze 8×8×8 ładuje blok 11×11×11 prędkości w 16 KB lokalnej pamięci pierwszego poziomu, po czym sąsiednie wątki ponownie wykorzystują te dane. Autor szacuje, że skraca to liczbę ładowań z VRAM około 12 razy – do 2,6 prędkości na komórkę – i przenosi rdzeń z trybu ograniczonego przepustowością pamięci do trybu ograniczonego obliczeniami.
Praktyczny zysk zależy od konkretnego sprzętu. Na nowych GPU z rozwiniętym systemem cache'owania ręczna optymalizacja lokalnej pamięci może niemal nie przynieść przyrostu lub nawet nieznacznie obniżyć liczbę klatek na sekundę. W przypadku niektórych starszych GPU autor odnotował przyspieszenie do dwóch razy, co jest szczególnie zauważalne w interaktywnym trybie graficznym FluidX3D. Na przykład, w opublikowanych testach NVIDIA Titan Xp przyspieszyła z 7 do 13 klatek/s, Intel UHD 770 – z 8 do 14 klatek/s w jednym z trybów, a Intel Arc A750 – z 22 do 26 klatek/s.
Dla starszych zintegrowanych GPU przewidziano automatyczny powrót do wcześniejszej implementacji: część takich urządzeń nie obsługuje grup roboczych o rozmiarze 512 wątków lub ma mniej niż 16 KB lokalnej pamięci L1. W tych przypadkach FluidX3D będzie nadal korzystać ze starej wersji rdzenia, zachowując zgodność.
W tej wersji uproszczono także warunki dla renderowania VR, wyłączono rozwijanie pętli w rastrowaniu w celu zmniejszenia «spaghetti» w wyjściu asemblera, dodano mikrooptymalizację w convert_triangle/_interpolated(), a w adapterze OpenCL naprawiono wyjście błędu przy pustej nazwie rdzenia i rozmiarze grupy roboczej.
FluidX3D zawiera wbudowany interaktywny renderer 3D, który umożliwia przeglądanie pól prędkości, linii prądów, izopowierzchni kryterium Q oraz przekrojów w czasie rzeczywistym podczas obliczeń, bez konieczności eksportowania do oddzielnego narzędzia do postprocessing. FluidX3D Projekt przewiduje także wsparcie dla swobodnych powierzchni, konwekcji cieplnej, modelu turbulencji Smagorinsky-Lilly, śledzenia cząstek, eksportu VTK oraz pracy z wieloma GPU.
Należy również podkreślić status licencyjny: kod źródłowy FluidX3D jest otwarty i dostępny na GitHubie, jednak licencja projektu nie jest wolna w ścisłym sensie OSI/FSF. Zezwala na użycie do badań publicznych, edukacji i celów osobistych, ale zabrania stosowania komercyjnego i wojskowego, a także szkolenia modeli AI na podstawie kodu źródłowego.
Źródło: linux.org.ru
