タグ別アーカイブ: fortran

フリーのFortranコンパイラ

手元にあるFortranコンパイラが新しいCPUに対応していなかったため、無料のFortranコンパイラ(フォートランという言語で書かれたプログラムを実行させるためのソフト)であるgFortran(gcc)を試してみました。

http://gcc.gnu.org/wiki/GFortranBinaries

フリーソフトなのですが、一昔前のコンパイラを使うよりも良いパフォーマンスを得ることが出来ました(最新版のIntelのコンパイラを買った方が高速化できるのでしょうが)。

【gFortranの使い方】

まず、上記ページからファイルをダウンロードし、インストールしてください。

対象とするプログラムソースを保存しているフォルダで、DOSプロンプトを開き、
gfortran -プログラムソース.f -O3 -march=core2
などと入力するとコンパイルでき、同じフォルダに実行ファイル(exeファイル)が作成されます。

以下のような、右クリックからコマンドプロンプトを簡単に表示できるソフトを併用すると作業が楽になります。
http://www.forest.impress.co.jp/article/2007/02/13/okiniiri.html

-march=~などのパラメータは、自分の環境にあったものを使用してください。
たとえばシミュレーションを行うパソコンが新しめのCPUを積載している場合、以下のようなオプションを指定できます。
Core2  → =core2
Phenom → =amdfam10
Athron → =athlon

その他のCPUを使っている方は、以下のページが参考になります。
http://gentoo-wiki.com/Safe_Cflags

Fortranプログラムの高速化

Fortranプログラムを高速化する手法は、べき乗(A=B**2)を使わずに(A=B*B)とする、配列を効率的に使うなど、数々の手法があるようです。が、プログラマではないので、詳しいことは良く分かりません。

そこで、ちょっと調べてみたところ、たとえば Compaq Visual Fortran では、自動でそのような処理をおこなってくれる機能があることが分かりましたので、まとめておきます。

  1. 普通にプログラムを作る(上記『べき乗』とかは気にしなくて良さそう)
  2. Buildする
  3. ProjectのSettingダイアログを表示
  4. Fortranタブを表示
  5. 『Category:General』で、『Optimization Level:』の値をMaximum Optimizationsに変更する。
  6. 『Category:Code Generationl』で、『Generate Code For:』の値を使用するパソコンに合わせる。ここに載っていないXeonなどの64bitCPUの場合は『Host』にする
  7. 『Category:Optimizations』で、『Processor to Optimize for:』の値を使用するパソコンに合わせる。ここに載っていないXeonやCore2DuoなどのCPUの場合は『Host』にすると良いみたい
  8. OKボタンを押して、Project Settingダイアログを消す
  9. あとは、普通に実行するだけ(!マークを押す)

なにもOptimizeしない場合と比べるとで4分の1くらいに計算時間が激減しました。

なお、上記手順でプログラムが最適化されるのは、コンパイル時のみです。ソースは元のままですので、プロジェクトとして保存しなかった場合は、上記手順を踏み直す必要があります。