私はL1キャッシュ(プロセッサーIntel Broadwell)にロードされたキャッシュラインの数を決定しようとしています。私のカーネルコードは、私がPERFイベントL1-dcache-load-misses
を使用しています読み込み(プリフェッチを含む)のためにl1/l2キャッシュにロードされた行数を測定しますか?
a[i] = 2*b[i] + 2.3 // i from 0 to pow(10,8)
です。測定された数は予想より2倍です。私は6Mの負荷と6Mの店を期待しています。しかし、L1-dcache-load-misses
は約12Mです。しかし、LLC-stores
は期待通りです(6M)
i)L1-dcache-load-misses
はロードミスとストアミスの両方をカウントしますか? Intel software developer manualで
(表19.5)、L2キャッシュに、私が見つかりました2つのメトリック
- I)
L2_TRANS.L2_FILL
(r20f0) - II)
L2_TRANS.L2_WB
(r40f0)
ii)L2_TRANS.L2_FILLの正確な意味は何ですか?それはL2トランザクションの総数ですか?
iii)L2_TRANS.L2_WBの正確な意味は?それはL2書き込みトランザクションの総数ですか?
私はL2イベント(r20f0&r40f0)にrawモードを使用していました。だから、マッピングの問題はないはずですか?また、L2_TRANS.L2_FILLに読み取りと書き込みの両方が含まれていることを確認してください。また、私はL2_TRANS.L2_WBが追い出しではなく書き出しトランザクションを指していると考えました。 – knightrider
@knightrider - あなたは大丈夫でしょう。私はあなたがそれの一部を書く場合だけL2にもラインをフェッチするので、L2の塗りつぶしもストアをカウントすべきだと思います。 WBは通常、追い出しのための別の名前なので、L2から書き出された行をカウントする必要があります(たとえば、改行が上書きされたときなど) – Leeor
未修正の追い出しは数えられません。 – knightrider