我正在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 and IA-32 Architectures Optimization Reference Manual 附录 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
有人可以帮我解决这个问题吗?