最快、記憶體效率最高的格子玻爾茲曼 CFD 軟體,透過 OpenCL 在所有 GPU 上運作。免費用於非商業用途。
(點擊圖片即可顯示 YouTube 上的影片)
v1.0 (04.08.2022) 變更(公開發布)
公開發布
v1.1 (29.09.2022) 更改(GPU 體素化)
在 GPU 上加入了實體體素化(慢速演算法)
新增了列印目前相機位置的工具( G鍵)
小錯誤修復(針對三角形渲染的 Intel iGPU 驅動程式錯誤的解決方法)
v1.2 (24.10.2022) 更改(力/扭力計算)
增加了計算物體上的力/扭矩的函數
新增了翻譯Mesh的功能
新增了斯托克斯拖曳驗證設置
v1.3 (10.11.2022) 更改(小錯誤修復)
增加扭力單位轉換功能
FORCE_FIELD
和VOLUME_FORCE
現在可以獨立使用
小錯誤修復(使用二進位數位文字解決 AMD 舊版驅動程式錯誤的方法)
v1.4 (14.12.2022) 更改(Linux 圖形)
完全重寫 C++ 圖形庫以最大限度地減少 API 依賴性
在具有 X11 的 Linux 上新增了互動式圖形模式
修正了 2D 中的流線視覺化錯誤
v2.0 (09.01.2023) 變更(多 GPU 升級)
在單一節點(PC/筆記型電腦/伺服器)上新增(跨供應商)多 GPU 支援
v2.1 (15.01.2023) 更改(快速體素化)
在 GPU 上實現固體體素化速度快如閃電(新演算法,從幾分鐘到幾毫秒)
v2.2 (20.01.2023) 更改(速度體素化)
新增了在 GPU 上對移動/旋轉幾何體進行體素化的選項,並根據旋轉中心、線速度和旋轉速度對每個網格點進行自動速度初始化
在重新體素化期間從固體轉換為液體的細胞現在已正確初始化其 DDF
新增了在read_stl(...)
期間不自動縮放網格的選項,且size
參數為負
新增了用於使用行進立方體進行實體邊界渲染的內核
v2.3 (30.01.2023) 更改(粒子)
使用浸沒邊界方法添加粒子(被動或2路耦合,僅支援單GPU)
對 GPU 體素化演算法進行小幅最佳化(網格邊界框外的工作組執行緒在找到光線網格交叉點後傳回)
顯示的 GPU 記憶體分配大小現在完全準確
修正了src/utilities.hpp
中write_line()
函數的錯誤
刪除了 Linux/macOS 的.exe
檔副檔名
v2.4 (11.03.2023) 更改(UI 改進)
新增了帶有H鍵的幫助選單,顯示鍵盤/滑鼠控制、視覺化設定和模擬統計數據
改進鍵盤/滑鼠控制( +/-用於縮放,滑鼠點擊釋放/鎖定遊標)
新增瞭如果解析度設定大於記憶體允許的最大可能網格解析度的建議
多 GPU 通訊的小優化(效能差異不顯著)
修復了溫度擴展的溫度平衡函數中的錯誤
修正了天空盒顏色函數中英特爾 iGPU 的錯誤雙文字
修正了 make.sh 中多 GPU 裝置 ID 不會轉送到可執行檔的錯誤
圖形引擎中的小錯誤修復(旋轉期間自由遊標未居中,VR 模式下的標籤)
修正了LBM::voxelize_stl()
大小參數標準初始化中的錯誤
v2.5 (11.04.2023) 更改(光線追蹤大修)
在光線追蹤圖形的流體中實現光吸收(無性能影響)
當相機位於流體內時提高了光線追蹤幀率
修復了天空盒桿閃爍的偽影
修正了在重新體素化過程中移動物體會留下固體網格單元的錯誤軌跡的錯誤
v2.6 (16.04.2023) 更改(Intel Arc 補丁)
修正了 Intel Arc GPU 的 OpenCL 問題:現在可以分配 >4GB 的 VRAM,並報告正確的 VRAM 容量
v2.7 (29.05.2023) 變更(視覺化升級)
新增了切片視覺化(鍵2 / 鍵3模式,然後使用鍵T切換切片模式,使用鍵Q / E移動切片)
使標誌線框/實體表面可視化核心可透過鍵1切換
新增了表面壓力視覺化(當啟用FORCE_FIELD
並呼叫lbm.calculate_force_on_boundaries();
時鍵1 )
使用lbm.write_mesh_to_vtk(Mesh* mesh);
新增了網格的二進位.vtk
導出函數;
在 PARTICLES 擴充中為integrate_particles()
函數新增了time_step_multiplicator
讓 Intel Arc 上錯誤記憶體報告的修正更加穩健
修正了write_file()
模板函數中的錯誤
恢復為每個 OpenCL 裝置的單獨cl::Context
,否則共用上下文會在所有其他未使用的 Nvidia GPU 上分配額外的 VRAM
從 Visual Studio 解決方案檔案中刪除了偵錯和 x86 配置(減少了編譯的複雜性)
修復了粒子可能太靠近牆壁並被卡住或離開流體相的錯誤(增加了邊界力)
v2.8 (24.06.2023) 更改(文件 + 完善)
終於增加了更多文檔
清理了setup.cpp
中的所有範例設置,以更加適合初學者,並在defines.hpp
中添加了所需的擴展作為所有設置的註釋
透過添加省略自動網格重新定位的選項,改進了複合.stl
幾何圖形的加載,為utilities.hpp
中的Mesh
結構添加了更多功能
新增了uint3 resolution(float3 box_aspect_ratio, uint memory)
函數,用於根據框長寬比和 VRAM 佔用(以 MB 為單位)計算模擬框分辨率
新增了bool lbm.graphics.next_frame(...)
函數以在main_setup
計算循環中導出指定視訊長度的圖像
新增了VIS_...
宏,以便在lbm.graphics.visualization_modes
中的無頭圖形模式下輕鬆設定視覺化模式
現在,模擬框尺寸會自動被多 GPU 模擬的域均分
修正了載入檔案的資訊/警告/錯誤訊息格式,並使訊息/警告/錯誤訊息標籤著色
新增了艾哈邁德身體設定作為如何計算身體力量和阻力係數的範例
新增了 Cessna 172 和 Bell 222 設定以顯示載入複合 .stl 幾何形狀和移動部件的三維像素化
新增了可選的半透明渲染模式( defines.hpp
中的#define GRAPHICS_TRANSPARENCY 0.7f
)
修正了互動式圖形中流線視覺化的閃爍問題
改進了切片模式下流線的平滑定位
修復了SURFACE
擴充中的mass
和massex
也分配在 CPU RAM 中的錯誤(不需要)
修正了多 GPU 模式下光環資料的 Q 準則渲染中的錯誤,減少了域之間的間隙寬度
從網格體素化核心中刪除了共享記憶體最佳化,因為它在使用新 GPU 驅動程式的 Nvidia GPU 上崩潰,並且與舊的 OpenCL 1.0 GPU 不相容
修正了當沒有表面位於具有週期性邊界的模擬盒壁處時的光線追蹤衰減顏色
v2.9 (31.07.2023) 更改(多執行緒)
使用std::threads
在utilities.hpp
中加入了跨平台parallel_for
實現
透過多執行緒幾何初始化和健全性檢查,模擬啟動速度顯著加快 (>4 倍)
具有多執行緒功能的更快的calculate_force_on_object()
和calculate_torque_on_object()
函數
將總運行時間和 LBM 運行時間新增至lbm.write_status()
修復了體素化射線方向的錯誤,用於重新體素化旋轉物體
修正了Mesh::get_bounding_box_size()
中的錯誤
修正了utilities.hpp
中print_message()
函數的錯誤
v2.10 (05.11.2023) 更改(視錐體剔除)
當只有部分模擬框可見時,透過視錐體剔除提高了光柵化性能
改進了居中/自由相機模式之間的切換
重構OpenCL渲染庫
當使用units.set_m_kg_s(...)
時,單位換算係數現在會自動列印在控制台中
FluidX3D 基準測試的啟動時間更快
voxelize_mesh(...)
核心中的礦工錯誤修復
修復了shading(...)
用標準 C99 LCG 取代慢速(在多執行緒中) std::rand()
函數
對 Intel Arc GPU 上錯誤的 VRAM 容量報告進行更強大的修正
修復了一些小的編譯器警告
v2.11 (07.12.2023) 更改(改進了 Linux 圖形)
Linux 上的互動式圖形現在也處於全螢幕模式,與 Windows 完全匹配
使用std::fill
和enqueueFillBuffer
使 CPU/GPU 緩衝區初始化速度顯著加快(模擬啟動速度整體加快約 8%)
將作業系統資訊加入 OpenCL 裝置驅動程式版本列印輸出中
修正了在非常小的視場中截錐體剔除的閃爍問題
修正了當visualization_modes
變更時渲染/匯出的幀未更新的錯誤
v2.12 (18.01.2024) 更改(啟動速度更快)
如果安裝了make
,在使用多個 CPU 核心的 Linux 上編譯原始碼的速度可提高約 3 倍
模擬初始化速度顯著加快(單 GPU 約 40%,多 GPU 約 15%)
Memory_Container::reset()
函數中的小錯誤修復
v2.13 (11.02.2024) 更改(改進了 .vtk 導出)
導出的.vtk
檔案中的資料現在自動轉換為 SI 單位
透過多執行緒處理.vtk
導出速度提高約 2 倍
為TEMPERATURE
擴展添加了單位轉換功能
修正了光線追蹤中軸對齊相機的圖形偽影
修復了 macOS 的get_exe_path()
修復了 Linux 上的 X11 多顯示器問題
Nvidia 驅動程式錯誤的解決方法:Nvidia GPU 上的大緩衝區的enqueueFillBuffer
被破壞
修正了由-cl-fast-relaxed-math
引起的緩慢數字漂移問題
修正了LBM::write_status()
中錯誤的最大分配大小報告
修正了LBM::write_mesh_to_vtk()
中缺少將座標縮放為 SI 單位的問題
v2.14 (03.03.2024) 變更(視覺化升級)
現在可以使用Z鍵在速度/密度/溫度之間切換著色
統一改進的調色板,用於速度/密度/溫度可視化
現在可以使用H鍵顯示具有自動單位轉換功能的色標
用於場可視化的切片模式現在繪製完全填充的切片,而不是僅繪製速度向量的線
VIS_FLAG_SURFACE
和VIS_PHI_RASTERIZE
模式下的著色現在更加平滑
make.sh
現在會自動偵測 Linux 上的作業系統和 X11 支持,並且僅在上次編譯成功時才執行 FluidX3D
修復了 Android 上的編譯器警告
修正了由於非標準解釋器路徑而導致make.sh
在某些系統上失敗的問題
修正了make
在某些系統上無法使用多核心進行編譯的問題
v2.15 (09.04.2024) 更改(幀率提升)
消除了渲染鏈中的一幀記憶體複製和一幀清除操作,在 Windows 和 Linux 上幀速率提高了 20-70%
啟用g++
編譯器最佳化以實現更快的啟動和更高的渲染幀速率
修正了多執行緒健全性檢查中的錯誤
修復了熱膨脹係數的錯誤單位轉換
固定密度到壓力的轉換(LBM 單位)
修正了光線追蹤核心可能鎖定模擬的錯誤
透過光線追蹤修復了輕微的視覺偽影
修復了在INTERACTIVE_GRAPHICS_ASCII
渲染開始之前控制台有時未被清除的問題
v2.16 (02.05.2024) 更改(錯誤修復)
透過在邊緣上進行 1D 插值而不是 3D 插值,簡化了 10% 快的行進立方體實現,從而可以擺脫邊緣表
添加了更快、簡化的行進立方體變體,用於實體表面渲染,其中邊緣始終位於網格單元之間的中間
OpenCL 渲染核心中的重構
修正了因陣列越界存取而在 Intel OpenCL CPU 運行時中體素化失敗的問題
修復了與單 GPU 相比,體素化在多 GPU 中並不總是產生相同的二進位結果
修復了自由表面模擬速度體素化失敗的問題
透過用a*b+c
宏替換融合乘加 ( fma
) 修復了 ARM GPU 上糟糕的效能
修正了 Linux 中QWERTY
鍵盤佈局的Y / Z鍵不正確的問題
修正了滾動時靜止影像中幫助疊加中的自由相機移動速度未更新的問題
修正了在具有 Linux-X11 互動式圖形的觸控板上滾動時間標籤有時會閃爍的問題
修正了相機未移動時多 GPU 互動式渲染的閃爍問題
修正了缺少的XInitThreads()
調用,該調用可能會導致某些系統上的 Linux 互動式圖形崩潰
修正了graphics_rasterize_phi()
和graphics_flags_mc()
核心之間的z-fighting
v2.17 (05.06.2024) 更改(無限網域解析)
域不再限於 42.9 億(2³²、1624³)網格單元或 225 GB 記憶體;如果使用更多,OpenCL 程式碼將自動使用 64 位元索引進行編譯
用於單 GPU 模擬的新的、更快的基於光線追蹤的場可視化
在文件中新增了 GPU 驅動程式和 OpenCL 執行階段安裝說明
重構INTERACTIVE_GRAPHICS_ASCII
修正了floatN
、 floatNxN
、 doubleN
、 doubleNxN
析構函數中的記憶體洩漏(均未使用)
使相機移動/旋轉/縮放行為獨立於幀速率
修正瞭如果裝置報告 0 MHz 時脈速度, smart_device_selection()
將列印錯誤警告的問題
v2.18 (21.07.2024) 更改(更多錯誤修復)
增加了對 Linux 上高刷新率顯示器的支持
文件中更緊湊的 OpenCL 運行時安裝腳本
如果沒有可用的 OpenCL 設備,驅動程式/運行時安裝說明現在將列印到控制台
將域資訊加入LBM::write_status()
為uint3
輸入參數添加了LBM::index
函數
透過將最大渲染距離從 10k 增加到 2.1M,修復了非常大的模擬有時無法正確渲染的問題
修正了 Linux 上高螢幕更新率下的滑鼠輸入卡頓問題
修正了 OpenCL 英特爾 CPU 運行時自由表面光線追蹤中的圖形偽影
修正了在控制台中列印的運行時估計,用於多個lbm.run(...)
呼叫的設置
樣本設定中的固定密度振盪( lbm_u
太大)
修正了raytrace_phi()
中的小圖形偽影
修正了ray_grid_traverse_sum()
中的次要圖形偽影
修正了雨滴樣本設定中錯誤的列印時間步數
v2.19 (07.09.2024) 更改(相機樣條線)
現在,使用 Catmull-Rom 樣條線,相機可以沿著提供的關鍵影格相機位置清單的平滑路徑飛行
更準確的剩餘運行時間估計,包括渲染所花費的時間
預設啟用 FP16S 記憶體壓縮
使用G鍵列印的相機位置現已格式化,以便於複製/貼上
使用美人魚甘特圖在自述文件中加入了基準圖表
在模擬啟動期間將記憶體分配資訊放置在更好的位置
修復了INTERACTIVE_GRAPHICS
和lbm.graphics.write_frame();
修正了 AMD GPU 和 OpenCL 的 Intel CPU 運行時的最大緩衝區分配大小限制
修正了 2D 模擬的錯誤Re<Re_max
資訊列印輸出
bandwidth_bytes_per_cell_device()
中的小修復
閱讀 FluidX3D 文件!
串流媒體(第 2/2 部分)
f 0溫度( 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 ) for i ∈ [1 , q -1]
碰撞
ρ ( x , t ) = (Σ i f i temp ( x , t )) + 1
u ( x , t ) = 1 ∕ ρ ( x , t ) Σ i c i f i temp ( x , t )
fi eq-shifted ( x , t ) = w i ρ · ( ( u ° c i ) 2 ∕ (2 c 4 ) - ( u ° u ) ∕ (2c 2 ) + ( u ° c i ) ∕ c 2 ) + w i ( ρ -1)
fi temp ( x , t +Δ t ) = fi temp ( x , t ) + Ω i ( fi temp ( x , t ), fi eq-shifted ( x , t ), τ )
串流媒體(第 1/2 部分)
f 0 ( x , t + Δ t ) = f 0溫度( 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 ) 對於i ∈ [1, q -1]
多變的 | 國際單位制 | 定義方程式 | 描述 |
---|---|---|---|
x | 米 | x = (x,y,z) T | 笛卡爾座標中的 3D 位置 |
t | s | - | 時間 |
ρ | 公斤∕立方米 | ρ = (Σ i f i )+1 | 流體的質量密度 |
p | 公斤∕米·秒² | p = c ² ρ | 流體壓力 |
你 | 米∕秒 | u = 1 ∕ ρ Σ i c i f i | 流體速度 |
ν | 平方米∕秒 | ν = μ ∕ ρ | 流體運動剪切黏度 |
μ | 公斤∕米·秒 | μ = ρ ν | 流體動力黏度 |
我 | 公斤∕立方米 | - | 移位密度分佈函數 (DDF) |
Δx | 米 | Δx = 1 | 晶格常數(LBM 單位) |
Δt | s | Δt = 1 | 模擬時間步長(以LBM為單位) |
c | 米∕秒 | c = 1 ∕ √3 Δ x ∕ Δ t | 聲格速度(LBM 單位) |
我 | 1 | 0 ≤ i < q | LBM流方向索引 |
q | 1 | q ∈ { 9,15,19,27 } | LBM流方向的數量 |
我 | 米 | D2Q9 / D3Q15/19/27 | LBM 流方向 |
我 | 米∕秒 | c i = e i ∕ Δ t | LBM 流速度 |
我 | 1 | Σ i w i = 1 | LBM 速度設定權重 |
Ω一 | 公斤∕立方米 | SRT 或 TRT | LBM碰撞算子 |
τ | s | τ = ν ∕ c ² + Δ t ∕ 2 | LBM弛豫時間 |
速度設定:D2Q9、D3Q15、D3Q19(預設)、D3Q27
碰撞算子:單弛豫時間 (SRT/BGK)(預設)、雙弛豫時間 (TRT)
DDF 移位和其他代數最佳化以最小化舍入誤差
?????????????????????????????????????????????????? ? ????
(密度 ?、速度 ?、標誌 ?、DDF ?;每個方格 = 1 個位元組)
每 1 GB VRAM 允許容納 1900 萬個單元
使用 Esoteric-Pull 進行就地串流:消除記憶體中密度分佈函數 (DDF) 的冗餘副本;由於隱含的反彈邊界,記憶體需求幾乎減少了一半,並略微提高了效能;為單一單元就地流提供最佳記憶體存取模式
解耦算術精度(FP32) 和內存精度(FP32 或FP16S 或FP16C):所有算術都在FP32 中完成,以便在所有硬體上相容,但內存中的DDF 可以壓縮為FP16S 或FP16C:幾乎將內存需求再次減少一半效能加倍,且不影響大多數設定的整體精度
TYPE_S
(靜止或移動)實體邊界
TYPE_E
平衡邊界(流入/流出)
TYPE_T
溫度邊界
TYPE_F
自由表面(流體)
TYPE_I
自由表面(介面)
TYPE_G
自由表面(氣體)
TYPE_X
剩餘用於自訂使用或進一步擴展
TYPE_Y
剩餘用於自訂使用或進一步擴展
(密度 ?、速度 ?、標誌 ?、2 個 DDF 副本 ?/?;每個方塊 = 1 位元組)
每 1 GB VRAM 允許容納 300 萬個單元
具有 FP64 的傳統 LBM (D3Q19) 需要 ~344 位元組/單元
FluidX3D (D3Q19) 使用 Esoteric-Pull+FP16 只需要 55 個位元組/單元
大幅節省成本:D3Q19 LBM 最大單 GPU 網格解析度比較
GPU顯存容量 | 1GB | 2GB | 3GB | 4GB | 6GB | 8GB | 10GB | 11GB | 12GB | 16 GB | 20GB | 24GB | 32GB | 40GB | 48GB | 64GB | 80GB | 94GB | 128GB | 192GB | 256GB |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GPU 大概價格 | 25 美元 GT 210 | 25 美元 顯示卡950 | 12 美元 顯示卡1060 | 50 美元 GT 730 | 35 美元 顯示卡1060 | 70 美元 RX 470 | 500 美元 RTX 3080 | 240 美元 GTX 1080 鈦 | 75 美元 特斯拉 M40 | 75 美元 本能軍情25 | 900 美元 RX 7900XT | 205 美元 特斯拉 P40 | 600 美元 本能 MI60 | $5500 A100 | $2400 RTX 8000 | 1萬美元 本能 MI210 | 11,000 美元 A100 | > 4 萬美元 H100 NVL | ? GPU 最大 1550 | 〜10,000 美元 米300X | - |
傳統 LBM (FP64) | 144立方 | 182立方 | 208立方 | 230立方 | 262立方 | 288立方 | 312立方 | 322立方 | 330立方 | 364立方 | 392立方 | 418立方 | 460立方 | 494立方 | 526立方 | 578立方 | 624立方 | 658立方 | 730立方 | 836立方 | 920立方 |
FluidX3D (FP32/FP32) | 224立方 | 282立方 | 322立方 | 354立方 | 406立方 | 448立方 | 482立方 | 498立方 | 512立方 | 564立方 | 608立方 | 646立方 | 710立方 | 766立方 | 814立方 | 896立方 | 966立方 | 1018立方 | 1130立方 | 1292立方 | 1422立方 |
FluidX3D (FP32/FP16) | 266立方 | 336立方 | 384立方 | 424立方 | 484立方 | 534立方 | 574立方 | 594立方 | 610立方 | 672立方 | 724立方 | 770立方 | 848立方 | 912立方 | 970立方 | 1068立方 | 1150立方 | 1214立方 | 1346立方 | 1540立方 | 1624立方 |
域分解允許匯集多個 GPU 的 VRAM,以獲得更大的網格分辨率
GPU 不必相同(甚至不必來自同一供應商),但建議使用類似的 VRAM 容量/頻寬
域通訊架構(簡化)
++ .----------------------------------------------- ------------- ------------------。 ++++ | GPU 0 | ++++ | LBM 域 0 | ++++'--------------------------------------------- ----------- --------------------' ++++ | 選擇性/| ++++ |/ VRAM 內複製 | ++++ .--------------------------------------------- ------------ ----------。 ++++ | GPU 0 - 傳輸緩衝區 0 | ++++'--------------------------------------------- ----------- ----------'++!! | PCIe /| ! |/ 複製 | ! .-------------------------。 @@@@ | CPU - 傳輸緩衝區 0 | | CPU - 傳輸緩衝器 1 | @@@@ '-------------------------' /'----------------- --------' @@@@ 指針X 交換@@@@ .----------------------------. / .- ------------------------。 @@@@ | CPU - 傳輸緩衝器 1 | | CPU - 傳輸緩衝區 0 | @@@@ '-------------------------' '------------------ -------'@@!! /| PCIe | ! | 複製 |/!!++ .------------------------------------------ -------------。 ++++ | GPU 1 - 傳輸緩衝區 1 | ++++'--------------------------------------------- ----------- ----------' ++++ /| 選擇性| ++++ | VRAM 內複製|/ ++++ .---------------------------------------- ------------ --------------------------。 ++++ | GPU 1 | ++++ | LBM 域 1 | ++++'--------------------------------------------- ----------- --------------------' ++## | #### 網域同步屏障 #### | ##|| -------------------------------------------------- -----------> 時間||
域通訊架構(詳細)
++ .----------------------------------------------- ------------- ------------------。 ++++ | GPU 0 | ++++ | LBM 域 0 | ++++'--------------------------------------------- ----------- --------------------' ++++ | 選擇性輸入- /| | 選擇性輸入- /| | 選擇性輸入- /| ++++ |/ VRAM 複製 (X) | |/ VRAM 複製 (Y) | |/ 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 /| ! |/ 複製 | |/ 複製 | |/ 複製 | ! .---------.---------。 .---------.---------。 .---------。 @@@@ | CPU 0X+ | | CPU 1X- | CPU 0Y+ | | CPU 3Y- | CPU 0Z+ | | CPU 5Z- | @@@@ | CPU 0X-| | CPU 2X+ | CPU 0Y-| | CPU 4Y+ | CPU 0Z-| | CPU 6Z+ | @@@@ '--------- /---------'--------- /---------'----- ---- /---------' @@@@ 指標X 交換(X) 指標X 交換(Y) 指標X 交換(Z) @@@@ .-------- -/ ---------.---------/ ---------.---------/ -------- -. @@@@ | CPU 1X- | | CPU 0X+ | CPU 3Y- | | CPU 0Y+ | CPU 5Z- | | CPU 0Z+ | @@@@ | CPU 2X+ | | CPU 0X-| CPU 4Y+ | | CPU 0Y-| CPU 6Z+ | | CPU 0Z-| @@@@ '---------' '--------'---------' '---------'--- - -----''---------'@@!! /| PCIe | /| PCIe | /| PCIe | ! |複製 |/ |複製 |/ |複製 |/!!++ .--------------------..-------------------- -..--------------------。 ++++ | GPU 1 - TB 1X- || GPU 3 - TB 3Y- || GPU 5 - TB 5Z- | ++++ :====================::======================: : ====================: ++++ | GPU 2 - TB 2X+ || GPU 4 - TB 4Y+ || GPU 6 - TB 6Z+ | ++++ '--------------------''--------------------'' - -------------------' ++++ /|選擇性輸入- | /|選擇性輸入- | /|選擇性輸入- | ++++ | VRAM 複製 (X) |/ | VRAM 複製 (Y) |/ | VRAM 複製 (Z) |/ ++++ .--------------------..---------------- -----..--------------------。 ++++ | 圖形處理器 1 || GPU 3 || GPU 5 | ++++ | LBM 域 1 || LBM 域 3 || LBM 域 5 | ++++ :====================::======================: : ====================: ++++ | GPU 2 || GPU 4 || GPU 6 | ++++ | LBM 域 2 || LBM 域 4 || LBM 域 6 | ++++ '--------------------''--------------------'' - -------------------' ++## | | | #### | 域同步障礙| #### | | | ##|| -------------------------------------------------- -----------> 時間||
單 GPU/CPU 基準測試
多 GPU 基準測試
用於熱 DDF 的 D3Q7 子網格
使用 Esoteric-Pull 進行熱 DDF 的就地串流傳輸
可選 FP16S 或 FP16C 壓縮,適用於 DDF 移位的熱 DDF
流體體積模型
用於高效曲率計算的完全分析 PLIC
改善品質守恆
除了stream_collide()
核心之外,僅用4個核心即可實現超高效的實現
可選擇計算固體邊界上流體的力
固定中網格反彈邊界(固定實體邊界)
移動中間網格反彈邊界(移動實體邊界)
平衡邊界(非反射流入/流出)
溫度邊界(固定溫度)
邊界類型
每體積的全域力(郭),可以即時修改
每體積的局部力(力場)
最先進的自由表面 LBM (FSLBM) 實施:
熱 LBM 模擬熱對流
Smagorinsky-Lilly 子網格湍流 LES 模型可維持極大雷諾數模擬的穩定
Π αβ = Σ i e iα e iβ ( f i - f i eq-shifted )
Q = Σ αβ Π αβ 2
______________________
τ = ½ (τ 0 + √ τ 0 2 + (16√2) ∕ ( 3π 2 ) √Q ∕ ρ )
採用浸沒邊界法的粒子(被動或雙向耦合,僅限單 GPU)
FluidX3D 可以進行如此大的模擬,以至於儲存用於以後渲染的體積資料變得難以管理(例如單幀 120GB,視訊數百 TeraByte)
相反,FluidX3D 允許直接在 VRAM 中渲染原始模擬數據,因此無需將大體積檔案匯出到硬碟(請參閱我的技術演講)
渲染速度非常快,可以即時互動地進行光柵化和光線追蹤
光柵化和光線追蹤在 OpenCL 中完成,適用於所有 GPU,甚至是那些沒有 RTX/DXR 光線追蹤核心或根本沒有任何渲染硬體的 GPU(例如 A100、MI200 等)
如果沒有可用的監視器(例如在遠端 Linux 伺服器上),則可以使用 ASCII 渲染模式以互動方式視覺化終端機中的模擬(甚至在 WSL 和/或透過 SSH 中)
透過無縫域分解光柵化實現完全多 GPU 平行渲染
停用互動式圖形模式時,影像解析度可以達到 VRAM 允許的大小(4K/8K/16K 以上)
(互動式)視覺化模式:
標記線框/實體表面(以及實體單元上的力向量或表面壓力(如果使用擴展)
速度場(切片模式)
流線型(使用切片模式)
速度色 Q 準則等值面
有行進立方體的光柵化自由表面
光線追蹤自由表面,具有快速光線網格遍歷和行進立方體,1-4 條光線/像素或 1-10 條光線/像素
FluidX3D 是用 OpenCL 1.2 寫的,因此它可以在所有供應商的所有硬體上運作(Nvidia、AMD、Intel...):
全球最快的資料中心 GPU:MI300X、H100 (NVL)、A100、MI200、MI100、V100(S)、GPU Max 1100...
遊戲 GPU(桌上型電腦/筆記型電腦):Nvidia GeForce、AMD Radeon、Intel Arc
專業/工作站 GPU:Nvidia Quadro、AMD Radeon Pro / FirePro、Intel Arc Pro
整合 GPU
CPU(需安裝適用於 OpenCL 的 Intel CPU Runtime)
Intel Xeon Phi(需要安裝適用於 OpenCL 的 Intel CPU Runtime)
智慧型手機 ARM GPU
原生跨供應商多 GPU 實現
使用 PCIe 通信,因此不需要 SLI/Crossfire/NVLink/InfinityFabric
單節點並行化,因此無需安裝 MPI
GPU 甚至不必來自同一供應商,但建議使用相似的記憶體容量和頻寬
適用於使用 C++17 的 Windows 和 Linux,對 macOS 和 Android 的支援也有限
支援從二進位.stl
檔案導入和體素化三角形網格,具有快速 GPU 體素化
支援將體積資料匯出為二進位.vtk
文件
支援將三角形網格匯出為二進位.vtk
文件
支援將渲染影像匯出為.png
/ .qoi
/ .bmp
檔案;編碼在 CPU 上並行運行,而 GPU 上的模擬可以無延遲地繼續進行
以下是各種硬體的效能基準(以 MLUP/s 為單位),即每秒更新多少百萬個晶格單元。用於基準測試的設定是 D3Q19 SRT,未啟用擴展(僅具有隱式中網格反彈邊界的 LBM),並且設定由一個具有足夠大小(通常為 256³)的空立方體組成。如果沒有擴展,單一晶格單元需要:
記憶體容量為 93 (FP32/FP32) 或 55 (FP32/FP16) 位元組
每個時間步 153 (FP32/FP32) 或 77 (FP32/FP16) 位元組的記憶體頻寬
每個時間步 363 (FP32/FP32) 或 406 (FP32/FP16S) 或 1275 (FP32/FP16C) FLOP(FP32+INT32 操作合計)
因此,此實現的算術強度為 2.37 (FP32/FP32) 或 5.27 (FP32/FP16S) 或 16.56 (FP32/FP16C) FLOPs/位元組。因此效能僅受記憶體頻寬的限制。左側 3 欄的表格顯示了資料表中的硬體規格(理論峰值 FP32 計算效能、記憶體容量、理論峰值記憶體頻寬)。右側 3 列顯示了 FP32/FP32、FP32/FP16S、FP32/FP16C 浮點精度設定下測得的 FluidX3D 性能,圓括號中的(屋頂線模型效率)表示正在使用理論峰值記憶體頻寬的百分比。
如果您的 GPU/CPU 尚未出現在清單中,您可以在此處報告您的基準測試。