我正在使用PAPI
做一些测量和特色工作,我对常春藤桥上的事件有几个问题。
基于SDM表19-5(第三代Intel®Core™i7,i5,i3处理器的处理器内核中的非架构性能事件),Ivy Bridge具有名为CYCLE_ACTIVITY.CYCLES_LDM_PENDING
的计数器,CYCLE_ACTIVITY.CYCLES_L1D_PENDING
和CYCLE_ACTIVITY.CYCLES_L2_PENDING
。但是,当我尝试papi_native_avail
时,我不仅得到了这三个事件,还为每个事件提供了相应的STALLS
事件,包括CYCLE_ACTIVITY.STALLS_LDM_PENDING
,CYCLE_ACTIVITY.STALLS_L1D_PENDING
和CYCLE_ACTIVITY.STALLS_L2_PENDING
。而且我在CYCLES
和STALLS
事件中也有不同的数字。所以问题是它们之间有什么区别。
这个问题与上面的问题有关,因为在Intel 64和IA-32架构优化参考手册附录B.3.2.3中提到的所有事件都是STALLS
个事件,它们都不是实际上是在SDM中提到的,而不是CYCLES
个事件。问题是他们应该是什么,CYCLES
或STALLS
?我应该使用哪些来进行B.3.2.3提到的记忆界限表征?
上面提到的附录B.3.2.3中有一些关于如何计算不同级别的内存子系统上的界限的公式。我发现令人困惑的一件事是,当我使用上面提到的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
有人可以帮我这个吗?