是否可以使用最近的Intel x86芯片上的性能计数器来衡量成功的存储转发操作的数量?
我看到ld_blocks.store_forward
测量失败商店转发的事件,但我很清楚是否可以衡量成功案例。
答案 0 :(得分:4)
我没有看到比你为SKL做的更多的事情,但是较老的搜索可能有更多细节:
对于Core2(英特尔令人困惑地称之为Core微体系结构),the optimization manual文档(在B.7中) INTEL CORE MICROCHCHITECTURE的事件比率):
B.7.5.2 4K别名和存储转发块检测
- 因重叠存储率而被阻止的负载:
醇>LOAD_BLOCK.OVERLAP_STORE/CPU_CLK_UNHALTED.CORE
4K别名和存储转发块是两种不同的负载情况 由于不同的原因被前面的商店阻止。两种情况 由同一事件检测到:
LOAD_BLOCK.OVERLAP_STORE
。很高的价值 “由重叠存储率阻止的负载”表示4K 别名或存储转发块可能会影响性能
这可能会导致商店转发失败并成功。 (和4k混叠,所以你需要避免或减去它。)
B.7.5.3通过前置商店加载阻止
- 由未知商店地址
阻止的加载 醇>Rate: LOAD_BLOCK.STA / CPU_CLK_UNHALTED.CORE
“未知商店阻止的负载”的值很高 “地址速率”表示前面经常阻塞负载 地址未知且意味着性能损失的商店。
- 被未知商店数据速率阻止的负载:
醇>LOAD_BLOCK.STD / CPU_CLK_UNHALTED.CORE
“未知商店阻止的负载”的值很高 “数据速率”表示前面经常阻止负载 数据未知的商店,意味着性能损失。
最后两个计数器似乎计算成功的商店转发,但仅在检测到(可能的)重叠后实际必须等待的情况下。
答案 1 :(得分:2)
没有记录的事件可以统计成功的商店转发操作的数量。但是,我为此目的在Haswell和Broadwell上确定了一组未记录的事件。特别是,事件代码为0x2且umask为奇数的任何事件(任何奇数,例如1)似乎都非常准确地表示成功进行商店转发的事件,即,计数与预期一样,标准偏差实际上为零。我认为您可以在以后(甚至更早)的微体系结构上使用相同的事件。同样,这些事件均未记录。