アカウント名:
パスワード:
Fortranを未だに使って
それだけとか言われると非常に困りますが。
1.静的大域変数の多用。
大域変数を多用すると、FortranでもCでも関数への引数を減らすことができます(そのかわり複数オブジェクトを扱いにくくなるが)。関数呼び出しが高速化できるので、第一引数がインスタンスポインタ(selfやthis)であるような一般的なオブジェクト指向言語に比べると格段に速くなります。
2.関数、副プログラムの引数は参照渡し。 3.再帰呼び出し不可。
これも他言語に比べたアドバンテージというわけでは無さそうです。参照渡しで最
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常
それを言ったら (スコア:2, 参考になる)
情報処理の講義で(必須かどうかは自信がありませんが)、
Fortranを未だに使ってコード書かせていたのにビックリしました。
実務と教育の世界のギャップは意外に大きいものかも。
それに確か
Re:それを言ったら (スコア:1)
それだけとか言われると非常に困りますが。
Re:それを言ったら (スコア:1)
これなんですけど、サブルーチン化しないで書いているから alias の問題が発生しないこと以外に、
Fortran だと最適化がかけやすい理由ってあるのでしょうか?
F77のソースをベクトルプロセッサ向けにチューニングしたと
Re:それを言ったら (スコア:1)
「サブルーチン化しないで書いている」という部分が
よく分からないので、もう少し説明していただけますか?
> F77のソースをベクトルプロセッサ向けにチューニングしたときは、
> コンパイラ指令やら変数展開やらで、ほとんど原型をとどめないぐらいに
> なったのを憶えています
Re:それを言ったら (スコア:1)
コンパイラがインライン展開できなかったので、処理系の組み込み以外の
関数や副プログラム呼び出しが起きないように展開して書き直していました。
>今では、コンパイラが賢くなったので、自分で指定しなくても
>自動的にベクトル化、並列化してくれます。
便利になったんですねえ。
前述のようにやっていたのは10年ぐらい前の話です。
>Fortranのプログラムの方が、言語構造が単純なので、
私にはC90よりF77の方が複雑な言語に思えますが、自動ベクトル化、自動並列化が
容易になるFortran言語構造の単純さというのは、どういう特徴を指すのでしょうか?
例えば以下の項目は効きますか?他にあるでしょうか?
1.静的大域変数の多用。
2.関数、副プログラムの引数は参照渡し。
3.再帰呼び出し不可。
Re:それを言ったら (スコア:2, 参考になる)
コンパイラの最適化に使う解析手法は、プログラムの流れを追っていくコントロールフロー解析と、プログラムの流れに即しながらデータの中身がどう変わっていくかを追うデータフロー解析の2 種類に大別できます。
ポインタはデータフロー解析の難易度をアップさせます。
まず、ポインタが何を示しているかをデータフロー解析しておいてから、ポインタが指す可能性があるオブジェクトをデータフロー解析するというような多層の解析が必要になるからです。
あと、配列が数学的な行列というよりも、メモリを便利に使える機構的に捕らえられている点も問題です。配列の境界チェックがなくA[1][-1][2] のような記述も許されています。あと 書き手の傾向の問題ですが、多次元配列でも 2次元配列で実装しようとするため、解析困難になっています。
1.静的大域変数の多用。
これは大きいです。
C 言語のように大きな配列を malloc で確保してしまうと、
どのくらいの大きさの配列がどこにあるのかすら分らなくなる可能性があります。
2.関数、副プログラムの引数は参照渡し。
これは、むしろデメリットですね。すべて値渡しの方が好都合。
3.再帰呼び出し不可。
これはコントロールフロー解析を楽にしてくれます。
ソースコードを 1 回 上から下に解析するだけで、関数の呼び出しグラフができてしまいますから。
コンタミは発見の母
Re:それを言ったら (スコア:2, 参考になる)
>ポインタはデータフロー解析の難易度をアップさせます。
なるほど。
C のようななんでもありのポインタがない Fortran だとデータフロー管理のコストを
小さくできるので、解析後の最適化処理がかけやすいということでしょうか。
Re:それを言ったら (スコア:0)
大域変数を多用すると、FortranでもCでも関数への引数を減らすことができます(そのかわり複数オブジェクトを扱いにくくなるが)。関数呼び出しが高速化できるので、第一引数がインスタンスポインタ(selfやthis)であるような一般的なオブジェクト指向言語に比べると格段に速くなります。
これも他言語に比べたアドバンテージというわけでは無さそうです。参照渡しで最