並列計算も専門にしています、kehorieと申します。
> OpenFOAMの並列化の効率を,73万セル程度のモデルでどの程度出るか
> 試しています。simpleFoamで計算をしています。
>
> 1CUPでの計算時間を100%とした場合,2CUPで60%,4CPUで50%
> 8CPUで50%と頭打ちになっています。
>
> この程度のモデル規模ですと,4CPUを超えるCUPを使っても効率の改善は
> されないと言うことでしょうか?
私の経験上は、73万セル程度では、2~4並列が上限です。
もちろん選択している解法+実装の上手さにもよりますが、
小規模なモデルでは、並列効率は上がりにくいです。
たとえばですが
・解法を変更してみる
・モデル規模を大きくしてみる
などを試してみると、詳しく結論付けられると思います。
失礼いたします。
kehorie
>
> また,並列化の効率を上げる上手い方法は何かありますでしょうか。
>
> 詳しいか方がおられましたらよろしくご教授をお願いお願いいたします。
>
> --
> このメールは Google グループのグループ「OpenFOAM」の登録者に送られています。
> このグループに投稿するには、open...@googlegroups.com にメールを送信してください。
> このグループから退会するには、openfoam+u...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/openfoam?hl=ja からこのグループにアクセスしてください。
>
>
> アドバイスを頂きありがとうごさいます。並列計算をご専門とされておられると言うことで
> もう少し教えて頂きたいのすが,CUPを8,16,24,32と上げていく場合,並列化の効率を
> 考えた場合,1CPU当たりのセル数はどの程度が妥当でしょうか。
私の経験ですが、シンプルな流体計算では、1コアあたりで30万セル~60万セルくらい
が目安です。とくに根拠があるわけではなく、経験則です。
> また,CPUを増やしても並列化の効率化が出ない主な理由は何でしょうか?
理由は2個
1.コアを増やすと、通信のコストが大きくなる。
2.コアを増やすと、同期のコストが大きくなる。
です。通信コストと同期コストは、意外と大きいものです。
1.に関しては、使うMPIライブラリを高速なものに置き換えることが考えられます。
2.に関しては、たとえば領域分割を賢く行う、などが考えられます。
2.に関しては、なかなか難しいので、1.は試せるかと思います。高速なもの
といえば。。。
・intel-mpi
・ms-mpi
・hp-mpi
などですね。
kehorie
Horie 様
> 私の経験上は、73万セル程度では、2~4並列が上限です。
並列計算技術は専門外なので教えて頂きたいのですが、
もし差支えなければ、この計算例の実行環境をお教え頂けますか?
鵜沢
こんばんは。
> 並列計算技術は専門外なので教えて頂きたいのですが、
> もし差支えなければ、この計算例の実行環境をお教え頂けますか?
OS: ubuntu 10.04
CPU: Corei7 860 2.80GHz、HT機能:オフ
RAM: DDR3 8GB
MPIには、mpich2を使っています。計測はクラスターモードで
はなく、ローカルモードでの経験です。クラスターモードの場合
HPMPIやINTELMPIが圧倒的に高速です。
Corei7はメモリの帯域が広いので、それ自体でかなり計算は
速いです。ローカルモードでの並列時も、メモリ帯域はかなり
重要です。MPIは、突き詰めるとプロセス間でメモリコピーをし
ているからです。
kehorie
2010/11/6 Ken UZAWA <uzaw...@gmail.com>:
鵜沢です。
早々のご返信ありがとうございます。
> OS: ubuntu 10.04
> CPU: Corei7 860 2.80GHz、HT機能:オフ
> RAM: DDR3 8GB
お教えいただきありがとうございました。
ローカルでの計算結果、参考になりました。
ちなみに、大型計算機(PRIMERGY BX900)で二相流計算を
したところ、50万セルで64コア、400万セルですと128コア
までスピードアップしましたので、実行環境によってかなり
違いがあるようですね。(同様の計算機環境で行った同僚の
論文(単相流)を参考までに添付させて頂きます。)
CPU は Intel Xeon X5570 (2.93GHz×2CPU)で、ノード内・
ノード間並列に関しては双方とも純正の富士通コンパイラを
用いており、OpenMPI との併用はしていません。
また、特にコンパイラオプションやBX 向けのチューニング
なども行っておりません。
ところで、富士通MPIの性能や特性については何かご存じ
でしょうか?
それでは失礼致します。
鵜沢
> ちなみに、大型計算機(PRIMERGY BX900)で二相流計算を
> したところ、50万セルで64コア、400万セルですと128コア
> までスピードアップしましたので、実行環境によってかなり
> 違いがあるようですね。(同様の計算機環境で行った同僚の
> 論文(単相流)を参考までに添付させて頂きます。)
ありがとうございます。
ノード間通信で、かつ高速な通信ハードと高性能なMPIを使え
ば十分ありうる結果かと思います。
1筐体内で並列数を増やすと「メモリ帯域を使い切ってしまう」
という状態になり、速度が上がらない状態になります。この状
態になると、コアのクロック数などは関係なく速度が伸びませ
ん。流体計算+並列計算では、コアのクロック数以上にメモリ
帯域が重要になります。
PRIMERGY シリーズは、ノード間の通信が非常に速いのが特
徴です。富士通コンパイラ+MPIは、かなり性能が性能が良い
のと、ハードまで限定できているのが強いのでしょうか、IntelM
PIやHPMPIを超える性能を出すことも多いです。うまく計算ノー
ドとコアの調整ができると「メモリ帯域を使い切ってしまう」前に
ノード間通信に切り替わり、速度が上がらない状態を回避でき
ます。
と、いう大型計算機ならではの事情があり、面白いところです。
個人で買える?クラスのマシンでも Nehalem-EX 4基を1筐体
に乗せられるので、こういうのであれば「メモリ帯域を使い切っ
てしまう」状態を回避できるため、かなりスケールするかもしれ
ません。
kehorie
> CPU は Intel Xeon X5570 (2.93GHz×2CPU)で、ノード内・
> ノード間並列に関しては双方とも純正の富士通コンパイラを
> 用いており、OpenMPI との併用はしていません。
> また、特にコンパイラオプションやBX 向けのチューニング
> なども行っておりません。
>
> ところで、富士通MPIの性能や特性については何かご存じ
> でしょうか?
>
> それでは失礼致します。
>
> 鵜沢
>
鵜沢です。
> PRIMERGY シリーズは、ノード間の通信が非常に速いのが特
> 徴です。富士通コンパイラ+MPIは、かなり性能が性能が良い
> のと、ハードまで限定できているのが強いのでしょうか、IntelM
> PIやHPMPIを超える性能を出すことも多いです。うまく計算ノー
> ドとコアの調整ができると「メモリ帯域を使い切ってしまう」前に
> ノード間通信に切り替わり、速度が上がらない状態を回避でき
> ます。
ご知見を下さりありがとうございます。おっしゃる通り、富士通 MPI は
かなり性能が良いという実感があり、16 並列や 32 並列など並列数が
少ない場合にはハイパースケーラビリティが出るほど速いです。
富士通製マシンですので、MPI の InfiniBand を使った通信部分は
速いようですね。一方で、同一 CPU 内のコア同士のほうがノード間の
コア同士の通信よりも若干遅いという結果が出るなど、性能を完全に
把握するには少々時間がかかりそうです。
また何かわかりましたらご報告させて頂きます。
鵜沢
> ご知見を下さりありがとうございます。おっしゃる通り、富士通 MPI は
> かなり性能が良いという実感があり、16 並列や 32 並列など並列数が
> 少ない場合にはハイパースケーラビリティが出るほど速いです。
ハイパースケーラビリティが出るのは、流石ですね。おそらくですが、
並列数が増えると、1コアが扱えるデータ量が減るので、キャッシュミ
スが減り、高速化したのだと思います。ほかには。。。もし、何か思い
ついたら、連絡いたします。
> 富士通製マシンですので、MPI の InfiniBand を使った通信部分は
> 速いようですね。一方で、同一 CPU 内のコア同士のほうがノード間の
> コア同士の通信よりも若干遅いという結果が出るなど、性能を完全に
> 把握するには少々時間がかかりそうです。
ありがとうございます。こういう部分は、本当にMPIの実装依存かと
思います。富士通MPIに関しては、情報が少ないので、頂けると非
常に嬉しいです。フリーのmpich2がもう少し頑張ってくれると嬉しい
のですが。。。
失礼いたします。
kehorie