2020-12-30
この手法はあまり使われていない気がしている
大学の人間に課題で使うマイクロベンチマークを取ってくれと言われたので、取るついでに結果の吟味をしてみた
ある長さのメモリ領域をある幅で順にアクセスしていったときの時間
縦軸: 長さ
横軸: 幅
はみだしてウケる
table:result
4B 8B 16B 32B 64B 128B 256B 512B 1K 2K 4K 8K 16K 32K 64K 128K 256K 512K 1M 2M 4M 8M 16M 32M 64M 128M
4K 0.7 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6
8K 0.7 0.7 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6
16K 0.7 0.7 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6
32K 0.7 0.7 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6
64K 0.7 0.7 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6
128K 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.6 0.8 0.6 0.6 0.6 0.6 0.6 0.6
256K 0.7 0.7 0.7 0.7 0.6 0.6 0.6 4.9 0.7 0.7 1.2 2.7 5.7 0.6 0.6 0.6
512K 0.7 0.7 0.7 0.7 0.6 0.6 0.6 4.9 0.7 0.7 0.8 4.1 4.5 5.6 0.6 0.6 0.6
1M 0.7 0.7 0.7 0.7 0.7 0.6 0.6 4.9 0.7 0.7 0.7 5.3 4.6 4.5 4.5 0.6 0.7 0.6
2M 0.7 0.7 0.7 0.7 0.7 0.7 0.7 5.1 0.7 0.7 0.8 6.2 5.6 5.7 5.1 4.4 0.6 0.6 0.6
4M 0.7 0.7 0.7 0.7 0.8 0.7 0.7 5.1 0.8 1.0 2.0 4.5 6.4 7.0 6.3 6.4 7.5 2.5 0.6 0.6
8M 0.7 0.7 0.7 0.8 0.9 0.8 1.2 5.8 1.0 1.4 2.8 6.4 10.1 6.8 6.8 6.4 6.8 6.2 2.5 0.6 0.6
16M 0.7 0.7 0.7 0.8 1.0 1.7 3.8 10.3 1.9 3.4 6.2 12.5 33.5 12.0 6.8 6.5 6.5 6.2 6.3 2.6 0.6 0.6
32M 0.7 0.7 0.7 0.7 0.9 6.0 15.3 13.3 1.9 3.9 6.2 13.6 40.4 35.0 11.2 7.0 7.0 6.7 6.9 6.3 2.5 0.6 0.6
64M 0.7 0.7 0.7 0.7 0.8 5.9 16.3 30.1 4.6 3.9 9.6 14.5 40.4 48.0 43.4 38.4 35.3 16.1 16.2 15.9 15.9 2.5 0.6 0.6
128M 0.7 0.7 0.7 0.7 0.8 5.9 16.3 30.2 6.8 7.3 9.9 14.7 39.9 47.7 47.7 43.8 34.0 16.1 15.8 16.2 16.1 16.0 2.5 0.7 0.6
256M 0.7 0.7 0.7 0.7 0.8 5.9 16.3 30.2 6.8 9.6 22.8 14.8 40.9 47.5 47.8 48.3 40.5 22.7 16.2 15.9 16.0 16.0 15.9 2.5 0.6 0.6
上から見ていくと、256Kで突然大きな値が出現することから、L1が128KBであると推定できる
これは正解
way数の推定が難しくて2時間くらい詰まる
キャッシュメモリの構造を知る必要がある
アドレスの(ライン長を除いた)下位部分をインデックスと呼び、これでキャッシュラインをway数だけ束ねたやつ(セット)にアクセスする
そのラインが使えるかどうかはアドレスの上位部分のタグを使う
セットのうちどれかが使えるラインならキャッシュヒット
つまり、「同一インデックスでタグが違う」アクセスパターンでway数の違いが現れる
下位ビットが同じってことなので、メモリ領域が広く、アクセス幅が広いといい
ということで下から見ていくと、長さ4M~256Mで幅512K~に2.5付近の値がある
ここより幅が広いとキャッシュに乗りきっているときの値が出て、狭いと乗ってないときの値が出る
ギリギリまでキャッシュを使い、たまに他のタスクが入って追い出されたりするとこんな感じになるのでは
この場所で長さを幅で割ると、8で一定になる
8箇所の重複でセットが埋まる
ということでたぶん8wayです。対戦ありがとうございました
付け焼刃みたいな知識でも割と戦えてしまうものだな