Date: Wed, 23 Dec 98 13:45:43 JST From: SHUDOH Kazuyuki Subject: [JavaHouse-Brewers:22226] Re: =?ISO-2022-JP?B?GyRCTnMkTiUzJVQhPCRPJEAkYSRKJHMkRyQ3JGckJiQrISkbKEI=?= To: java-house-brewers at java-house.etl.go.jp (JavaHouse Brewers ML) Message-Id: <199812230441.NAA08788@cafe.muraoka.info.waseda.ac.jp> 首藤です。 > > > アドレス計算、要素へのアクセス、を次数分繰り返す必要があります。 > > > 多次元配列のアクセスがとても遅い理由です。 > > 可能な限りの最適化を施す前提で比較したらそう簡単には言えないでしょう。 はい。 > ところが、Javaの場合、マルチスレッドの場合を考えると、いつ二次元目が指す > オブジェクトが変更されるかわからない(ローカル変数の場合を除く)ので、こう > いった最適化をしてしまってよいかどうか問題になりますね。 いつ他のスレッドに変更されるかわからない、という理由で最 適化できないコードとはすなわち、スレッドがスケジュールさ れるタイミングに依存したコードだとは言えないでしょうか。 「そういったコードを書いた奴が悪い」 「最適化でセマンティクスが変わっても仕方ないね」 と言いたいものです。 書いた奴が悪い、と言ってしまってよいものかどうか …以前議論があったように思います。 > また、二次元目が > 同じ一次元目配列オブジェクトを指している(aliasingのある)場合もあり得るの > で、その場合を想定していない従来の最適化手法を簡単には適用できませんね。 alias が限られた場合にしか発生しない FORTRAN 77 で 利用できた手法の適用は限られることもあるかと思いますが …と書きかけましたが、ひとつの 2次元配列の中に alias がある (*1) というのは、これまで (ほとんど?) 考慮されて来なかったかも知れません。 #その気になれば C でも同様の状況は作れますが。 (*1) 言葉が適切かどうか自信がないです。 int[][] array = new int[10][10]; array[0] = array[9]; ちょっと考えただけでも、ループ並列化の障害になりますし、 その他最適化の障害になりそうです。 SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh at muraoka.info.waseda.ac.jp