1

我现在正在为芯片 E5-4603 (SandyBridge) 上的电源建模项目工作。我阅读了几篇论文,这些论文介绍了一组基于性能监控计数器的活动比率(比如模型的输入)。不幸的是,这些论文是针对 Core 微架构芯片的。

所以我的第一项工作是在我们的 Sandy Bridge 芯片中找到这些基于 PMC 的(核心微关节)活动比率的对应物。

例如,在Core架构中,我们可以将UOPS_RETIRED.ANY/CPU_CLK_UNHALTED.CORE_P制定为所谓的整个有序引擎(即前端,包括Fetch单元、DECODE单元等组件)的活跃度,除了 BPU,它可以通过独立活动比率来表征,BR_INST_DECODED/CPU_CLK_UNHALTED.CORE_P。

相比之下,我在我们的 Sandy Bridge PMC 中发现了一个类似的前端(也没有 BPU):

UOPS_RETIRED.ALL /CPU_CLK_UNHALTED:THREAD_P(问题 1,对吗?)

但是对于BPU来说,有点不确定,因为我没有在SandyBridge找到这样的事件,和事件的意思完全一样

核心微架构中的 BR_INST_DECODED。

我只能找到一个不太相似的事件:BR_INST_RETIRED.ALL_BRANCHES。显然,根据它们的定义,BR_INST_DECODED 和 BR_INST_RETIRED.ALL_BRANCHES 是很容易区分的,它们的区别通常不能忽略。(问题 2)在 Sandy Bridge 中是否有更好(更相似)的替代 Core microarchitecture 中的 BR_INST_DECODED。

而在Core microarchitecture中,可以使用以下比率来制定整数计算操作的活动率(这里只考虑普通整数计算操作,SIMD整数操作除外):

(RS_UOPS_DISPATCHED_CYCLES.PORT_0 + RS_UOPS_DISPATCHED_CYCLES.PORT_1 + RS_UOPS_DISPATCHED_CYCLES.PORT_5 - FP_COMP_OPS_EXE-SIMD_UOPS_EXEC - BR_INST_RETIRED.ANY)/ CPU_CLK_UNHALTED:THREAD_P

上面的比例很容易得到,因为Core微架构的乱序引擎中所有的计算操作都是在Port 0、Port1和Port5上进行的,去掉浮点部分就可以很容易地得到整数运算的统计信息, SIMD 和从总的分支操作。

(问题3)Sandy bridge中提供的任何事件(或一组事件)是否可以像Core microarchitecture中的SIMD_UOPS_EXEC一样发挥作用?或者换一种方式(实际上更直接的方式)是否有任何事件可以直接告诉整数运算的数量(也是SIMD整数运算除外)?</p>

(问题4)在Sandy Bridge有FSB(front side bus)监控的offcore(uncore)事件吗?

非常感谢!

4

0 回答 0