計算時間の短縮について

1,319 views
Skip to first unread message

nokw

unread,
Jun 28, 2013, 9:58:15 AM6/28/13
to open...@googlegroups.com
こんにちは。
現在、約400~1000万セルの計算をpimpleDyMFoamにておこなっていますが、計算時間がかかりすぎて困っています。
このままだと数ヶ月かかってしまいそうです。
また、クラスタで計算をおこなっているのですが4並列で並列化効率が頭打ちになってしまっていそうです。
漠然とした質問なのですが、計算時間を短縮するいい方法はなにかありませんか?
また、deltTは10^-5ですがこれ以上大きくはできなさそうです。
よろしくお願いいたします。

すもも

unread,
Jun 28, 2013, 11:13:48 AM6/28/13
to open...@googlegroups.com
ほぼノーヒントなのでアレですが、
領域分割を変えてみるのはいかがでしょう?

nokw

unread,
Jun 28, 2013, 1:39:36 PM6/28/13
to open...@googlegroups.com
すももさん

ありがとうございます。
あまり詳しいことを公言できないということもあり、わかりづらく申し訳ありません。
領域分割のコツなどはあるのでしょうか?

2013年6月29日土曜日 0時13分48秒 UTC+9 すもも:
ほぼノーヒントなのでアレですが、
領域分割を変えてみるのはいかがでしょう?
Message has been deleted

nokw

unread,
Jun 28, 2013, 10:10:47 PM6/28/13
to open...@googlegroups.com
何を示せば良いのかよくわかっていないのであまりにも情報が少なくなってしまったので、補足させていただきます。
バージョン:OpenFOAM2.1.1
OS:Ubuntu11.04
クラスタマシンで8CPU
領域分割はscotchで行っています。
fvSolutionとfvSchemesを以下に示します。
他に必要な情報があれば教えていただけると幸いです。
ぜひアドバイスをいただけたらと思います。よろしくお願いいたします。


/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.1.1                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

solvers
{
    pcorr
    {
        solver           GAMG;
        tolerance        0.02;
        relTol           0;
        smoother         GaussSeidel;
        nPreSweeps       0;
        nPostSweeps      2;
        cacheAgglomeration on;
        agglomerator     faceAreaPair;
        nCellsInCoarsestLevel 10;
        mergeLevels      1;
    }

    p
    {
        $pcorr;
        tolerance       1e-5;
        relTol          0.01;
    }

    pFinal
    {
        $p;
        tolerance       1e-6;
        relTol          0;
    }


    "(U|k|epsion)"
    {
        solver          smoothSolver;
        smoother        GaussSeidel;
        tolerance       1e-6;
        relTol          0.1;
    }

    "(U|k|epsilon)Final"
    {
        solver          PBiCG;
        preconditioner  DILU;
        tolerance       1e-6;
        relTol          0;
    }

    cellDisplacement
    {
        solver          GAMG;
        tolerance       1e-5;
        relTol          0;
        smoother        GaussSeidel;
        cacheAgglomeration true;
        nCellsInCoarsestLevel 10;
        agglomerator    faceAreaPair;
        mergeLevels     1;
    }

}

PIMPLE
{
    correctPhi          yes;//no;
    nOuterCorrectors    2; 
    nCorrectors         3;
    nNonOrthogonalCorrectors 1;
}

relaxationFactors 
{
   fields
    {
        p               0.5;
    }
    equations
    {
        "(U|k|epsion)"   0.7;
       "(U|k|epsion)Final" 0.7;
    }
}

cache
{
    grad(U);
}

// ************************************************************************* //


/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.1.1                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

ddtSchemes
{
    default         Euler;
}

gradSchemes
{
    default         Gauss linear;
    grad(p)         Gauss linear;
    grad(U)         cellLimited Gauss linear 1;
}

divSchemes
{
    default         none;
    div(phi,U)      Gauss linearUpwind grad(U);
    div(phi,k)      Gauss upwind;
    div(phi,epsilon) Gauss upwind;
    div((nuEff*dev(T(grad(U))))) Gauss linear;
}

laplacianSchemes
{
    default         Gauss linear uncorrected;
}

interpolationSchemes
{
    default         linear;
}

snGradSchemes
{
    default         uncorrected;
}

fluxRequired
{
    default         no;
    pcorr           ;
    p               ;
}


// ************************************************************************* //

S.kita

unread,
Jun 30, 2013, 12:03:18 AM6/30/13
to open...@googlegroups.com
s.kitaといいます。
先日は間違って、メールの方にお送りしてすいませんでした。

WindowsOS上の仮想環境でのUbuntuではなく、純粋なLinuxOS上での
Ubuntuという理解でいいのでしょうか?

