- 483 名前:479 mailto:sage [2007/12/29(土) 23:23:23 ]
- 恥ずかしながらLU分解はやった事無いんだけど
3重のループでa[ii]のラインはiに依存して切り替わり、 a[ik]のラインはkに依存して切り替わるでしょ。 a[ik]のラインはkにつき1度しか切り替わらないからキャッシュにずっと入ってるけど、 a[ii]のラインはkが同じでもiが変わったら切り替わってしまう。 a[ii]のラインは最大k回アクセスがあるから、出来れば切り替えたく無い。 そこで折衷案をとって、a[ik]をもう少し頻繁に切り替える代わりにa[ii]をもう少しゆっくり切り替わるようにバランスを取る。 バランスを取るというのはどういう事かと言うと、 二次元の処理で1000x1000の要素があった時に 1ラインずつ処理するのではなく例えば100x100のマスが10x10個あるものとして処理する。 (0, 0)-(999, 0)を処理してから(0, 1)-(999, 1)の処理をするんじゃなくて、 (0, 0)-(99, 0)まで処理して(0, 1)-(99, 1)...(0, 99, 99, 99), (100, 0)-(199, 0)のような処理の仕方。 今回はループが3重だから、書き換えると6重のループになって頭は最高にこんがらがる。 しかもラインがipによって入れ替わるみたいだから、こういう手法が使えるのかよく分らない。ごめん。 ipがどう変わるかを事前に必要なライン数分計算出来ればいいんだろうけど。
|

|