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: 12 May 1998 04:50:52 GMT Organization: College of Arts and Sciences, Univ. of Tokyo Lines: 62 Message-ID: <6j8kfd$j55@news.nc.u-tokyo.ac.jp> References: <6j8774$da0@news.nc.u-tokyo.ac.jp> 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:33 の記事において onizuka@mpapia.trc.rwcp.or.jpさんは書きました。 >> ははは。斉藤さんですけれど。いえ、私が関連したわけではなくて、斉藤さん >> と一緒にやっていたプログラマがC++ばりばりで、分子動力学計算のためのイ >> ンフラとなるOSみたいなものを作った。OS屋であるプログラマさんにとっては、 >> データ抽象化とその並列化のためのデータ転送に関するプロトコル作成、それ >> らのメソッド化などなどは当然。 あの、これって、お願いすれば使わせていただけるものでしょうか?MD で使うように作ったのであれば、ちょっといじれば天文にも使えると思 うので。 >> ところが、これは斉藤さんにとってはまさに >> 未知の領域でした。逆に数式でかかれたものを、プログラムにするのには、こ >> のプログラマさんがとっても困った。最終的には、二人で非常に良いシステム >> を構築するところまでいったわけですけれど、理解しあうまでに相当な時間が >> かかったし、互いにものすごい苦労があったということです。 こういうのはある程度の時間がかかるのはまあしょうがないのではと思 います。 >> >send(p[k], sizeof(PARTICLE)*nsend); >> > >> >と書くより面倒ではないとはなかなか思えないのですが、、、 >> >> じゃあ、並列計算では、たぶん、send(p[k], sizeof(PARTICLE)*nsend); のほ >> うが無駄になりますよね。無駄なデータ送るかも。そういうのを最適化しよう >> とすると面倒。まあ、いろいろあるとは思いますけれど、そういうのを考える >> か、ばらばらなままやるか。たぶん、ばらばらなままのほうが物理屋には理解 >> しやすい。 無駄かどうかは微妙な問題で、 send を起動する回数が多い方が無駄が 大きいというような実装が多いと思います。これを減らすために OS 側、 あるいはアプリケーションのなかでバッファリングすれば、また無駄な コピーが発生するわけですし。 なかなか重箱の隅をつつくような話ですが、構造体のなかで一部を送る とかいう最適化のほうが、メモリ階層がある機械の場合はやりやすいで す。data locality が大きくは破壊されないし。 実際、粒子系を扱う場合では、 send(p[k], sizeof(PARTICLE)*nsend); といっても、配列の全体ではなくて、ランダムアクセスして送るという ようなことが起きるのが普通です。そうすると、要素配列毎にランダム アクセスするのと、構造体があるのとではメモリアクセスの性質が構造 体のほうがずっと良いです。 >> 私は現状肯定ではないんですよ。物理屋ももっとオブジェクト指向を見るべき >> だろうし、とは思っているけれど。 なんだかんだいっても、「大規模並列計算」だと速くないと話にならな いところがありますから、難しい面はありますね。 でも、 MD とか我々がやってる天文の N 体なんてのは、どうしても速く 走って欲しいところはプログラム全体のほんの一部なので、そこは別に Fortran でもアセンブラでも良くって、それ以外のところは別に考える というのが能率的な態度だと思います。まあ、能率の悪い方法に固執す る人はいつでもいるわけですが。 牧野@東大駒場