FluidX3D 3.7 – un package pour la dynamique des fluides computationnelle utilisant la méthode des équations de Boltzmann sur grille (LBM) et OpenCL. Le projet se positionne comme un package CFD hautes performances et économique en mémoire, capable de fonctionner sur GPU et CPU de différents fabricants via OpenCL.
Le changement principal de la version 3.7 est l'optimisation du noyau de rendu de la surface isosurface Q-critère (graphics_q()), utilisé pour visualiser des structures tourbillonnaires dans le flux. Dans la version précédente, le noyau chargeait depuis la mémoire vidéo un lourd modèle de 32 vitesses tridimensionnelles pour chaque cellule de la grille. Maintenant, un groupe de threads de taille 8×8×8 charge un bloc de 11×11×11 vitesses dans 16 Ko de mémoire locale de premier niveau, après quoi les threads voisins réutilisent ces données. Selon l'évaluateur, cela réduit le nombre de chargements depuis la VRAM d'environ 12 fois — à 2,6 vitesses par cellule — et permet au noyau de passer d'un mode limité par la bande passante de la mémoire à un mode limité par les calculs.
Les gains pratiques dépendent du matériel spécifique. Sur de nouveaux GPU avec un système de mise en cache avancé, l'optimisation manuelle de la mémoire locale peut à peine donner d'améliorations ou même diminuer légèrement le taux de rafraîchissement. Sur certaines anciennes GPU, l'auteur a observé des accélérations allant jusqu'à deux fois, surtout visibles en mode graphique interactif FluidX3D. Par exemple, dans des tests publiés, NVIDIA Titan Xp est passée de 7 à 13 images/s, Intel UHD 770 — de 8 à 14 images/s dans un mode, et Intel Arc A750 — de 22 à 26 images/s.
Pour les anciens GPU intégrés, un retour automatique à l'implémentation précédente est prévu : certains de ces appareils ne supportent pas les groupes de travail de taille 512 threads ou ont moins de 16 Ko de mémoire locale L1. Dans ces cas, FluidX3D continuera d'utiliser l'ancienne version du noyau, préservant ainsi la compatibilité.
Cette version simplifie également les conditions pour le rendu VR, désactive le dépliage des boucles dans la rasterisation pour réduire les « spaghetti » dans la sortie assembleur, ajoute une micro-optimisation dans convert_triangle/_interpolated(), et corrige l'affichage des erreurs dans l'adaptateur OpenCL lors d'un nom de noyau vide et d'une taille de groupe de travail.
FluidX3D comprend un moteur de rendu 3D interactif intégré, permettant de visualiser les champs de vitesse, les lignes de courant, les isosurfaces du critère Q et les coupes en temps réel pendant le calcul, sans nécessité d'exporter vers un outil de post-traitement séparé. FluidX3D Le projet annonce également le support de surfaces libres, de la convection thermique, du modèle de turbulence Smagorinsky-Lilly, du suivi des particules, de l'exportation VTK et de l'utilisation de plusieurs GPU.
Il convient de noter le statut de la licence : le code source de FluidX3D est ouvert et disponible sur GitHub, cependant la licence du projet n'est pas libre au sens strict de l'OSI/FSF. Elle autorise une utilisation pour la recherche publique, l'éducation et les objectifs personnels, mais interdit l'usage commercial et militaire, ainsi que l'entraînement de modèles d'IA sur le code source.
Source : linux.org.ru
