非商用ならフリーの Fortran90 を使ってみた(VAST/f90)

今どき fortran ? などと言うなかれ。 分子シミュレーションなどの数値計算では速度が勝負。 大型計算機の多くでは今でも fortran が現役です。 なんで fortran を使うか? というのは、MLや net news でよく目に しますが、わしはその詳細を語る言葉がない(笑)。 実際に使っていて思うことは、
・大型計算機ではライブラリやコンパイラが良くチューンアップされている。
・確かに今まで(書いていた|書かれてきた)資産が豊富
ということです。
うーん、今まで何度も C や C++ で書き直してみたが、書き方がへぼいのか 目に見えて処理が高速になったためしがないんですわ。 C++ にあって fortran にないものといえば、ポインタや構造体や クラスですが、それらを使ってきれいに書こうとすると実行速度が意外に あがらない。逆に LOOP の最適化(今使っている SR2201 だと疑似ベクトル化など)が fortran だと馬鹿ちょんで出来てしまうんです。 わしらは Monte Carlo 法で計算しているのですが、そこで使う 乱数生成のライブラリ関数が fortran で使いやすいようになっている。 それから、たとえば C から fortran の関数を呼ぶと、疑似ベクトル化が うまくいかない。うーむ。。

で、fortran を使うわけですが、大型計算機では Fortran90 でプログラムを 書いています。f90 は何が良いかというと、処理系に依存する話も含まれます が、たとえば変数を表すの文字の数の制限がなくなる、ですとか、DO LOOP で
       do i=1,n
          A(i)=B(i)+2*C(i)
10     continue
と f77 なら書くところを
       do i=1,n
          A(i)=B(i)+2*C(i)
       end do	  
continue 文を減らせるし、しまいには
       A=B+2*C
と、配列の演算がコンパクトに書けます。 配列を扱う関数も増えていたりします。 それから、ビット操作の演算が出来ます (頭がすっかりCな方はなんでも今更な話かもしれませんが)。

で、f90 のソースが増えて来ると、デスクトップ用の Linux Box にも なんとなく Fortran90 が欲しくなってきます。 そこで VAST/f90 というのがあると聞いて使ってみました。

Pacific-Sierra Research

ここから、vf90_per.tar をいただいて来ました。 非商用ならバイナリーフリーで使えます。tar xf すると、f90 ,vf90 という 実行ファイルがありますので、これを単純に /usr/local/bin にコピーして libvast90.a というライブラリがあるので、これを /usr/local/lib に コピーして、
# ldconfig
します。すると、あらあら不思議、
% f90 hoge.f
で、Fortran90 のソースをコンパイルすることが出来ます。 実行速度は g77 と変わりません。これは、この f90 は Fortran90 の ソースを vf90 で fortran77 のソースに書き換えて、g77 で コンパイルしているだけのようだからです。実際、vf90 というコマンドは ソースの書き換えだけを行います。これは f77 しか動かない環境に f90 で書いたソースを使うのにとても便利です。

% vf90 hoge.f
を実行すると、Vhoge.f というファイルを吐きます。これは f77 でコンパイル出来るソースです。

パッケージに入っている 90to77.ps に、詳しい説明があります。

使用した感想の詳細は今度書きます。