You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个可熔合指令对能否在同一时钟周期解码?i7-10700实测疑问

问题分析

1. 测试代码的核心缺陷

你编写的测试用例中,所有jge指令的跳转目标是紧随其后的下一条指令,对应汇编中的偏移量为0,属于无操作分支。你所用的i7-10700属于Comet Lake架构,是Skylake的14nm迭代版本,该架构的预解码器对这类特殊分支存在固定单周期惩罚,每遇到一个就会导致MITE通路流水线停顿1周期,直接限制了每周期只能处理1个熔合对。
你的测试中宏熔合功能本身是正常生效的,从性能计数器数据即可验证:总执行指令数35.5G,MITE通路递送的uop数17.79G,刚好2条指令对应1个uop,说明dec+jge确实被熔合为单个uop。

2. 测试代码修正方案

将所有跳转目标从当前指令的下一行移到整个测试代码段的末尾,避免出现偏移为0的无操作分支,参考代码如下:

ALIGN 32
; 顺序写入8000个熔合对,跳转目标统一指向代码段末尾的退出逻辑
dec ecx
jge .test_exit
dec ecx
jge .test_exit
dec ecx
jge .test_exit
; ... 重复8000次
.test_exit:
; 后续测试退出逻辑

测试时将ecx初始值设为负数,保证所有jge都不会触发跳转,顺序执行所有熔合对,即可消除无操作分支带来的预解码惩罚。
修正后你应该可以观测到r479 / r1002479的数值接近2,符合每周期送出两个熔合对的理论结果。Skylake架构的MITE通路单周期最多可递送4个uops,两个熔合对总长度仅8字节、对应2个指令边界,完全可以在单周期内完成递送,和Agner的相关结论没有冲突。

3. perf计数器使用验证

你所用的两个性能计数器在Comet Lake平台定义正确,没有用法错误:

  • r479对应IDQ.MITE_UOPS,统计MITE通路递送到指令解码队列(IDQ)的uop数量
  • r1002479对应IDQ.MITE_CYCLES,统计MITE通路有uop递送的周期数
    计数器读数是可信的,问题与perf工具使用无关。

内容的提问来源于stack exchange,提问作者moep0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:15:08