Path: coconuts.jaist!wnoc-tyo-news!news.nc.u-tokyo.ac.jp!makino From: makino@grape.c.u-tokyo.ac.jp (Jun Makino) Newsgroups: fj.comp.lang.fortran Subject: Re: 構造体は使うべきでないと思 Date: 11 May 1998 15:56:45 GMT Organization: College of Arts and Sciences, Univ. of Tokyo Lines: 86 Message-ID: <6j773t$qi3@news.nc.u-tokyo.ac.jp> References: NNTP-Posting-Host: provence.c.u-tokyo.ac.jp X-Newsreader: mnews [version 1.19PL2] 1996-01/26(Fri) Xref: coconuts.jaist fj.comp.lang.fortran:22 の記事において onizuka@mpapia.trc.rwcp.or.jpさんは書きました。 >> >そのようなデータを扱いたいときには、やはり構造体/クラスを使うという発 >> >想が出てくるようです。実際、一つの星をそういう構造体/クラスとして扱う >> >ようなプログラムを書いた天体物理学者はいます。(そのプログラムはC++で >> >書かれています。) >> >> でしょうね。良くわかっている人なんでしょう。 そうかなあ、、、書いた人と中身を見てから判断したほうがいいかもしれませ ん。 >> 物理量でデータを抽象化するのが、物理屋。 >> モノとその属性値という形で抽象化するのが、C++屋。 これは、やはり、物理かどうかではなくて、 Fortran かどうかと、それから 汎用ライブラリのようなものを作るか、具体的な対象系があるプログラムを作 るかという違いではないですか? 例えば線形計算のライブラリとか、常微分方程式のパッケージとかを作るなら、 「行列」とか「連立方程式」という抽象化になりますよね?そうすると、少な くともアプリケーションインターフェースのレベルでは配列以外は考えにくい ような気もします。 >> いやあ、並列計算の分野でFORTRAN で考える人って、複数の質点系のプログラ >> ム書くときに、速度については、Vx,Vy,Vz それぞれで配列切るでしょ。とこ >> ろが、C++ 屋だったら、三次元ベクトルに関する vector 型を定義して、そっ >> ちの配列を作りますよね。で、もちろん、三次元ベクトルに関する足し算、か >> け算、外積、内積くらいのメソッドやらオペレータを定義する。 X, Y, Z で別に配列を切るのは、単に Cray とかCDCのベクトル化コンパイラ が無能だったことの名残だと思います。かなり遅い時期まで連続アクセスのルー プしかベクトル化しなかったし、 2重ループの展開もできなかったから。 細かい話になりますが、ベクタプロセッサ以前のプログラムでは、 X(3,N) と 書くのが「常識」でした。そのほうがたいていの計算機で速かったですし。と ころがこれをベクトル化しようと思うと X(N,3) にしないといけなかった。私 の知り合い(多分上の「天体物理学者」の一人だったりしますが)なんかはこ ういう書換えをするプログラムを作ってました。 >> どっちがわかりやすいかというと、物理屋にとっては、Vx,Vy,Vz で配列作る >> ほうが圧倒的にわかりやすい。 というわけで、これはそんなことはないと思います。少なくともプログラムが 3倍(以上)長くなって、間違いの余地も増えるわけですし(鬼塚さんはもち ろん承知のうえでかいていらっしゃるのだと思いますが)。ちょっと古いです が Connection Machine 上の C* とかは、数値計算にはわかりやすいものだっ たと思います。 >>しかも、これが、MPI とかでのメッセージパッ >> シングでデータ転送するときにめちゃくちゃやりやすい。 構造体でまとまってるほうが、やりやすくないですか? >> そんで、結局、 >> FORTRAN による並列処理がわかりやすい。 MPI とかで陽に書くのなら、逆なように思いますが、、、 >> しかも、データ構造が配列しかない >> から、プログラム解析もめちゃくちゃ簡単。C++ みたいにポインターなんかあ >> ると、もうどうにも解析が面倒ですから、コンパイラによる自動並列化もでき >> ない。 これはその通りですね。で、結局ベクトルの機械とか、ベクタ・パラレルの機 械では Fortran で書かないとまともなベクトル化/並列化をしてくれないし、 SMP 上の KAP なんかでも事情はあまり変わらないですね。 >> つうことで、 >> >> FORTRAN で構造体を使うべきでない >> =物理屋の発想 >> =並列処理が簡単 >> >> というながれがあるんです。 というのは、ほとんど幻想だと思います。まあ、幻想だからといって無視でき ないのは確かですが。でも、計算機屋さんのほうがそう思ってて、 Fortran しか並列化してくれないんだと、、、 まあ、現実問題として最近の若者は Fortran なんか知らないし、最近の大き な数値計算用パッケージだと、 Fortran で開発されているのはそんなに多く ないように思います。 牧野@東大駒場