キャッシュのタイプ(ライトバック/スルー)をキャッシュするための書き込みをテストして判断するにはどうすればよいですか?キャッシュを変更する時間を記録することでキャッシュのレベルとサイズを決定するのと同様の方法を使用できますが、何かと比較する必要があります。例えば。既知のL1がキャッシュを介して書き込むよりも時間が大幅に短い場合は、ライトバックと言えます。ただし、比較するためのベースラインが必要になりますね。
主なアイデアは次のとおりです。
- ライトスルーの場合、書き込みにかかる時間と
x
時間の関係x * 100
は約100倍です。 - 書き戻した場合、時間はほぼ同じになりますか?
したがって、時間のループと時間のWRITES_BASE
時間WRITES
からそれぞれの時間を引いてループのみを実行し(メモリアクセスなし)、それらを比較します...これは私のCorei32100がすべてキャッシュを介して書き込みを行っているという印象を与えます...
16, 0.03, 1.04 (31.28)
128, 0.07, 2.31 (31.78)
2048, 0.10, 3.19 (31.74)
上記の値は次のとおりです。test size (KB), time for WRITES_BASE, time for WRITES (t(WRITES)/t(WRITES_BASE))
私の実験の問題は、私がWRITES
より多くの回数実行している時間差を排除していないことだと思います...
アップデート
私が気付いた奇妙なことは、私が自分のを保持しているWRITES = 64 * WRITES_BASE
場合、そして私が自分のを持っている場合ですWRITES_BASE = 4 million
。
16, 0.01, 0.13 (17.16)
128, 0.01, 0.29 (31.60)
2048, 0.01, 0.41 (30.53)
増やすとWRITES_BASE = 16 million
16, 0.02, 0.52 (25.53)
128, 0.04, 1.16 (31.74)
2048, 0.05, 1.57 (31.89)
が小さいほど、WRITES_BASE
時間の差が小さくなり、L1がライトバックキャッシュであることがわかります。ただし、常に正しいとは限らないため、たとえば。WRITES_BASEを増やすと、論理エラーが発生しているのではないかと思います。