以前に東大のHA8000を使ってOpenFOAMを回している話を書きましたが,そのときの素朴な感想として,東大のスーパーコンピュータだからもっと圧倒的に速くてもいいんじゃないのかな,と思っていました.
本当にこれが実力なのか? 設定が悪いせいで,HA8000の実力を引き出せていないないのではないか?
OpenFOAMは並列化にMPIを使っているので,共有メモリ型のマシン向きとは言えません.また,コンパイルに用いたIntel Compilerの最適化方法もよく分かっていませんでした.
そこで,まずはIntel CompilerとGccとでどのぐらいの性能差があるのか試してみようと思い,Intel CompilerとIntel MPIを使ったOpenFOAM-1.7.0のバイナリを作り,うちの研究室にあるCore i7マシンを使って計算してみました.
最適化オプションには”-m64 -ipo -O3 -no-prec-div -xSSE4.2”を指定しました.マニュアルとネット情報を頼りに,まともなものを指定したつもりです.
比較対象は,バイナリ配布のOpenFOAM-1.6(OpenMPI使用)と,Gcc-4.3でコンパイルしたOpenFOAM-1.7.0(Intel MPI使用)です.
その結果が左上のグラフです.
たいして差がないじゃないか!? これは意外でした.
今回はひとつのマシン(4コア)で並列計算したので,OpenMPIとIntel MPIで差がほとんどないのは理解できます.(それでも速くなってくれることを期待していましたが.)
しかしIntel Compilerでコンパイルしたバイナリは速いだろうと想像していました.1~3割速くなるというネット情報もありました.Gcc-4.5以降は最適化がかなり改善されたという情報もあったのですが,今回使ったGcc-4.3との比較では,Intel Compilerが水をあけてくれることを期待していました.
しかし実際にやってみると,わずかな差ではありますが,Gcc-4.3でコンパイルしたものが最も速い.
うーんなぜだろう.Gccが優秀だということでしょうか.それとも差が出にくいコードだということでしょうか.
こうなるとGcc-4.5でコンパイルしたものを試したいのですが,今のところできていません.
最適化オプションをいろいろ試す余裕はないのですが,たとえばIPO(手続きをまたがった最適化)のオプションをつけると,コンパイル時間が長くなる割りには計算時間にほとんど差がなかった.ですからこれ以上がんばっても得られるものは少ないように感じています.
いまやっている計算方法が,最適ではないにしても,最適に近い方法だということでしょうか? それならそれでいいのですが,何となく釈然としない.もっといい方法はないのかなぁ.
0 件のコメント:
コメントを投稿