最速かつ最もメモリ効率の高い格子ボルツマン CFD ソフトウェアで、OpenCL 経由ですべての GPU 上で実行されます。非営利使用の場合は無料です。
(画像をクリックするとYouTubeのビデオが表示されます)
v1.0 (2022 年 4 月 8 日) の変更点 (公開リリース)
一般公開
v1.1 (2022 年 9 月 29 日) の変更点 (GPU ボクセル化)
GPU でのソリッド ボクセル化を追加しました (低速アルゴリズム)
現在のカメラ位置を印刷するツールを追加しました (キーG )
マイナーなバグ修正 (三角形レンダリングに関する Intel iGPU ドライバーのバグの回避策)
v1.2 (2022 年 10 月 24 日) の変更点 (力/トルクの計算)
オブジェクトにかかる力/トルクを計算する関数を追加しました
メッシュを変換する機能を追加
ストークスドラッグ検証セットアップを追加しました
v1.3 (2022 年 10 月 11 日) の変更点 (軽微なバグ修正)
トルクの単位換算機能を追加
FORCE_FIELD
とVOLUME_FORCE
独立して使用できるようになりました
マイナーなバグ修正 (2 進数リテラルに関する AMD レガシー ドライバーのバグの回避策)
v1.4 (2022 年 12 月 14 日) の変更点 (Linux グラフィックス)
C++ グラフィック ライブラリを完全に書き直し、API の依存関係を最小限に抑えます。
X11 を使用した Linux にインタラクティブ グラフィックス モードを追加
2D での流線視覚化のバグを修正しました
v2.0 (2023 年 9 月 1 日) の変更点 (マルチ GPU アップグレード)
単一ノード (PC/ラップトップ/サーバー) での (クロスベンダー) マルチ GPU サポートの追加
v2.1 (2023 年 1 月 15 日) の変更点 (高速ボクセル化)
GPU 上でソリッド ボクセル化を超高速に実行しました (新しいアルゴリズム、数分からミリ秒まで)
v2.2 (20.01.2023) の変更点 (速度ボクセル化)
GPU 上で移動/回転ジオメトリをボクセル化するオプションを追加しました。回転中心、線形速度、回転速度に基づいて各グリッド ポイントの速度を自動初期化します。
再ボクセル化中に固体から流体に変換されたセルの DDF が適切に初期化されるようになりました。
負のsize
パラメータを使用してread_stl(...)
中にメッシュを自動スケールしないオプションを追加しました
マーチングキューブを使用したソリッド境界レンダリング用のカーネルを追加しました
v2.3 (2023.01.30) の変更点 (パーティクル)
浸漬境界法によるパーティクルの追加 (パッシブまたは双方向結合のいずれか、シングル GPU でのみサポート)
GPU ボクセル化アルゴリズムに対するマイナーな最適化 (レイメッシュの交差が見つかった後に、メッシュ境界ボックスの外側にあるワークグループ スレッドが戻る)
表示される GPU メモリ割り当てサイズが完全に正確になりました
src/utilities.hpp
のwrite_line()
関数のバグを修正しました
Linux/macOS の.exe
ファイル拡張子を削除
v2.4 (2023 年 3 月 11 日) の変更点 (UI の改善)
キーボード/マウスのコントロール、視覚化設定、シミュレーション統計を表示するキーHを使用したヘルプ メニューを追加しました。
キーボード/マウスコントロールの改善 ( + / -ズーム、マウスクリックでカーソルを解放/ロック)
解像度がメモリで許容されるよりも大きく設定されている場合に、可能な最大のグリッド解像度の提案を追加しました
マルチ GPU 通信におけるマイナーな最適化 (重大なパフォーマンスの違いはありません)
温度拡張時の温度平衡関数のバグを修正
スカイボックス カラー関数における Intel iGPU の誤った二重リテラルを修正しました
マルチ GPU デバイス ID が実行可能ファイルに転送されない make.sh のバグを修正しました
グラフィックス エンジンのマイナーなバグ修正 (回転中にフリー カーソルが中心にならない、VR モードのラベル)
LBM::voxelize_stl()
サイズパラメータの標準初期化のバグを修正
v2.5 (11.04.2023) の変更点 (レイトレーシングのオーバーホール)
レイトレーシング グラフィックス用に流体への光吸収を実装しました (パフォーマンスへの影響なし)
カメラが流体内にあるときのレイトレーシングのフレームレートが向上しました
スカイボックスポールのちらつきアーティファクトを修正
再ボクセル化中にオブジェクトを移動すると、ソリッド グリッド セルの誤った痕跡が残るバグを修正しました
v2.6 (2023.04.16) の変更点 (Intel Arc パッチ)
Intel Arc GPU の OpenCL の問題がパッチされました: 4GB を超える VRAM 割り当てが可能になり、正しい VRAM 容量が報告されるようになりました
v2.7 (2023.05.29) の変更点 (視覚化のアップグレード)
スライスの視覚化を追加しました (キー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 構成を削除しました (コンパイルの複雑さが 1 つ減りました)
粒子が壁に近づきすぎて動けなくなったり、流体相から離れる可能性があるバグを修正しました(境界力の追加)
v2.8 (2023.06.24) の変更点 (ドキュメント + 洗練)
ついにドキュメントが追加されました
より初心者にわかりやすくするためにsetup.cpp
内のすべてのサンプルセットアップをクリーンアップし、すべてのセットアップへのコメントとして必要な拡張機能をdefines.hpp
に追加しました。
自動メッシュ再配置を省略するオプションを追加することにより、複合.stl
ジオメトリの読み込みが改善され、 utilities.hpp
のMesh
構造体にさらに多くの機能が追加されました。
ボックスのアスペクト比と MB 単位の VRAM 占有量に基づいてシミュレーション ボックスの解像度を計算するためのuint3 resolution(float3 box_aspect_ratio, uint memory)
関数を追加しました。
main_setup
計算ループで指定されたビデオの長さの画像をエクスポートするbool lbm.graphics.next_frame(...)
関数を追加しました
lbm.graphics.visualization_modes
のヘッドレス グラフィックス モードでの視覚化モードの設定を容易にするVIS_...
マクロを追加しました。
シミュレーション ボックスの寸法が、マルチ GPU シミュレーションのドメインで自動的に等しく割り切れるようになりました。
ファイルをロードするための情報/警告/エラー メッセージの形式を修正し、情報/警告/エラー メッセージのラベルを色付きにしました
ボディフォースと抗力係数の計算方法の例として、Ahmed ボディのセットアップを追加しました。
複合 .stl ジオメトリのロードと可動部品の再ボクセル化を紹介するために、Cessna 172 と Bell 222 のセットアップを追加しました。
オプションの半透明レンダリング モードを追加しました ( defines.hpp
の#define GRAPHICS_TRANSPARENCY 0.7f
)
インタラクティブグラフィックスにおけるストリームラインビジュアライゼーションのちらつきを修正
スライスモードでの流線のスムーズな位置決めが改善されました。
SURFACE
拡張機能のmass
とmassex
もCPU RAMに割り当てられるバグを修正しました(必須ではありません)
マルチ GPU モードでのハロー データの Q 基準レンダリングのバグを修正し、ドメイン間のギャップ幅を縮小しました
新しい GPU ドライバーを使用する Nvidia GPU ではクラッシュし、古い OpenCL 1.0 GPU と互換性がないため、メッシュ ボクセル化カーネルから共有メモリの最適化を削除しました。
周期的な境界を持つシミュレーション ボックスの壁にサーフェスがない場合のレイトレーシングの減衰カラーを修正しました。
v2.9 (2023.07.31) の変更点 (マルチスレッド)
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(...)
遅い (マルチスレッドでの) std::rand()
関数を標準の C99 LCG に置き換えました。
Intel Arc GPU での誤った VRAM 容量レポートのより強力な修正
いくつかのマイナーなコンパイラ警告を修正しました
v2.11 (07.12.2023) の変更点 (Linux グラフィックスの改善)
Linux 上のインタラクティブ グラフィックスもフルスクリーン モードになり、Windows と完全に一致します。
std::fill
およびenqueueFillBuffer
を使用して CPU/GPU バッファの初期化を大幅に高速化しました (全体で最大 8% 高速なシミュレーション起動)
OpenCL デバイス ドライバーのバージョンの出力にオペレーティング システム情報を追加しました
非常に狭い視野での錐台カリングによるちらつきを修正
visualization_modes
が変更されたときにレンダリング/エクスポートされたフレームが更新されないバグを修正しました
v2.12 (2024.01.18) の変更点 (起動の高速化)
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) の変更点 (フレームレートの向上)
レンダリング チェーンで 1 つのフレーム メモリ コピーと 1 つのクリア フレーム操作を排除し、Windows と Linux の両方で 20 ~ 70% 高いフレームレートを実現
g++
コンパイラの最適化を有効にして、より高速な起動とより高いレンダリング フレームレートを実現しました。
マルチスレッドサニティチェックのバグを修正しました
熱膨張係数の間違った単位変換を修正しました
LBM 単位での固定密度から圧力への変換
レイトレーシング カーネルがシミュレーションをロックアップする可能性があるバグを修正しました
レイトレーシングによるマイナーな視覚的アーティファクトを修正しました
INTERACTIVE_GRAPHICS_ASCII
レンダリングが開始される前にコンソールがクリアされない場合がある問題を修正しました
v2.16 (02.05.2024) の変更点 (バグ修正)
3D 補間ではなく 1D 補間をエッジに使用することで、マーチング キューブの実装が 10% 高速化され、エッジ テーブルが不要になりました。
エッジが常にグリッド セル間の中間にあるソリッド サーフェス レンダリング用の、より高速で簡素化されたマーチング キューブのバリアントを追加しました。
OpenCL レンダリング カーネルでのリファクタリング
配列の境界外アクセスが原因でインテル OpenCL CPU ランタイムでボクセル化が失敗する問題を修正しました
シングル GPU と比較してマルチ GPU でボクセル化が常にバイナリ同一の結果を生成するとは限らない問題を修正しました
自由表面シミュレーションで速度ボクセル化が失敗する問題を修正しました
マクロで fused-multiply-add ( fma
) をa*b+c
に置き換えることにより、ARM GPU でのひどいパフォーマンスを修正しました。
Linux のQWERTY
キーボード レイアウトでY / Zキーが正しくない問題を修正しました
スクロール時に静止画像でヘルプオーバーレイの自由カメラ移動速度が更新されない問題を修正しました。
Linux-X11 インタラクティブグラフィックスでトラックパッドをスクロールするとカーソルがちらつくことがある問題を修正
カメラが移動していないときのマルチ GPU によるインタラクティブ レンダリングのちらつきを修正しました
一部のシステムで Linux インタラクティブ グラフィックスをクラッシュさせる可能性がある欠落しているXInitThreads()
呼び出しを修正しました
graphics_rasterize_phi()
カーネルとgraphics_flags_mc()
カーネル間の Z ファイティングを修正しました
v2.17 (05.06.2024) の変更点 (無制限のドメイン解決)
ドメインは、42 億 9,000 万 (2³²、1624³) グリッド セルまたは 225 GB メモリに制限されなくなりました。さらに使用すると、OpenCL コードは 64 ビット インデックスで自動的にコンパイルされます。
シングル GPU シミュレーション用の、新しく高速なレイトレーシング ベースのフィールド視覚化
GPU ドライバーと OpenCL ランタイムのインストール手順をドキュメントに追加しました
リファクタリングされたINTERACTIVE_GRAPHICS_ASCII
floatN
、 floatNxN
、 doubleN
、 doubleNxN
(すべて未使用) のデストラクターでのメモリ リークを修正しました。
カメラの移動/回転/ズーム動作をフレームレートに依存しないようにしました
デバイスが 0 MHz のクロック速度を報告した場合に、 smart_device_selection()
が間違った警告を出力する問題を修正しました。
v2.18 (2024.07.21) の変更点 (その他のバグ修正)
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 を使用して印刷されたカメラの配置がフォーマットされ、簡単にコピー/ペーストできるようになりました。
マーメイド ガント チャートを使用したベンチマーク チャートを Readme に追加しました
シミュレーション起動時のメモリ割り当て情報をより適切な場所に配置
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 )
f i 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)
f i temp ( x , t +Δ t ) = f i temp ( x , t ) + Ω i ( f i temp ( x , t ), f i 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] の場合
変数 | SI単位 | 定義式 | 説明 |
---|---|---|---|
× | メートル | x = (x,y,z) T | デカルト座標での 3D 位置 |
t | s | - | 時間 |
ρ | kg ∕ m3 | ρ = (Σ i f i )+1 | 流体の質量密度 |
p | kg ∕ m 平方 | p = c ² ρ | 流体の圧力 |
あなた | メートル∕秒 | u = 1 ∕ ρ Σ i c i f i | 流体の速度 |
ν | 平方メートル∕秒 | ν = μ ∕ ρ | 流体の動せん断粘度 |
μ | kg ∕ミリ秒 | μ = ρ ν | 流体の動粘度 |
私は | kg ∕ m3 | - | シフト密度分布関数 (DDF) |
Δ × | メートル | Δ 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 速度セットの重み |
Ω i | kg ∕ m3 | SRT または TRT | LBM コリジョン オペレーター |
τ | s | τ = ν ∕ c ² + Δ t ∕ 2 | LBMリラックスタイム |
速度セット: D2Q9、D3Q15、D3Q19 (デフォルト)、D3Q27
衝突演算子: 単一緩和時間 (SRT/BGK) (デフォルト)、二緩和時間 (TRT)
丸め誤差を最小限に抑えるための DDF シフトおよびその他の代数的最適化
??????????????????????????????????????????? ???????
(密度 ?、速度 ?、フラグ ?、DDF ?; 各正方形 = 1 バイト)
1 GB VRAM あたり 1,900 万セルが可能
Esoteric-Pull によるインプレース ストリーミング: メモリ内の密度分布関数 (DDF) の冗長コピーを排除します。メモリ需要がほぼ半分になり、暗黙的なバウンスバック境界によりパフォーマンスがわずかに向上します。シングルセルのインプレース ストリーミングに最適なメモリ アクセス パターンを提供
算術精度 (FP32) とメモリ精度 (FP32 または FP16S または FP16C) の分離: すべてのハードウェアでの互換性を確保するために、すべての算術演算は FP32 で実行されますが、メモリ内の DDF は FP16S または FP16C に圧縮できます。メモリ需要はさらにほぼ半分に削減され、ほぼ半分になります。ほとんどのセットアップで全体的な精度に影響を与えることなく、パフォーマンスを 2 倍にします
TYPE_S
(静止または移動) ソリッド境界
TYPE_E
平衡境界 (流入/流出)
TYPE_T
温度境界
TYPE_F
自由表面 (流体)
TYPE_I
自由表面 (界面)
TYPE_G
自由表面 (ガス)
TYPE_X
カスタム使用またはさらなる拡張用に残ります
TYPE_Y
カスタム使用またはさらなる拡張用に残ります
(密度 ?、速度 ?、フラグ ?、DDF の 2 コピー ?/?; 各正方形 = 1 バイト)
1 GB VRAM あたり 300 万セルが可能
FP64 を使用した従来の LBM (D3Q19) はセルあたり約 344 バイトを必要とします
FluidX3D (D3Q19) は、Esoteric-Pull+FP16 を使用すると、セルあたり 55 バイトのみ必要となります
大幅なコスト削減: D3Q19 LBM の最大シングル GPU グリッド解像度の比較
GPU VRAM 容量 | 1GB | 2GB | 3GB | 4ギガバイト | 6GB | 8GB | 10GB | 11GB | 12GB | 16ギガバイト | 20GB | 24GB | 32GB | 40GB | 48GB | 64GB | 80GB | 94GB | 128GB | 192GB | 256GB |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GPUのおおよその価格 | 25ドル GT210 | 25ドル GTX950 | 12ドル GTX1060 | 50ドル GT730 | 35ドル GTX1060 | 70ドル RX470 | 500ドル RTX3080 | 240ドル GTX1080Ti | 75ドル テスラ M40 | 75ドル インスティンクト MI25 | 900ドル RX7900XT | $205 テスラ P40 | 600ドル インスティンクト MI60 | 5500ドル A100 | 2400ドル RTX8000 | 10,000ドル インスティンクト MI210 | 11,000ドル A100 | >40,000ドル H100NVL | ? GPU最大1550 | ~10,000ドル MI300X | - |
従来の LBM (FP64) | 1443 | 182㎥ | 2083 | 2303 | 2623 | 2883 | 3123 | 3223 | 3303 | 3643 | 3923 | 4183 | 4603 | 4943 | 5263 | 5783 | 6243 | 6583 | 7303 | 8363 | 9203 |
FluidX3D (FP32/FP32) | 2243 | 2823 | 3223 | 3543 | 4063 | 4483 | 4823 | 4983 | 5123 | 564㎥ | 6083 | 6463 | 7103 | 7663 | 8143 | 8963 | 9663 | 10183 | 11303 | 12923 | 14223 |
FluidX3D (FP32/FP16) | 2663 | 3363 | 3843 | 4243 | 4843 | 5343 | 574㎥ | 594㎥ | 6103 | 6723 | 7243 | 7703 | 8483 | 9123 | 9703 | 10683 | 11503 | 12143 | 13463 | 15403 | 16243 |
ドメイン分解により、複数の GPU から VRAM をプールして、より大きなグリッド解像度を実現できます。
GPU は同一である必要はありません (同じベンダーのものであっても) が、同様の VRAM 容量/帯域幅が推奨されます。
ドメイン通信アーキテクチャ (簡略化)
++ .------------------------------------------------- ------------------。 ++++ | GPU0 | ++++ | LBM ドメイン 0 | ++++ '------------------------------------------ --------------------' ++++ | 選択的 /| ++++ |/ VRAM 内コピー | ++++ .------------------------------------------ ----------。 ++++ | GPU 0 - 転送バッファ 0 | ++++ '------------------------------------------ ----------'++!! | PCIe /| !!! |/ コピー | !!@@ .--------------------------------------。 .-------------------------------------。 @@@@ | CPU - 転送バッファ 0 | | CPU - 転送バッファ 1 | @@@@ '-----------------------' /'----------------- --------' @@@@ ポインタ X スワップ @@@@ .-------------------------./ .- ------------------------。 @@@@ | CPU - 転送バッファ 1 | | CPU - 転送バッファ 0 | @@@@ '-----------------------' '---------------------- -------'@@!! /| PCIe | !!! | コピー |/ !!++ .------------------------------------------ -------------。 ++++ | GPU 1 - 転送バッファ 1 | ++++ '------------------------------------------ ----------' ++++ /| 選択的 | ++++ | VRAM 内コピー |/ ++++ .----------------------------------------------------- ------------------------。 ++++ | GPU1 | ++++ | LBM ドメイン 1 | ++++ '------------------------------------------ --------------------' ++## | #### ドメイン同期バリア #### | ##|| -------------------------------------------------- -----------> 時間 ||
ドメイン通信アーキテクチャ (詳細)
++ .------------------------------------------------- ------------------。 ++++ | GPU0 | ++++ | 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- | CPU0Z+ | | CPU 5Z- | @@@@ | CPU0X- | | CPU 2X+ | CPU 0Y- | | CPU 4歳以上 | CPU0Z- | | CPU 6Z+ | @@@@ '--------- /----------'----------- /---------'----- ---- /---------' @@@@ ポインタ X スワップ (X) ポインタ X スワップ (Y) ポインタ X スワップ (Z) @@@@ .-------- -/ ---------.-------/ ---------.-----------/ -------- -。 @@@@ | CPU 1X- | | CPU 0X+ | CPU 3Y- | | CPU 0Y+ | CPU 5Z- | | CPU0Z+ | @@@@ | CPU 2X+ | | CPU0X- | CPU 4歳以上 | | CPU 0Y- | CPU 6Z+ | | CPU0Z- | @@@@ '---------' '----------'---------' '---------'--- ------' 「-----------」 @@!! /| 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) |/ ++++ .---------------------..---------------- --------------------------------------。 ++++ | GPU 1 || GPU 3 || GPU5 | ++++ | LBM ドメイン 1 || LBM ドメイン 3 || LBM ドメイン 5 | ++++ :====================::=====================:: ====================: ++++ | GPU 2 || GPU 4 || GPU6 | ++++ | LBM ドメイン 2 || LBM ドメイン 4 || LBM ドメイン 6 | ++++ '----------------------'---------------------'' --------------------' ++## | | | #### | ドメイン同期の障壁 | #### | | | ##|| -------------------------------------------------- -----------> 時間 ||
シングル GPU/CPU ベンチマーク
マルチ GPU ベンチマーク
サーマル DDF 用の D3Q7 サブグリッド
サーマル DDF 用の Esoteric-Pull を使用したインプレース ストリーミング
DDF シフトを備えたサーマル DDF 用のオプションの FP16S または FP16C 圧縮
流体の体積モデル
効率的な曲率計算のための完全に解析的な PLIC
改良された質量保存
stream_collide()
カーネルに加えてわずか 4 つのカーネルによる超効率的な実装
固体境界上の流体からの力のオプションの計算
静止した中間グリッドのバウンスバック境界 (静止した実線の境界)
中間グリッドのバウンスバック境界の移動 (実線境界の移動)
平衡境界(非反射流入/流出)
温度境界(固定温度)
境界の種類
ボリュームごとのグローバルな力 (Guo 強制)、オンザフライで変更可能
体積あたりの局所的な力 (力場)
最先端の自由表面 LBM (FSLBM) 実装:
熱対流をシミュレートするための熱 LBM
非常に大きなレイノルズ数でのシミュレーションを安定に保つための Smagorinsky-Lilly サブグリッド乱流 LES モデル
Π αβ = Σ i e iα e iβ ( f i - f i eq-shifted )
Q = Σ αβ Π αβ 2
______________________
τ = 1/2 (τ 0 + √ τ 0 2 + (16√2) ∕ ( 3π 2 ) √Q ∕ ρ )
浸漬境界法によるパーティクル (パッシブまたは 2 方向結合、シングル GPU のみ)
FluidX3D は非常に大規模なシミュレーションを実行できるため、後でレンダリングするために体積データを保存すると管理できなくなります (単一フレームで 120 GB、ビデオで数百テラバイトなど)。
代わりに、FluidX3D を使用すると、生のシミュレーション データを VRAM に直接レンダリングできるため、大きな体積ファイルをハードディスクにエクスポートする必要がありません (私の技術的な講演を参照してください)。
レンダリングは非常に高速であるため、ラスタライゼーションとレイトレーシングの両方でリアルタイムでインタラクティブに動作します。
ラスタライズとレイトレーシングは OpenCL で行われ、RTX/DXR レイトレーシング コアやレンダリング ハードウェアがまったくないもの (A100、MI200 など) も含め、すべての GPU で動作します。
使用可能なモニターがない場合 (リモート 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 (Intel CPU Runtime for OpenCL のインストールが必要)
Intel Xeon Phi (Intel CPU Runtime for OpenCL のインストールが必要)
スマートフォン ARM GPU
ネイティブクロスベンダーマルチGPU実装
PCIe通信を使用するため、SLI/Crossfire/NVLink/InfinityFabricは必要ありません
単一ノードの並列化のため、MPI のインストールは不要
GPU は同じベンダーのものである必要はありませんが、同様のメモリ容量と帯域幅が推奨されます。
C++17 を搭載した Windows および Linux で動作しますが、macOS および Android も限定的にサポートされます
高速 GPU ボクセル化により、バイナリ.stl
ファイルからの三角形メッシュのインポートとボクセル化をサポートします
体積データをバイナリ.vtk
ファイルとしてエクスポートすることをサポートします
三角形メッシュをバイナリ.vtk
ファイルとしてエクスポートすることをサポートします
レンダリングされたイメージを.png
/ .qoi
/ .bmp
ファイルとしてエクスポートすることをサポートします。エンコードは CPU 上で並行して実行され、GPU 上のシミュレーションは遅延なく続行できます。
ここでは、さまざまなハードウェアのパフォーマンス ベンチマークを MLUP/秒、つまり 1 秒あたり何百万個の格子セルが更新されるかを示します。ベンチマークに使用される設定は、拡張機能が有効になっていない 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) FLOP/バイトになります。したがって、パフォーマンスはメモリ帯域幅によってのみ制限されます。左の 3 列の表は、データシートに記載されているハードウェア仕様 (理論上のピーク FP32 コンピューティング パフォーマンス、メモリ容量、理論上のピーク メモリ帯域幅) を示しています。右側の 3 列は、FP32/FP32、FP32/FP16S、FP32/FP16C 浮動小数点精度設定で測定された FluidX3D パフォーマンスを示します。丸括弧内の (ルーフライン モデル効率) は、理論上のピーク メモリ帯域幅の何%が使用されているかを示しています。 。
GPU/CPU がまだリストにない場合は、ここでベンチマークを報告できます。