Perangkat lunak CFD Boltzmann kisi tercepat dan paling hemat memori, berjalan di semua GPU melalui OpenCL. Gratis untuk penggunaan non-komersial.
(klik pada gambar untuk menampilkan video di YouTube)
v1.0 (04.08.2022) perubahan (rilis publik)
rilis publik
v1.1 (29.09.2022) perubahan (voxelisasi GPU)
menambahkan voxelisasi solid pada GPU (algoritma lambat)
menambahkan alat untuk mencetak posisi kamera saat ini (kunci G )
perbaikan bug kecil (solusi untuk bug driver Intel iGPU dengan rendering segitiga)
v1.2 (24.10.2022) perubahan (perhitungan gaya/torsi)
menambahkan fungsi untuk menghitung gaya/torsi pada objek
menambahkan fungsi untuk menerjemahkan Mesh
menambahkan pengaturan validasi drag Stokes
v1.3 (10.11.2022) perubahan (perbaikan bug kecil)
menambahkan fungsi konversi unit untuk torsi
FORCE_FIELD
dan VOLUME_FORCE
kini dapat digunakan secara mandiri
perbaikan bug kecil (solusi untuk bug driver lama AMD dengan literal bilangan biner)
v1.4 (14.12.2022) perubahan (grafis Linux)
penulisan ulang lengkap pustaka grafis C++ untuk meminimalkan ketergantungan API
menambahkan mode grafis interaktif di Linux dengan X11
memperbaiki bug visualisasi streamline dalam 2D
v2.0 (09.01.2023) perubahan (peningkatan multi-GPU)
menambahkan dukungan multi-GPU (lintas vendor) pada satu node (PC/laptop/server)
v2.1 (15.01.2023) perubahan (voxelisasi cepat)
membuat voxelisasi yang solid pada GPU secepat kilat (algoritme baru, dari menit hingga milidetik)
v2.2 (20.01.2023) perubahan (voxelisasi kecepatan)
menambahkan opsi untuk melakukan voxelisasi geometri bergerak/berputar pada GPU, dengan inisialisasi kecepatan otomatis untuk setiap titik grid berdasarkan pusat rotasi, kecepatan linier, dan kecepatan rotasi
sel yang dikonversi dari padat->cair selama voxelisasi ulang kini DDF-nya telah diinisialisasi dengan benar
menambahkan opsi untuk tidak menskalakan mesh secara otomatis selama read_stl(...)
, dengan parameter size
negatif
menambahkan kernel untuk rendering batas padat dengan kubus berbaris
v2.3 (30.01.2023) perubahan (partikel)
menambahkan partikel dengan metode batas terbenam (baik pasif atau berpasangan 2 arah, hanya didukung dengan GPU tunggal)
optimasi kecil pada algoritma voxelisasi GPU (utas kelompok kerja di luar kotak pembatas mesh kembali setelah persimpangan ray-mesh ditemukan)
ukuran alokasi memori GPU yang ditampilkan kini sepenuhnya akurat
memperbaiki bug pada fungsi write_line()
di src/utilities.hpp
menghapus ekstensi file .exe
untuk Linux/macOS
v2.4 (11.03.2023) perubahan (peningkatan UI)
menambahkan menu bantuan dengan tombol H yang menampilkan kontrol keyboard/mouse, pengaturan visualisasi, dan statistik simulasi
peningkatan pada kontrol keyboard/mouse ( + / - untuk zoom, klik mouse membebaskan/mengunci kursor)
menambahkan saran resolusi grid sebesar mungkin jika resolusi diatur lebih besar dari yang dimungkinkan oleh memori
optimasi kecil dalam komunikasi multi-GPU (perbedaan kinerja tidak signifikan)
memperbaiki bug dalam fungsi kesetimbangan suhu untuk ekstensi suhu
memperbaiki literal ganda yang salah untuk Intel iGPU dalam fungsi warna skybox
memperbaiki bug di make.sh di mana ID perangkat multi-GPU tidak diteruskan ke file yang dapat dieksekusi
perbaikan bug kecil di mesin grafis (kursor bebas tidak berada di tengah selama rotasi, label dalam mode VR)
memperbaiki bug di inisialisasi standar parameter ukuran LBM::voxelize_stl()
v2.5 (11.04.2023) perubahan (perombakan raytracing)
menerapkan penyerapan cahaya dalam cairan untuk grafik raytracing (tidak ada dampak kinerja)
peningkatan framerate raytracing saat kamera berada di dalam cairan
memperbaiki artefak kelap-kelip tiang skybox
memperbaiki bug di mana objek bergerak selama voxelisasi ulang akan meninggalkan jejak sel jaringan padat yang salah
v2.6 (16.04.2023) perubahan (patch Intel Arc)
memperbaiki masalah OpenCL pada GPU Intel Arc: sekarang alokasi VRAM >4GB dimungkinkan dan kapasitas VRAM yang benar dilaporkan
v2.7 (29.05.2023) perubahan (peningkatan visualisasi)
menambahkan visualisasi irisan (mode tombol 2 / tombol 3 , lalu beralih melalui mode irisan dengan tombol T , pindahkan irisan dengan tombol Q / E )
membuat wireframe bendera/kernel visualisasi permukaan padat yang dapat diubah dengan kunci 1
menambahkan visualisasi tekanan permukaan (kunci 1 ketika FORCE_FIELD
diaktifkan dan lbm.calculate_force_on_boundaries();
dipanggil)
menambahkan fungsi ekspor biner .vtk
untuk jerat dengan lbm.write_mesh_to_vtk(Mesh* mesh);
menambahkan time_step_multiplicator
untuk fungsi integrate_particles()
dalam ekstensi PARTICLES
membuat koreksi pelaporan memori yang salah pada Intel Arc menjadi lebih kuat
memperbaiki bug dalam fungsi templat write_file()
dikembalikan ke cl::Context
terpisah untuk setiap perangkat OpenCL, karena Konteks bersama akan mengalokasikan VRAM tambahan pada semua GPU Nvidia lainnya yang tidak digunakan
menghapus konfigurasi Debug dan x86 dari file solusi Visual Studio (satu komplikasi lebih sedikit untuk kompilasi)
memperbaiki bug sehingga partikel bisa terlalu dekat dengan dinding dan tersangkut, atau meninggalkan fase fluida (menambahkan gaya batas)
v2.8 (24.06.2023) perubahan (dokumentasi + polesan)
akhirnya menambahkan lebih banyak dokumentasi
membersihkan semua contoh penyiapan di setup.cpp
agar lebih ramah bagi pemula, dan menambahkan ekstensi yang diperlukan di defines.hpp
sebagai komentar untuk semua penyiapan
peningkatan pemuatan geometri .stl
komposit, dengan menambahkan opsi untuk menghilangkan reposisi mesh otomatis, menambahkan lebih banyak fungsionalitas ke struktur Mesh
di utilities.hpp
menambahkan fungsi uint3 resolution(float3 box_aspect_ratio, uint memory)
untuk menghitung resolusi kotak simulasi berdasarkan rasio aspek kotak dan penggunaan VRAM dalam MB
menambahkan fungsi bool lbm.graphics.next_frame(...)
untuk mengekspor gambar dengan durasi video tertentu di loop komputasi main_setup
menambahkan makro VIS_...
untuk memudahkan pengaturan mode visualisasi dalam mode grafis tanpa kepala di lbm.graphics.visualization_modes
dimensi kotak simulasi kini secara otomatis dapat dibagi rata berdasarkan domain untuk simulasi multi-GPU
memperbaiki format pesan Info/Peringatan/Kesalahan untuk memuat file dan membuat label pesan Info/Peringatan/Kesalahan berwarna
menambahkan pengaturan bodi Ahmed sebagai contoh bagaimana gaya bodi dan koefisien drag dihitung
menambahkan pengaturan Cessna 172 dan Bell 222 untuk menampilkan pemuatan geometri .stl komposit dan revoxelisasi bagian yang bergerak
menambahkan mode rendering semi-transparan opsional ( #define GRAPHICS_TRANSPARENCY 0.7f
di defines.hpp
)
memperbaiki kedipan visualisasi arus dalam grafik interaktif
meningkatkan pemosisian garis arus yang mulus dalam mode irisan
memperbaiki bug di mana mass
dan massex
di ekstensi SURFACE
juga dialokasikan dalam RAM CPU (tidak diperlukan)
memperbaiki bug dalam rendering kriteria Q data halo dalam mode multi-GPU, mengurangi lebar celah antar domain
menghapus pengoptimalan memori bersama dari kernel voxelisasi mesh, karena crash pada GPU Nvidia dengan driver GPU baru dan tidak kompatibel dengan GPU OpenCL 1.0 lama
warna atenuasi raytracing tetap ketika tidak ada permukaan pada dinding kotak simulasi dengan batas periodik
v2.9 (31.07.2023) perubahan (multithreading)
menambahkan implementasi parallel_for
lintas platform di utilities.hpp
menggunakan std::threads
startup simulasi secara signifikan (>4x) lebih cepat dengan inisialisasi geometri multithread dan pemeriksaan kewarasan
fungsi calculate_force_on_object()
dan calculate_torque_on_object()
lebih cepat dengan multithreading
menambahkan total waktu proses dan waktu proses LBM ke lbm.write_status()
memperbaiki bug dalam arah sinar voxelisasi untuk melakukan voxelisasi ulang objek yang berputar
memperbaiki bug di Mesh::get_bounding_box_size()
memperbaiki bug pada fungsi print_message()
di utilities.hpp
v2.10 (05.11.2023) perubahan (pemusnahan frustrum)
meningkatkan kinerja rasterisasi melalui pemusnahan frustrum ketika hanya sebagian dari kotak simulasi yang terlihat
peningkatan peralihan antara mode kamera terpusat/bebas
perpustakaan rendering OpenCL yang difaktorkan ulang
faktor konversi satuan sekarang secara otomatis dicetak di konsol ketika units.set_m_kg_s(...)
digunakan
waktu startup lebih cepat untuk benchmark FluidX3D
perbaikan bug penambang di kernel voxelize_mesh(...)
memperbaiki bug dalam shading(...)
menggantikan fungsi lambat (dalam multithreading) std::rand()
dengan LCG C99 standar
koreksi yang lebih kuat terhadap pelaporan kapasitas VRAM yang salah pada GPU Intel Arc
memperbaiki beberapa peringatan kompiler kecil
v2.11 (07.12.2023) perubahan (grafis Linux yang ditingkatkan)
grafik interaktif di Linux kini juga dalam mode layar penuh, sepenuhnya cocok dengan Windows
membuat inisialisasi buffer CPU/GPU jauh lebih cepat dengan std::fill
dan enqueueFillBuffer
(secara keseluruhan ~8% startup simulasi lebih cepat)
menambahkan info sistem operasi ke cetakan versi driver perangkat OpenCL
kedipan tetap dengan pemusnahan frustrum pada bidang pandang yang sangat kecil
memperbaiki bug ketika bingkai yang dirender/diekspor tidak diperbarui ketika visualization_modes
berubah
v2.12 (18.01.2024) perubahan (startup lebih cepat)
~kompilasi kode sumber 3x lebih cepat di Linux menggunakan beberapa inti CPU jika make
diinstal
inisialisasi simulasi yang jauh lebih cepat (~40% GPU tunggal, ~15% multi-GPU)
perbaikan bug kecil di fungsi Memory_Container::reset()
v2.13 (11.02.2024) perubahan (peningkatan ekspor .vtk)
data dalam file .vtk
yang diekspor kini secara otomatis dikonversi ke satuan SI
~Ekspor .vtk
2x lebih cepat dengan multithreading
menambahkan fungsi konversi satuan untuk ekstensi TEMPERATURE
memperbaiki artefak grafis dengan kamera sejajar sumbu dalam raytracing
memperbaiki get_exe_path()
untuk macOS
memperbaiki masalah multi-monitor X11 di Linux
solusi untuk bug driver Nvidia: enqueueFillBuffer
rusak untuk buffer besar pada GPU Nvidia
memperbaiki masalah penyimpangan numerik lambat yang disebabkan oleh -cl-fast-relaxed-math
memperbaiki pelaporan Ukuran Alokasi Maksimum yang salah di LBM::write_status()
memperbaiki penskalaan koordinat ke satuan SI yang hilang di LBM::write_mesh_to_vtk()
v2.14 (03.03.2024) perubahan (peningkatan visualisasi)
pewarnaan sekarang dapat dialihkan antara kecepatan/kepadatan/suhu dengan tombol Z
palet warna seragam yang ditingkatkan untuk visualisasi kecepatan/kepadatan/suhu
skala warna dengan konversi satuan otomatis sekarang dapat ditampilkan dengan tombol H
mode irisan untuk visualisasi bidang kini menggambar irisan yang terisi penuh, bukan hanya garis untuk vektor kecepatan
bayangan dalam mode VIS_FLAG_SURFACE
dan VIS_PHI_RASTERIZE
kini lebih mulus
make.sh
sekarang secara otomatis mendeteksi sistem operasi dan dukungan X11 di Linux dan hanya menjalankan FluidX3D jika kompilasi terakhir berhasil
memperbaiki peringatan kompiler di Android
memperbaiki kegagalan make.sh
pada beberapa sistem karena jalur juru bahasa yang tidak standar
diperbaiki yang make
tidak dapat dikompilasi dengan banyak inti pada beberapa sistem
v2.15 (09.04.2024) perubahan (peningkatan framerate)
menghilangkan satu salinan memori frame dan satu operasi frame yang jelas dalam rantai rendering, untuk framerate 20-70% lebih tinggi pada Windows dan Linux
mengaktifkan pengoptimalan compiler g++
untuk startup yang lebih cepat dan framerate rendering yang lebih tinggi
memperbaiki bug dalam pemeriksaan kewarasan multithread
memperbaiki konversi unit yang salah untuk koefisien ekspansi termal
konversi kepadatan ke tekanan tetap dalam satuan LBM
memperbaiki bug yang dapat dikunci oleh kernel raytracing simulasi
memperbaiki artefak visual kecil dengan raytracing
memperbaiki konsol yang terkadang tidak dihapus sebelum rendering INTERACTIVE_GRAPHICS_ASCII
dimulai
v2.16 (02.05.2024) perubahan (perbaikan bug)
menyederhanakan implementasi marching-cubes 10% lebih cepat dengan interpolasi 1D pada tepian, bukan interpolasi 3D, sehingga menghilangkan tabel tepi
menambahkan varian kubus berbaris yang lebih cepat dan disederhanakan untuk rendering permukaan padat di mana tepinya selalu berada di tengah-tengah sel kisi
pemfaktoran ulang di kernel rendering OpenCL
memperbaiki bahwa voxelisasi gagal di Intel OpenCL CPU Runtime karena akses array di luar batas
diperbaiki bahwa voxelisasi tidak selalu menghasilkan hasil biner identik di multi-GPU dibandingkan dengan GPU tunggal
memperbaiki bahwa voxelisasi kecepatan gagal untuk simulasi permukaan bebas
memperbaiki kinerja buruk pada GPU ARM dengan mengganti makro menyatu-multiply-add ( fma
) dengan a*b+c
memperbaiki tombol Y / Z yang salah untuk tata letak keyboard QWERTY
di Linux
memperbaiki kecepatan pergerakan kamera gratis di overlay bantuan tidak diperbarui dalam gambar stasioner saat menggulir
memperbaiki kursor yang terkadang berkedip saat menggulir di trackpad dengan grafik interaktif Linux-X11
memperbaiki kedipan rendering interaktif dengan multi-GPU saat kamera tidak digerakkan
memperbaiki panggilan XInitThreads()
yang hilang yang dapat menyebabkan crash grafis interaktif Linux pada beberapa sistem
memperbaiki pertarungan z antara kernel graphics_rasterize_phi()
dan graphics_flags_mc()
v2.17 (05.06.2024) perubahan (resolusi domain tidak terbatas)
domain tidak lagi dibatasi pada 4,29 miliar (2³², 1624³) sel grid atau memori 225 GB; jika lebih banyak yang digunakan, kode OpenCL akan secara otomatis dikompilasi dengan pengindeksan 64-bit
visualisasi lapangan berbasis raytracing yang baru dan lebih cepat untuk simulasi GPU tunggal
menambahkan Driver GPU dan petunjuk instalasi OpenCL Runtime ke dokumentasi
INTERACTIVE_GRAPHICS_ASCII
yang difaktorkan ulang
memperbaiki kebocoran memori di destruktor floatN
, floatNxN
, doubleN
, doubleNxN
(semua tidak digunakan)
membuat pergerakan/rotasi/perilaku zoom kamera tidak tergantung pada framerate
diperbaiki bahwa smart_device_selection()
akan mencetak peringatan yang salah jika perangkat melaporkan kecepatan jam 0 MHz
v2.18 (21.07.2024) perubahan (perbaikan bug lebih lanjut)
menambahkan dukungan untuk monitor dengan kecepatan refresh tinggi di Linux
skrip instalasi OpenCL Runtime yang lebih ringkas di Dokumentasi
instruksi instalasi driver/runtime sekarang akan dicetak ke konsol jika tidak ada perangkat OpenCL yang tersedia
menambahkan informasi domain ke LBM::write_status()
menambahkan fungsi LBM::index
untuk parameter input uint3
memperbaiki bahwa simulasi yang sangat besar terkadang tidak ditampilkan dengan benar dengan meningkatkan jarak render maksimum dari 10k menjadi 2,1M
memperbaiki input mouse yang tersendat pada kecepatan refresh layar tinggi di Linux
memperbaiki artefak grafis dalam penelusuran sinar permukaan bebas pada Intel CPU Runtime untuk OpenCL
estimasi waktu proses tetap yang dicetak di konsol untuk pengaturan dengan beberapa panggilan lbm.run(...)
osilasi kepadatan tetap dalam pengaturan sampel ( lbm_u
terlalu besar)
memperbaiki artefak grafis kecil di raytrace_phi()
memperbaiki artefak grafis kecil di ray_grid_traverse_sum()
memperbaiki jumlah langkah waktu pencetakan yang salah pada pengaturan sampel tetesan hujan
v2.19 (07.09.2024) perubahan (spline kamera)
kamera sekarang dapat terbang di sepanjang jalur mulus melalui daftar penempatan kamera keyframe yang disediakan, menggunakan spline Catmull-Rom
estimasi sisa waktu proses yang lebih akurat yang mencakup waktu yang dihabiskan untuk rendering
mengaktifkan kompresi memori FP16S secara default
penempatan kamera cetak menggunakan tombol G kini diformat untuk memudahkan salin/tempel
menambahkan grafik benchmark di Readme menggunakan Mermaid Gantt Chart
menempatkan info alokasi memori selama permulaan simulasi di lokasi yang lebih baik
memperbaiki konflik threading antara INTERACTIVE_GRAPHICS
dan lbm.graphics.write_frame();
memperbaiki batas ukuran alokasi buffer maksimum untuk GPU AMD dan Intel CPU Runtime untuk OpenCL
memperbaiki cetakan info Re<Re_max
yang salah untuk simulasi 2D
perbaikan kecil di bandwidth_bytes_per_cell_device()
Baca Dokumentasi FluidX3D!
streaming (bagian 2/2)
f 0 suhu ( x , t ) = f 0 ( x , t )
f i temp ( x , t ) = f ( t %2 ? i : ( i %2 ? i +1 : i -1)) ( i %2 ? x : x - e i , t ) untuk i ∈ [1 , pertanyaan -1]
tabrakan
ρ ( x , t ) = (Σ i f i suhu ( x , t )) + 1
u ( x , t ) = 1 ∕ ρ ( x , t ) Σ i c i f i suhu ( x , t )
f i persamaan-bergeser ( x , t ) = w i ρ · ( ( u ° c i ) 2 ∕ (2 c 4 ) - ( u ° u ) ∕ (2c 2 ) + ( u ° c i ) ∕ c 2 ) + w saya ( ρ -1)
f i temp ( x , t +Δ t ) = f i temp ( x , t ) + Ω i ( f i temp ( x , t ), f i eq-shifted ( x , t ), τ )
streaming (bagian 1/2)
f 0 ( x , t +Δ t ) = f 0 suhu ( x , t +Δ t )
f ( t %2 ? ( i %2 ? i +1 : i -1) : i ) ( i %2 ? x + e i : x , t +Δ t ) = f i temp ( x , t +Δ t ) untuk saya ∈ [1, q -1]
variabel | satuan SI | mendefinisikan persamaan | keterangan |
---|---|---|---|
X | M | x = (x,y,z) T | Posisi 3D dalam koordinat Cartesian |
T | S | - | waktu |
ρ | kg ∕ m³ | ρ = (Σ saya f saya )+1 | kepadatan massa fluida |
P | kg ∕ m s² | p = c²ρ | tekanan fluida |
kamu | m ∕ s | u = 1 ∕ ρ Σ i c i f i | kecepatan fluida |
ν | m² ∕ dtk | ν = μ ∕ ρ | viskositas geser kinematik fluida |
μ | kg ∕ m s | μ = ρν | viskositas dinamis fluida |
f saya | kg ∕ m³ | - | fungsi distribusi kepadatan bergeser (DDF) |
Δx | M | Δ x = 1 | konstanta kisi (dalam satuan LBM) |
Δ t | S | Δt = 1 | langkah waktu simulasi (dalam satuan LBM) |
C | m ∕ s | c = 1 ∕ √3 Δ x ∕ Δ t | kecepatan kisi suara (dalam satuan LBM) |
Saya | 1 | 0 ≤ saya < q | Indeks arah streaming LBM |
Q | 1 | q ∈ { 9,15,19,27 } | jumlah arah streaming LBM |
e saya | M | H2Q9 / H3Q15/19/27 | Petunjuk streaming LBM |
c saya | m ∕ s | c saya = e saya ∕ Δ t | Kecepatan streaming LBM |
dengan saya | 1 | Σ saya w saya = 1 | Kecepatan LBM mengatur bobot |
Ω saya | kg ∕ m³ | SRT atau TRT | Operator tabrakan LBM |
τ | S | τ = ν ∕ c ² + Δ t ∕ 2 | Waktu relaksasi LBM |
set kecepatan: D2Q9, D3Q15, D3Q19 (default), D3Q27
operator tabrakan: waktu relaksasi tunggal (SRT/BGK) (default), waktu relaksasi dua (TRT)
Pergeseran DDF dan optimasi aljabar lainnya untuk meminimalkan kesalahan pembulatan
??????????????????????????????????????????????????? ????
(kepadatan?, kecepatan?, bendera?, DDF?; setiap kotak = 1 Byte)
memungkinkan 19 Juta sel per 1 GB VRAM
streaming di tempat dengan Esoteric-Pull: menghilangkan salinan fungsi distribusi kepadatan (DDF) yang berlebihan di memori; hampir memotong setengah permintaan memori dan sedikit meningkatkan kinerja karena batas pemantulan implisit; menawarkan pola akses memori optimal untuk streaming di tempat sel tunggal
presisi aritmatika yang dipisahkan (FP32) dan presisi memori (FP32 atau FP16S atau FP16C): semua aritmatika dilakukan di FP32 untuk kompatibilitas pada semua perangkat keras, tetapi DDF dalam memori dapat dikompresi ke FP16S atau FP16C: hampir memotong setengah permintaan memori lagi dan hampir menggandakan kinerja, tanpa memengaruhi keakuratan keseluruhan untuk sebagian besar penyiapan
TYPE_S
(diam atau bergerak) batas padat
Batas keseimbangan TYPE_E
(arus masuk/aliran keluar)
Batas suhu TYPE_T
Permukaan bebas TYPE_F
(cairan)
Permukaan bebas TYPE_I
(antarmuka)
permukaan bebas TYPE_G
(gas)
TYPE_X
tersisa untuk penggunaan khusus atau ekstensi lebih lanjut
TYPE_Y
tersisa untuk penggunaan khusus atau ekstensi lebih lanjut
(kepadatan?, kecepatan?, bendera?, 2 salinan DDF?/?; setiap kotak = 1 Byte)
memungkinkan 3 Juta sel per 1 GB VRAM
LBM tradisional (D3Q19) dengan FP64 membutuhkan ~344 Byte/sel
FluidX3D (D3Q19) hanya membutuhkan 55 Byte/sel dengan Esoteric-Pull+FP16
penghematan biaya yang besar: perbandingan resolusi grid GPU tunggal maksimum untuk LBM D3Q19
Kapasitas VRAM GPU | 1 GB | 2 GB | 3 GB | 4 GB | 6 GB | 8 GB | 10 GB | 11 GB | 12 GB | 16 GB | 20 GB | 24 GB | 32 GB | 40 GB | 48 GB | 64 GB | 80 GB | 94 GB | 128 GB | 192 GB | 256 GB |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
perkiraan harga GPU | $25 GT 210 | $25 GTX 950 | $12 GTX 1060 | $50 GT 730 | $35 GTX 1060 | $70 RX 470 | $500 RTX3080 | $240 GTX 1080 Ti | $75 Tesla M40 | $75 Naluri MI25 | $900 RX 7900 XT | $205 Tesla P40 | $600 Naluri MI60 | $5500 A100 | $2400 RTX8000 | $10k Naluri MI210 | $11k A100 | >$40k H100 NVL | ? GPU Maks 1550 | ~$10k MI300X | - |
LBM tradisional (FP64) | 144³ | 182³ | 208³ | 230³ | 262³ | 288³ | 312³ | 322³ | 330³ | 364³ | 392³ | 418³ | 460³ | 494³ | 526³ | 578³ | 624³ | 658³ | 730³ | 836³ | 920³ |
CairanX3D (FP32/FP32) | 224³ | 282³ | 322³ | 354³ | 406³ | 448³ | 482³ | 498³ | 512³ | 564³ | 608³ | 646³ | 710³ | 766³ | 814³ | 896³ | 966³ | 1018³ | 1130³ | 1292³ | 1422³ |
CairanX3D (FP32/FP16) | 266³ | 336³ | 384³ | 424³ | 484³ | 534³ | 574³ | 594³ | 610³ | 672³ | 724³ | 770³ | 848³ | 912³ | 970³ | 1068³ | 1150³ | 1214³ | 1346³ | 1540³ | 1624³ |
dekomposisi domain memungkinkan pengumpulan VRAM dari beberapa GPU untuk resolusi grid yang jauh lebih besar
GPU tidak harus sama (bahkan tidak dari vendor yang sama), namun kapasitas/bandwidth VRAM yang serupa disarankan
arsitektur komunikasi domain (disederhanakan)
++ .------------------------------------------------ --------------. ++++ | GPU 0 | ++++ | Domain LBM 0 | ++++ '---------------------------------------------- --------------------' ++++ | selektif /| ++++ |/ salinan dalam VRAM | ++++ .--------------------------------------------- ----------. ++++ | GPU 0 - Penyangga Transfer 0 | ++++ '---------------------------------------------- ----------' ++!! | PCIe /| !!!! |/ salin | !!@@ .-------------------------. .-------------------------. @@@@ | CPU - Penyangga Transfer 0 | | CPU - Penyangga Transfer 1 | @@@@ '-------------------------' /'----------------- --------' @@@@ penunjuk X tukar @@@@ .-------------------------./ .- ------------------------. @@@@ | CPU - Penyangga Transfer 1 | | CPU - Penyangga Transfer 0 | @@@@ '-------------------------' '------------------ -------' @@!! /| PCIe | !!!! | salin |/ !!++ .------------------------------------------ -------------. ++++ | GPU 1 - Penyangga Transfer 1 | ++++ '---------------------------------------------- ----------' ++++ /| selektif | ++++ | salinan dalam VRAM |/ ++++ .--------------------------------------- --------------------------. ++++ | GPU 1 | ++++ | Domain LBM 1 | ++++ '---------------------------------------------- --------------------' ++## | #### penghalang sinkronisasi domain #### | ##|| --------------------------------------------------- -----------> waktu ||
arsitektur komunikasi domain (detail)
++ .--------------------------------- --------------. ++++ | GPU 0 | ++++ | Domain LBM 0 | ++++ '---------------------------------------------- --------------------' ++++ | selektif di- /| | selektif di- /| | selektif di- /| ++++ |/ salinan VRAM (X) | |/ salinan VRAM (Y) | |/ salinan VRAM (Z) | ++++ .-------.-------.- --------------------. ++++ | GPU 0 -TB 0X+ | GPU 0 -TB 0Y+ | GPU 0 -TB 0Z+ | ++++ | GPU 0 - TB 0X- | GPU 0 - TB 0Y- | GPU 0 - TB 0Z- | ++++ '---------------------'-------'- --------------------' ++!! | PCIe /| | PCIe /| | PCIe /| !!!! |/ salin | |/ salin | |/ salin | !!@@ .---------. .---------.---------. .---------.---------. .---------. @@@@ | CPU 0X+ | | CPU 1X- | CPU 0 tahun+ | | CPU 3 tahun- | Prosesor 0Z+ | | CPU 5Z- | @@@@ | CPU 0X- | | CPU 2X+ | CPU 0Y- | | CPU 4 Tahun+ | CPU 0Z- | | Prosesor 6Z+ | @@@@ '--------- /---------'--------- /---------'----- ---- /---------' @@@@ penunjuk X tukar (X) penunjuk X tukar (Y) penunjuk X tukar (Z) @@@@ .-------- -/ ---------.---------/ ---------.---------/ ---------. @@@@ | CPU 1X- | | CPU 0X+ | CPU 3 tahun- | | CPU 0 tahun+ | CPU 5Z- | | Prosesor 0Z+ | @@@@ | CPU 2X+ | | CPU 0X- | CPU 4 Tahun+ | | CPU 0Y- | Prosesor 6Z+ | | CPU 0Z- | @@@@ '---------' '---------'---------' '---------'--- ------' '---------' @@!! /| PCIe | /| PCIe | /| PCIe | !!!! | salin |/ | salin |/ | salin |/ !!++ .--------------------..-------------------- -..--------------------. ++++ | GPU 1 - TB 1X- || GPU 3 - TB 3 Tahun- || GPU 5 - TB 5Z- | ++++ :=====::=======:: =====: ++++ | GPU 2 - TB 2X+ || GPU 4 - TB 4 Tahun+ || GPU 6 -TB 6Z+ | ++++ '--------------------''---------------------'' --------------------' ++++ /| selektif di- | /| selektif di- | /| selektif di- | ++++ | Salinan VRAM (X) |/ | Salinan VRAM (Y) |/ | Salinan VRAM (Z) |/ ++++ .--------------------..---------------- -----..-----. ++++ | GPU 1 || GPU 3 || GPU 5 | ++++ | Domain LBM 1 || Domain LBM 3 || Domain LBM 5 | ++++ :=====::=======:: =====: ++++ | GPU 2 || GPU 4 || GPU 6 | ++++ | Domain LBM 2 || Domain LBM 4 || Domain LBM 6 | ++++ '--------------------''---------------------'' --------------------' ++## | | | #### | hambatan sinkronisasi domain | #### | | | ##|| --------------------------------------------------- -----------> waktu ||
tolok ukur GPU/CPU tunggal
tolok ukur multi-GPU
Subkisi D3Q7 untuk DDF termal
streaming di tempat dengan Esoteric-Pull untuk DDF termal
kompresi FP16S atau FP16C opsional untuk DDF termal dengan perpindahan DDF
model volume fluida
PLIC analitik sepenuhnya untuk penghitungan kelengkungan yang efisien
konservasi massal yang lebih baik
implementasi yang sangat efisien dengan hanya 4 kernel tambahan pada kernel stream_collide()
perhitungan opsional gaya dari fluida pada batas padat
batas pantulan kembali jaringan tengah yang stasioner (batas padat stasioner)
memindahkan batas pantulan kembali jaringan tengah (memindahkan batas padat)
batas keseimbangan (arus masuk/keluar non-reflektif)
batas suhu (suhu tetap)
tipe batas
kekuatan global per volume (Guo force), dapat dimodifikasi dengan cepat
gaya lokal per volume (medan gaya)
implementasi LBM permukaan bebas (FSLBM) yang canggih:
LBM termal untuk mensimulasikan konveksi termal
Model LES turbulensi subgrid Smagorinsky-Lilly menjaga simulasi dengan bilangan Reynolds yang sangat besar tetap stabil
Π αβ = Σ i e iα e iβ ( f i - f i eq-shifted )
Q = Σ αβ Π αβ 2
________
τ = ½ (τ 0 + √ τ 0 2 + (16√2) ∕ ( 3π 2 ) √Q ∕ ρ )
partikel dengan metode batas terbenam (baik pasif atau berpasangan 2 arah, hanya GPU tunggal)
FluidX3D dapat melakukan simulasi begitu besar sehingga penyimpanan data volumetrik untuk rendering selanjutnya menjadi tidak dapat dikelola (seperti 120 GB untuk satu frame, ratusan TeraByte untuk satu video)
sebaliknya, FluidX3D memungkinkan rendering data simulasi mentah langsung di VRAM, sehingga tidak ada file volumetrik besar yang harus diekspor ke hard disk (lihat pembicaraan teknis saya)
renderingnya sangat cepat sehingga bekerja secara interaktif dan real-time untuk rasterisasi dan raytracing
rasterisasi dan raytracing dilakukan di OpenCL dan bekerja pada semua GPU, bahkan GPU tanpa inti raytracing RTX/DXR atau tanpa perangkat keras rendering sama sekali (seperti A100, MI200, ...)
jika tidak ada monitor yang tersedia (seperti pada server Linux jarak jauh), terdapat mode rendering ASCII untuk memvisualisasikan simulasi secara interaktif di terminal (bahkan di WSL dan/atau melalui SSH)
rendering sepenuhnya diparalelkan multi-GPU melalui rasterisasi dekomposisi domain yang mulus
dengan mode grafis interaktif dinonaktifkan, resolusi gambar dapat sebesar yang dimungkinkan oleh VRAM (4K/8K/16K dan lebih tinggi)
mode visualisasi (interaktif):
bingkai gambar bendera / permukaan padat (dan vektor gaya pada sel padat atau tekanan permukaan jika ekstensi digunakan)
bidang kecepatan (dengan mode irisan)
garis arus (dengan mode irisan)
isosurface kriteria-Q berwarna kecepatan
permukaan bebas rasterisasi dengan kubus berbaris
permukaan bebas penelusuran sinar dengan traversal ray-grid cepat dan kubus berbaris, baik 1-4 sinar/piksel atau 1-10 sinar/piksel
FluidX3D ditulis dalam OpenCL 1.2, sehingga berjalan di semua perangkat keras dari semua vendor (Nvidia, AMD, Intel, ...):
GPU pusat data tercepat di dunia: MI300X, H100 (NVL), A100, MI200, MI100, V100(S), GPU Max 1100, ...
GPU gaming (desktop/laptop): Nvidia GeForce, AMD Radeon, Intel Arc
GPU profesional/workstation: Nvidia Quadro, AMD Radeon Pro / FirePro, Intel Arc Pro
GPU terintegrasi
CPU (memerlukan instalasi Intel CPU Runtime untuk OpenCL)
Intel Xeon Phi (memerlukan instalasi Intel CPU Runtime untuk OpenCL)
GPU ARM ponsel cerdas
implementasi multi-GPU lintas vendor asli
menggunakan komunikasi PCIe, jadi tidak diperlukan SLI/Crossfire/NVLink/InfinityFabric
paralelisasi node tunggal, jadi tidak diperlukan instalasi MPI
GPU bahkan tidak harus dari vendor yang sama, namun kapasitas memori dan bandwidth yang sama direkomendasikan
berfungsi di Windows dan Linux dengan C++17, dengan dukungan terbatas juga untuk macOS dan Android
mendukung pengimporan dan voxelisasi jerat segitiga dari file .stl
biner, dengan voxelisasi GPU yang cepat
mendukung ekspor data volumetrik sebagai file biner .vtk
mendukung ekspor jerat segitiga sebagai file biner .vtk
mendukung ekspor gambar yang dirender sebagai file .png
/ .qoi
/ .bmp
; pengkodean berjalan secara paralel pada CPU sementara simulasi pada GPU dapat dilanjutkan tanpa penundaan
Berikut adalah tolok ukur kinerja pada berbagai perangkat keras dalam MLUP/dtk, atau berapa juta sel kisi yang diperbarui per detik. Pengaturan yang digunakan untuk benchmark adalah D3Q19 SRT tanpa ekstensi yang diaktifkan (hanya LBM dengan batas pemantulan kembali jaringan tengah yang implisit) dan pengaturannya terdiri dari kotak kubik kosong dengan ukuran yang memadai (biasanya 256³). Tanpa ekstensi, satu sel kisi memerlukan:
kapasitas memori 93 (FP32/FP32) atau 55 (FP32/FP16) Byte
bandwidth memori 153 (FP32/FP32) atau 77 (FP32/FP16) Byte per langkah waktu
363 (FP32/FP32) atau 406 (FP32/FP16S) atau 1275 (FP32/FP16C) FLOP per langkah waktu (operasi FP32+INT32 dihitung gabungan)
Akibatnya, intensitas aritmatika implementasi ini adalah 2,37 (FP32/FP32) atau 5,27 (FP32/FP16S) atau 16,56 (FP32/FP16C) FLOPs/Byte. Jadi kinerja hanya dibatasi oleh bandwidth memori. Tabel di 3 kolom kiri menunjukkan spesifikasi perangkat keras seperti yang ditemukan dalam lembar data (kinerja komputasi puncak teoritis FP32, kapasitas memori, bandwidth memori puncak teoritis). 3 kolom sebelah kanan menunjukkan kinerja FluidX3D yang diukur untuk pengaturan presisi floating-point FP32/FP32, FP32/FP16S, FP32/FP16C, dengan (efisiensi model garis atap) dalam tanda kurung bulat, yang menunjukkan berapa % bandwidth memori puncak teoretis yang digunakan .
Jika GPU/CPU Anda belum ada dalam daftar, Anda dapat melaporkan tolok ukur Anda di sini.