スキップしてメイン コンテンツに移動

投稿

ラベル(Fortran)が付いた投稿を表示しています

スーパーコンピュータとプログラミング言語

世の中には星の数ほどのプログラミング言語があるかもしれないが、スーパーコンピュータで利用するとなるとかなり限られてくる。ライフサイエンス分野のデータの処理にはPython、Ruby、Perlなどのいわゆるスクリプト言語はよく使われるし、データベース関連だとJavaなどもあるだろう。しかし科学技術計算に限れば、FortranやC/C++が多数を占めると思う。やはり実行効率と既存資産の存在は大きい。 数値計算プログラムでは、とにかく速さが求められる。どれだけの速さがあれば十分かだって? この質問はナンセンスだと思う。たとえ現在の最高速度を誇るスーパーコンピュータの1億倍の速度があったとしても十分ではない。使える資源でできる範囲の計算をするだけなのだから。 自分の携わる分野では一回の計算に半年かかることもざらなので、計算速度は死活問題だ。1分で終わる処理なら倍に高速化したとしても差は30秒でしかない。しかし、半年となるとその差は3ヶ月にもなる。だから、Fortranを使うにしても、よりモダンなFortran90/95だけではなく、 古めかしいが実行速度の速いFORTRAN77 もよく使われる。まあ、最近は速度差も縮まってきているのでそこまでFORTRAN77にこだわらなくなってきているけど。本当にクリティカルな部分にはアセンブリ言語なども使われている。 また、汎用コンピュータのコンパイラに比べてスーパーコンピュータに最適化されたコンパイラではバグの入っていることが多く、C++でもBoostなどの外部ライブラリは避けた方が無難だ。使うにしても GoogleのC++コーディング規約 のように一部に限定して使う方が良い。実際にBoost絡みのコンパイラバグによる混乱を見るに、STLなどの標準ライブラリのみをシンプルに利用していた方がまだ安全だ(それでもバグるけど)。そうは言ってもBoostは便利なのでできるだけ早くC++0xの標準化がされてほしい。標準化されていればコンパイラベンダも言い訳できないしね。 そういえば Fortress なんて言語もあるね。面白い試みではあるけれど現状で利用するのは難しいような気がするなぁ。特に冒頭でも述べた、Fortranと同程度の実行効率が出せるかという点と既存資産の代替が存在するのかという点で。因みにFortressでの...

Fortranコンパイラの速度比較

10年以上も前の話だけど、Fortran90はFORTRAN77に比べて遅くてダメダメ、GNU Fortranは遅くてダメダメって云われていた。今でもFortranを使っている身としてはちょっと気になったので簡単なベンチマークテストを実施。Xeon 3.2GHz/メモリ2GB の環境で、 姫野ベンチ(サイズS) を使って測定した。因みにコンパイラのオプションはGNUコンパイラが -O3 、Intelコンパイラが -O3 -tpp7 -xW -Vaxlib とした。 以下、測定結果。 Fortran90 - ifort 9.0 MFLOPS: 1190.497 time(s): 59.9921000000000 Score based on Pentium III 600MHz : 14.37104 FORTRAN77 - ifort 9.0 MFLOPS: 1539.517 time(s): 64.18000 Score based on Pentium III 600MHz : 18.58422 Fortran90 - gfortran 4.0.2 MFLOPS: 603.2382 time(s): 60.6580000000000 Score based on Pentium III 600MHz : 7.281968 FORTRAN77 - g77 3.4.5 MFLOPS: 1426.6582 time(s): 57.7142258 Score based on Pentium III 600MHz : 17.2218533 コンパイラのバージョンがちょっと古いけど、やっぱりFortran90に比べFORTRAN77の方が速いな。GNUコンパイラについてはg77が思ったよりも悪くない。確かバージョン3で大幅に性能が改善されたんだっけな。うろ覚えだけど。