古文書と言われるFORTRANは言うほど古文書ではない

最近,FORTRANをはじめました.きっかけは,GPUのメモリが足りなくてSIMDを使ったベクトル演算が必要になったからです.

FORTRANとは?

1954年にIBMのジョン・バッカスって人が考案した世界で最初の高級言語です.COBOLより古いってマ?

それぐらい初期のコンピュータで実行されていた古文書のようなプログラミング言語です.COBOLが古文書とか言っていたらFORTRANは碑石です.楔文字.

program hoge
  implicit none
  integer a
  read *, a
  print *, a
end program hoge

シンタックスハイライト効かないってマ?

GitHubとかの主要なリポジトリではFORTRANにギリギリ対応している感じです.それぐらい使われていないように思われている.

FORTRANは進化し続けている

COBOLも進化し続けている言語ですが,FORTRANも進化をし続けています.一応,コンパイル型言語ですが,C/C++より速いマシン語を吐きます.C++などの高級言語は仕様が複雑なので致し方ありません.

特に,FORTRANのコンパイラ開発に力を入れているのがIntelです.IntelではVisual Studio用のコンパイラを高値で販売しています.確か20万円ぐらい.コンピュータ1台買えるぐらいの値段だし,下手すればちょっとカスタムしたお弁当箱を買えます.

なぜそんなに高いコンパイラが売れるのでしょうか?

FOTRANは昔から科学技術計算に使われていました.ロケット打ち上げや弾道計算なんかで需要があり,コンピュータマンセーな時代に入る前からFORTRANしかない時代が続いていたのです.

現在でも科学技術計算の需要があり,東工大のスパコン「TSUBAME」でもFORTRANを動かせます.科学技術計算という地盤が強いわけです.

なので,まだ使っているところがある.まだ使っているなら,売る相手がいる,バージョンアップする意味がある.

ということで,現在でもFORTRANのバージョンアップは続けられています.

FORTRANのすごいところ

これは正直,Intel Parallel Studioが立派なだけなんですが,gfortranでも一応DOループでベクトル演算ができます.簡単なプログラムであればコンパイラが自動的にSIMDを使うようなマシン語を吐いてくれます.

どれぐらいすごいかと言うと,コンピュータの余り余った計算能力を最大限まで酷使するようなプログラムを出力できるということです.アホみたいにお金のかかる装置のためにメチャクチャ計算に時間のかかるプログラムを高速に実行できます.

また,FORTRANはあまり高度なプログラムは得意ではありません.構造体に関数ポインタを持たせるような機能を最新とか言っちゃってるあたり,クラスやりたかったけど別に必要ないのね感あります.オブジェクト指向は高度過ぎておじいちゃんついていけない…….

FORTRANの本領

FORTRANの本領は,その言語仕様の単純さです.マジかよ,ってぐらい単純明快でカプセル化とか抽象化とか難しいこと全くできません.逆に,そのような難しいことをするとプログラムが複雑化して読めないコードになります.

FORTRANは言語仕様が単純が故に,物凄く書きやすいです.脳内直結型プログラミング言語です.仕様を覚えれば作りたいものを簡単に作れます.問題があるとすれば可読性が著しく低いということだけです.

当たり前というか,この時代の名残でGOTO文を普通に使います.エラーハンドリングのためにGOTO文使わないと,プログラムが強制的に止まるか,止まらなくなるかの二択を迫られます.

私,思うんですけど,GOTO文害悪説はディスプレイの解像度が低いからたくさんのコードを一度に読めないのが原因だと思います.というのも,処理自体はサブルーチンと変わらないからです.関数も結局のところは戻り値を持ったサブルーチンです.GOTO文が害悪なのは定数値を使ってどっか飛ぶからだと思います.

あと,GOTO文のラベルを書く位置も悪いです.ちゃんとプログラム行を書くスペースを確保すれば,明らかにヤバそうな定数値が見えます.ディスプレイの解像度を上げれば可読性が高くなるのです.

そういうわけで,結構害悪な構文はありますが,Visual Studioを使って開発している段階では非常に快適にFORTRAN開発ができます.インテリセンスが効かないのは公害だと思いますが,モジュールやサブルーチン等々にはちゃんと効くし,implicit noneしておけばtypoしたときに指摘してくれます.

そういう意味で,私はFORTRANが好きになりました.脳筋で書けるのはサルの所業ですがFORTRANだったら許される.これはかなり汎用的な意味が込められていると思うので,みなさんもCOBOLではなくFORTRANをやりましょう.

FORTRANの使いみち

FORTRANは科学技術計算で使われるぐらいなので,Intel MKLが使えます.Intel MKLを使えば,行列やベクトルの計算を物凄く速く計算できます.CPUの演算能力なんてGPUと比べたらたかが知れていますが,ベクトルプロセッサに突っ込むことができれば高速に計算できます.

ベクトルプロセッサとして代表的なのは日本人にお馴染みの「TSUBAME」です.スパコンですよスパコン.大量の単純なCPUをガン積みしたマシンならGPUより高速に計算できます.GPUをガン積みしたスパコンには叶いませんが…….

もし,FORTRANがGPUの計算に対応したらって思うじゃないですか.NVIDIAやりよるんですよ.CUDA FORTRANが実行できれば,ぶっちゃけ科学技術計算に右に出るプログラミング言語なんてないぐらいです.それぐらい速い.速いだけが取り柄.可読性はドブに捨てろ!

と言いつつ,Unityで電磁場解析のシミュレータ作ってるんですけどね.さすがにGUIないと無理…….でも,CUDAをインストールしたマシンでFORTRANを実行できるのはすごく魅力的だと思う.CUIの部分はCUDAにぶん投げられるようなプログラムを書きたい人生だった…….

普段は研究していて生活が厳しいのでサポートしてくれる方がいるととても嬉しいです.生活的な余裕が出ると神が僕の脳に落書きを残してくれるようになります.