パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

MSが大学に寄付してC#が必修科目に」記事へのコメント

  • 6年くらい前に大学生だった頃、某N大学の一般教養課程の
    情報処理の講義で(必須かどうかは自信がありませんが)、
    Fortranを未だに使ってコード書かせていたのにビックリしました。

    実務と教育の世界のギャップは意外に大きいものかも。

    それに確か
    • Fortranを未だに使って
      FORTRANは(その構造の単純さなどなどゆえに強力な最適化がかけやすく)実際に科学技術計算に必須ですから場合によっては役に立つし、別にいいんじゃないでしょうか。

      それだけとか言われると非常に困りますが。

      親コメント
      • by argon (3541) on 2002年08月18日 2時33分 (#148079) 日記
        >FORTRANは(その構造の単純さなどなどゆえに強力な最適化がかけやすく)

        これなんですけど、サブルーチン化しないで書いているから alias の問題が発生しないこと以外に、
        Fortran だと最適化がかけやすい理由ってあるのでしょうか?
        F77のソースをベクトルプロセッサ向けにチューニングしたときは、コンパイラ指令やら
        変数展開やらで、ほとんど原型をとどめないぐらいになったのを憶えています。
        F77が読めてもあのソースが読めるかは疑問です。:-)
        その甲斐あって、一日がかりの計算が半日でできるようになりましたが。
        親コメント
        • by locate (5848) on 2002年08月18日 9時29分 (#148143) 日記
          > サブルーチン化しないで書いているから alias の問題が発生しない

          「サブルーチン化しないで書いている」という部分が
          よく分からないので、もう少し説明していただけますか?

          > F77のソースをベクトルプロセッサ向けにチューニングしたときは、
          > コンパイラ指令やら変数展開やらで、ほとんど原型をとどめないぐらいに
          > なったのを憶えています。

          今では、コンパイラが賢くなったので、自分で指定しなくても
          自動的にベクトル化、並列化してくれます。
          Fortranのプログラムの方が、言語構造が単純なので、
          コンパイラによる自動ベクトル化、自動並列化がうまく行きやすい、
          と言うことだと思います。
          親コメント
          • by argon (3541) on 2002年08月18日 12時57分 (#148186) 日記
            >「サブルーチン化しないで書いている」という部分が

            コンパイラがインライン展開できなかったので、処理系の組み込み以外の
            関数や副プログラム呼び出しが起きないように展開して書き直していました。

            >今では、コンパイラが賢くなったので、自分で指定しなくても
            >自動的にベクトル化、並列化してくれます。

            便利になったんですねえ。
            前述のようにやっていたのは10年ぐらい前の話です。

            >Fortranのプログラムの方が、言語構造が単純なので、

            私にはC90よりF77の方が複雑な言語に思えますが、自動ベクトル化、自動並列化が
            容易になるFortran言語構造の単純さというのは、どういう特徴を指すのでしょうか?
            例えば以下の項目は効きますか?他にあるでしょうか?

            1.静的大域変数の多用。
            2.関数、副プログラムの引数は参照渡し。
            3.再帰呼び出し不可。
            親コメント
            • 他の方もおっしゃっていますが、C のようなポインタがない点が非常に大きいです。

              コンパイラの最適化に使う解析手法は、プログラムの流れを追っていくコントロールフロー解析と、プログラムの流れに即しながらデータの中身がどう変わっていくかを追うデータフロー解析の2 種類に大別できます。

              ポインタはデータフロー解析の難易度をアップさせます。
              まず、ポインタが何を示しているかをデータフロー解析しておいてから、ポインタが指す可能性があるオブジェクトをデータフロー解析するというような多層の解析が必要になるからです。

              あと、配列が数学的な行列というよりも、メモリを便利に使える機構的に捕らえられている点も問題です。配列の境界チェックがなくA[1][-1][2] のような記述も許されています。あと 書き手の傾向の問題ですが、多次元配列でも 2次元配列で実装しようとするため、解析困難になっています。

              1.静的大域変数の多用。

                  これは大きいです。
                  C 言語のように大きな配列を malloc で確保してしまうと、
                    どのくらいの大きさの配列がどこにあるのかすら分らなくなる可能性があります。

              2.関数、副プログラムの引数は参照渡し。

                  これは、むしろデメリットですね。すべて値渡しの方が好都合。

              3.再帰呼び出し不可。

                  これはコントロールフロー解析を楽にしてくれます。
                  ソースコードを 1 回 上から下に解析するだけで、関数の呼び出しグラフができてしまいますから。
              --
              コンタミは発見の母
              親コメント
              • by argon (3541) on 2002年08月18日 23時22分 (#148479) 日記
                >C のようなポインタがない点が非常に大きいです。

                >ポインタはデータフロー解析の難易度をアップさせます。

                なるほど。
                C のようななんでもありのポインタがない Fortran だとデータフロー管理のコストを
                小さくできるので、解析後の最適化処理がかけやすいということでしょうか。
                親コメント
            • by Anonymous Coward

              1.静的大域変数の多用。

              大域変数を多用すると、FortranでもCでも関数への引数を減らすことができます(そのかわり複数オブジェクトを扱いにくくなるが)。関数呼び出しが高速化できるので、第一引数がインスタンスポインタ(selfやthis)であるような一般的なオブジェクト指向言語に比べると格段に速くなります。

              2.関数、副プログラムの引数は参照渡し。
              3.再帰呼び出し不可。

              これも他言語に比べたアドバンテージというわけでは無さそうです。参照渡しで最

          • 今では、コンパイラが賢くなったので、自分で指定しなくても 自動的にベクトル化、並列化してくれます。 Fortranのプログラムの方が、言語構造が単純なので、 コンパイラによる自動ベクトル化、自動並列化がうまく行きやすい、 と言うことだと思います。


            コンパイラによる自動並列化ですが、これだけで満足する結果が得られる場合は少ないです。ほとんどの場合、これに加えて手作業でチューニングをする場合が多いです。
            親コメント
        • by dama4slash (785) on 2002年08月18日 12時19分 (#148180)
          >F77のソースをベクトルプロセッサ向けにチューニングしたときは、コンパイラ指令やら
          >変数展開やらで、ほとんど原型をとどめないぐらいになったのを憶えています。
          今大学でのメインは、F95とかHPFでしょうか。
          コンパイラ部隊の人は、並列化などに気を配って開発していて、
          その実行環境側としても各ノードの資源を有効に使えるように
          色々と仕掛けを考えます。

          自動並列ということで、コンパイルオプション(parallel)とかで
          できるんだった記憶があります。
          # 自動並列は、CやC++でも出来た気がします。

          言語からもHPCがらみの仕事からも離れて結構経つので、
          現状はどんなでしょう。
          # F2000とかはどうなっているのでしょう。
          親コメント

最初のバージョンは常に打ち捨てられる。

処理中...