FluidX3D 3.7 – pacchetto per la fluidodinamica computazionale, che utilizza il metodo delle equazioni della griglia di Boltzmann (LBM) e OpenCL. Il progetto è posizionato come un pacchetto CFD ad alte prestazioni e economico in termini di memoria, capace di funzionare su GPU e CPU di diversi produttori tramite OpenCL.
Il principale cambiamento della versione 3.7 è stata l'ottimizzazione del nucleo di rendering della superficie isosuperficiale del criterio Q (graphics_q()), utilizzato per visualizzare le strutture vorticosi nel flusso. Nella precedente implementazione, il nucleo caricava dalla memoria video un pesante шаблон di 32 velocità tridimensionali per ogni cella di matrice. Ora, un gruppo di lavoro di thread di dimensione 8×8×8 carica un blocco di 11×11×11 velocità in 16 KB di memoria locale di primo livello, dopodiché i thread adiacenti riutilizzano questi dati. Secondo le stime dell'autore, questo riduce il numero di caricamenti dalla VRAM di circa 12 volte — a 2,6 velocità per cella — e sposta il nucleo da una modalità limitata dalla larghezza di banda della memoria a una modalità limitata dai calcoli.
Il guadagno pratico dipende dall'hardware specifico. Su nuove GPU con un sistema di cache avanzato, l'ottimizzazione manuale della memoria locale può offrire un incremento minimo o addirittura ridurre il frame rate. Su alcune GPU più vecchie, l'autore ha registrato un'accelerazione fino a due volte, particolarmente evidente nella modalità grafica interattiva FluidX3D. Ad esempio, nei test pubblicati, la NVIDIA Titan Xp è passata da 7 a 13 fps, l'Intel UHD 770 da 8 a 14 fps in una modalità, e l'Intel Arc A750 da 22 a 26 fps.
Per le GPU integrate più vecchie è previsto un ripristino automatico alla versione precedente: alcune di queste unità non supportano i gruppi di lavoro da 512 thread o hanno meno di 16 KB di memoria locale L1. In questi casi, FluidX3D continuerà a utilizzare la vecchia variante del core, mantenendo la compatibilità.
In questa versione sono state semplificate anche le condizioni per il rendering VR, è stato disabilitato lo svolgimento dei cicli nella rasterizzazione per ridurre la 'spaghetti' nell'output assembly, è stata aggiunta una microottimizzazione in convert_triangle/_interpolated(), e nell'adattatore OpenCL è stato corretto il messaggio di errore per un nome di core vuoto e la dimensione del gruppo di lavoro.
FluidX3D include un renderer 3D interattivo integrato che consente di visualizzare i campi di velocità, le linee di flusso, le isosuperfici del criterio Q e i tagli direttamente durante il calcolo, senza la necessità di esportare in uno strumento di post-elaborazione separato. FluidX3D Il progetto include anche il supporto per superfici libere, convezione termica, modelli di turbolenza Smagorinsky-Lilly, tracciamento delle particelle, esportazione VTK e utilizzo di più GPU.
È importante notare il status di licenza: il codice sorgente di FluidX3D è aperto e disponibile su GitHub, tuttavia la licenza del progetto non è libera nel senso stretto di OSI/FSF. Essa consente l'uso per ricerche pubbliche, educazione e obiettivi personali, ma vieta applicazioni commerciali e militari, nonché la formazione di modelli di IA sul codice sorgente.
Fonte: linux.org.ru
