Ivy PAPI
Bridge でのイベントについていくつか質問があります。
SDM 表 19-5 (第 3 世代インテル® Core™ i7、i5、i3 プロセッサーのプロセッサー・コアにおける非アーキテクチャー・パフォーマンス・イベント) に基づくと、Ivy Bridge には
CYCLE_ACTIVITY.CYCLES_LDM_PENDING
、CYCLE_ACTIVITY.CYCLES_L1D_PENDING
およびという名前のカウンターがありCYCLE_ACTIVITY.CYCLES_L2_PENDING
ます。しかし、 を試してみるとpapi_native_avail
、これら 3 つだけでなく、 、 、 など、STALLS
それぞれに対応するイベントも取得されました。また、とイベントで別の数字も持っています。だから問題は、それらの違いは何ですか。CYCLE_ACTIVITY.STALLS_LDM_PENDING
CYCLE_ACTIVITY.STALLS_L1D_PENDING
CYCLE_ACTIVITY.STALLS_L2_PENDING
CYCLES
STALLS
Intel 64 and IA-32 Architectures Optimization Reference Manual Appendix B.3.2.3 で言及されているすべてのイベントは
STALLS
イベントであり、実際にはイベントではなく SDM で言及されていないため、この質問は上記の質問に関連していCYCLES
ます。問題は、それらがどうあるべきかということCYCLES
ですSTALLS
。また、B.3.2.3 で述べたメモリ バウンドのキャラクタライゼーションを行うには、どれを使用すればよいですか?上記の付録 B.3.2.3 には、メモリ サブシステムのさまざまなレベルの境界を計算する方法に関するいくつかの式があります。私が混乱していたことの 1 つは、上記の STALLS イベントを使用して測定を行ったときに、
STALLS_L2_PENDING
よりも大きな数値が得られSTALLS_L1D_PENDING
たことですが、そのセクションには次の式があります。
%L2 Bound = (CYCLE_ACTIVITY.STALLS_L1D_PENDING - CYCLE_ACTIVITY.STALLS_L2_PENDING) / CLOCKS
これは私の測定が間違っているということですか?%L2 Bound
そうでない場合、ゼロを超えるため、どのように計算できますか。
ソースコードは次のリンクにあります: https://github.com/yqzhang/SMTM/blob/master/native/native.c
誰かがこれで私を助けてくれますか?