4並列で頭打ちということでしたが、マシンは1個のワークステーションに
マルチコアCPUが積んであって、計8コアですか。それともSingleコアCPUないし
DualコアCPUのワークステーションをGigabitEtherでつないだ複数ホストの
環境でしょうか?
これぐらいの並列数での非定常計算としてはメッシュサイズが大きいと個人的には
感じたので、前者の計算環境だとコア増加による演算性能upよりもメモリバンド幅で
結局律速してしまう可能性があるかも・・・と思いました。

例えば規模を50万~100万セルぐらいに落とし、テスト計算して並列性能を
みるというのはどうでしょう?
どうしてもこの解析規模でやらないと意味がないけど、時間は短縮したいということなら
OpenFOAMがサポートされている外部の計算環境(クラウドやFOCUS)を
検討してみるのもいいかもしれません。


2013年6月29日土曜日 11時10分47秒 UTC+9 nokw:

nokw

unread,
Jun 30, 2013, 10:28:35 PM6/30/13
to open...@googlegroups.com
s.kita様

ありがとうございます。
純粋なLinuxOSのUbuntuです。
クラスタマシンは1個に8個のCPUが積んであるのだと思います。
また、CPUはIntel(R) Xeon(R) CPU X5460  @ 3.16GHz という感じです。
コンピュータに詳しくないのであまりわからないですが...
テストケースを行うというのは、並列性能がでない理由はメモリの問題ということを確認できるということですか?

また、外部の計算環境を検討はあまり考えていません...


2013年6月30日日曜日 13時03分18秒 UTC+9 S.kita:

S.kita

unread,
Jul 1, 2013, 7:30:31 AM7/1/13
to open...@googlegroups.com
s.kitaです。
 
X5460が2CPU積んである単一ホストマシンということですね。
 
高速化のために並列数並べてもサチってしまう原因を
究明するならば、まずは問題の切り分けが必要と思い、
比較的大きなメッシュだから並列数増しても、メモリで
律速するから中規模メッシュならば並列4⇒8で高速化するのか否か、
その見極めから始めるのがいいかと思い、このように提案した次第です。
私もハードの専門家でないので、これが良策かどうかはわかりませんが。
 
中規模メッシュで高速化したなら、大規模ではメモリバンド幅の
問題があるので、それを回避するためにワークステーションを複数台並べて
それらをEthernetでつなげば、メモリバンド幅の問題は多少改善
するかなと考えています。
 
設定条件等にそもそも工夫が必要という可能性も
ありますが、あとは他の方々のご意見を参考にしていただくか、
CFD-Online上の本家OpenFOAM掲示板に投稿してみるなど
試してみてください。
 

2013年7月1日月曜日 11時28分35秒 UTC+9 nokw:

ohbuchi

unread,
Jul 1, 2013, 10:51:27 PM7/1/13
to open...@googlegroups.com
横から失礼します。X5460はQuad Core CPUなので、恐らくノードは2CPUで計8コアと
なっているのでしょう。何ノードあるクラスタか解りませんが、ノード内並列でのパラレル計算に
なっているのではありませんか?
OpenFOAMはMPIを前提にした並列化なので、マルチコアでの並列性能はあまり良くありません。
私の経験でも4コア程度で頭打ちになる結果でした。
ただ、多数ノードを確保して並列化すれば、1000並列程度までのスケーラビリティがあると
CFD-Onlineで報告されていました。ただし、ネットワーク速度が十分早い事が前提ですが。

まずは、サーバ管理者に相談してノード間並列の実行方法を教えてもらうことをお薦めします。
以上、ご参考まで。

2013年7月1日月曜日 11時28分35秒 UTC+9 nokw:

nokw

unread,
Jul 2, 2013, 2:22:13 AM7/2/13
to open...@googlegroups.com
s.kita様
ohbuchi様

ありがとうございます。
ノードやコアといったことを全然理解できていませんでした。まだ怪しいですが...
今使用しているクラスタは1ノード8コアなようです。
ノード間並列はsshのパスワードなしの設定をすれば良いと理解していまして、それはおこなったのですが、machinesファイルやdecomposeParファイルの設定の仕方がよくわかりません。
ご教示いただけますでしょうか。
よろしくお願いいたします。


2013年7月2日火曜日 11時51分27秒 UTC+9 ohbuchi:

ohbuchi

unread,
Jul 2, 2013, 6:45:54 AM7/2/13
to open...@googlegroups.com
並列計算の実行方法については、ご使用のクラスタの構成により具体的な
使用方法が異なるので、システム構成がはっきり解らない以上、適切な答え
をすることは出来ないと思います。システム管理者に相談して下さい。
システム構成とは、
 クラスタで利用可能なノードの制限の有無、
 バッチキュー管理システムの有無、
 ファイルシステムの構成、
 OpenFOAMのインストール状況とユーザ作業エリアの詳細
などです。
マシンファイルの設定や分散ディスク環境でのdecomposeParの指定方法など
一般的な情報は、ユーザガイドを御覧ください。


2013年7月2日火曜日 15時22分13秒 UTC+9 nokw:
Reply all
Reply to author
Forward
0 new messages