- masashinakata
- 6989
- 2
- 1
- 0
ぷち@プログラマ日本一です
@takapt0226
キャッシュメモリはメモリからばらばらに1バイトずつキャッシュに確保されるわけではない あるアドレスから連続した領域(さっきの本では64byte)がキャッシュメモリに確保される
2014-09-01 01:50:42
ぷち@プログラマ日本一です
@takapt0226
入れ替え前だと、 k = 0: b[0][j], b[0][j + 1], .., b[0][j + 63] k = 1: b[1][j], b[1][j + 1],..., b[1][j + 2], ...
2014-09-01 01:53:21
ぷち@プログラマ日本一です
@takapt0226
というふうにキャッシュメモリが確保されるけど、j + 1, ..j + 63はすぐには利用しないので、キャッシュメモリが無駄になる
2014-09-01 01:53:24
まーす
@__math
@takapt0226 visual studio 2013だと,releaseビルドで(win32 ->x64)に変えることで 19s -> 10s になりました.
2014-09-01 01:54:28
ぷち@プログラマ日本一です
@takapt0226
入れ替え後だと、 for j=0->n-1: b[k][0], b[k][1], b[k][2], ... これは連続してるからキャッシュメモリに確保されたデータは無駄なく活用される
2014-09-01 01:55:48
まーす
@__math
visual studioどこで32bitと64bit切り替えるのか分かりにくいし,戻そうとしたら32bitから64bitにならなくて大変
2014-09-01 01:58:15
ぷち@プログラマ日本一です
@takapt0226
@__math 自分がライブラリで持ってるmatrixはvector使って値はmod取ってるやつで順序入れ替えすると2倍高速な感じでした
2014-09-01 01:58:24
まーす
@__math
@takapt0226 matrixのキャッシュで思い出したんですけど,キャッシュサイズに合うように行列演算するともっと速くなるはず(wikipediaのどっかのページに乗ってる
2014-09-01 01:59:21
くりんぺっと
@climpet
kijの順でもa[i][j]がキャッシュに載ってそこそこの速度出るかと思ったけどそういうわけでもなくてむしろ遅くなったし,どういうことなんだろう
2014-09-01 01:59:26