OpenFOAM で CNC (GPU 用 CG ソルバー) を使う2010年12月28日 | ||||||||||||||||||||||||||||||||||||||||||||
はじめにInria が提供している Concurrent Number Cruncher という GPU 用 CG ソルバーが使えるライブラリがある。これを OpenFOAM で使ってみる。 グラフィックカードは NVIDIA GeForce GTX 470。 使用バージョンopenSUSE 11.3 x86_64, OpenFOAM 1.7.1, CUDA Toolkit 3.2, CNC 0.9。 ファイルCNC 含む。CNC は ここ から入手した。 セットアップCUDA Toolkit と GPU Computing SDK はインストールしているものとする。
実行icoFoam でテスト。 $ cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity . $ cd cavity $ blockMesh system/controlDict に以下を追加。
libs
(
"libcudart.so"
"libcublas.so"
"libcnccuda.so"
"libcnc.so"
);
system/fvSolution を以下のように編集。
solvers
(
p
{
//solver PCG;
//preconditioner DIC;
solver PCG_CNC;
preconditioner none;
tolerance 1e-06;
relTol 0;
}
...
実行。 $ icoFoam 検証SpeedIT Classic 検証結果 に今回の計算結果を追加してみよう。計算は倍精度、モデルは大きいモデル (160,000 セル, 以前の検証では Case 2) とする。本ソルバー (PCG_CNC) は OpenFOAM 側では "preconditioner none" としているが、CNC 側で Jacobi 前処理が行われる。 マシンスペック
並列なし
4 パラレル
やはり GAMG にはかなわない。 | ||||||||||||||||||||||||||||||||||||||||||||
| PENGUINITIS | ||||||||||||||||||||||||||||||||||||||||||||