6

是否可以使用最新的 Intel x86 芯片上的性能计数器来测量成功的存储转发操作的数量?

我看到了ld_blocks.store_forward衡量存储转发失败的事件,但我很清楚是否可以衡量成功的案例。

4

2 回答 2

4

我没有看到比您为 SKL 所做的更多的事情,但是较旧的 uarches 可能有更多详细信息:

对于 Core2(Intel 容易混淆地称为 Core 微架构),优化手册文档(在 B.7 EVENT RATIOS FOR INTEL CORE MICROARCHITECTURE 中):

B.7.5.2 4K 别名和存储转发块检测

  1. 重叠存储率阻塞的负载:LOAD_BLOCK.OVERLAP_STORE/CPU_CLK_UNHALTED.CORE

4K aliasing 和 store forwarding block 是两种不同的场景,由于不同的原因,load 被前面的 store 阻塞了。这两种情况都是由同一事件检测到的:LOAD_BLOCK.OVERLAP_STORE。“Loads Blocked by Overlapping Store Rate”的高值表示 4K 混叠或存储转发块可能会影响性能

这可能算作停滞和成功的存储转发。(还有 4k 混叠,所以你需要避免或减去它。)

B.7.5.3 通过前面的存储加载块

  1. 未知存储地址阻止的加载Rate: LOAD_BLOCK.STA / CPU_CLK_UNHALTED.CORE

“Loads Blocked by Unknown Store Address Rate”的高值表示加载经常被前面的具有未知地址的存储阻塞,这意味着性能损失。

  1. 未知存储数据速率阻止的负载:LOAD_BLOCK.STD / CPU_CLK_UNHALTED.CORE

“Loads Blocked by Unknown Store Data Rate”的高值表示负载经常被先前的具有未知数据的存储阻塞,并意味着性能下降。

最后两个计数器似乎计算成功的存储转发,但仅在检测到(可能的)重叠负载实际上必须等待的情况下

于 2017-09-10T21:14:24.357 回答
2

没有记录事件来计算成功的存储转发操作的数量。但是,我已经为此目的在 Haswell 和 Broadwell 上通过实验确定了一组未记录的事件。特别是,任何事件代码为 0x2 且 umask 为奇数(任何奇数,例如 1)的事件似乎都非常准确地表示了成功存储转发的事件,即计数与预期一致,标准偏差实际上为零. 我认为您可以在以后(甚至更早)的微架构上使用相同的事件。同样,这些事件都没有记录在案。

于 2018-11-15T22:24:40.710 回答