2017-02-07 3 views
3

私は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書き込みトランザクションの総数ですか?

答えて

1

は、パフォーマンス・は、事前定義されたカウンタのイベントやマスクにマッピングこれらのイベントエイリアスを使用しますが、各CPUが異なるマッピングを持っているかもしれないので、これは時々シフトする傾向があり、あなたが何かを数え終わる可能性があります。

Thisインテルフォーラムでの議論では、少なくとも一部のシステム(Has​​well、Broadwellはかなり似ているはずです)が012置換型に誤ってマッピングされていることを示唆しています。 L1キャッシュ)。

L2_transイベントについては、それらが正しくマッピングされていると仮定すると、実際にL2からのフィルおよびエビクションの合計をカウントする必要があります。 L2にはコード(おそらくこのような小さなカーネルでは無視できる)とプリフェッチ(データが空間的にレイアウトされており、プリフェッチが容易なため多分重要)があるため、ロード+ストアが多くなることに注意してください。

+0

私はL2イベント(r20f0&r40f0)にrawモードを使用していました。だから、マッピングの問題はないはずですか?また、L2_TRANS.L2_FILLに読み取りと書き込みの両方が含まれていることを確認してください。また、私はL2_TRANS.L2_WBが追い出しではなく書き出しトランザクションを指していると考えました。 – knightrider

+0

@knightrider - あなたは大丈夫でしょう。私はあなたがそれの一部を書く場合だけL2にもラインをフェッチするので、L2の塗りつぶしもストアをカウントすべきだと思います。 WBは通常、追い出しのための別の名前なので、L2から書き出された行をカウントする必要があります(たとえば、改行が上書きされたときなど) – Leeor

+0

未修正の追い出しは数えられません。 – knightrider

関連する問題