为了账号安全,请及时绑定邮箱和手机立即绑定

为什么循环指令慢?英特尔不能有效地实现它吗?

为什么循环指令慢?英特尔不能有效地实现它吗?

环(英特尔参考文献人工输入)ECX/RCX递减,如果非零。虽然速度很慢,但英特尔不能便宜地让它跑得更快吗?dec/jnz已经宏熔断为单个uop。在沙桥家族;唯一的区别是设置旗子。loop在不同的微体系结构上阿格纳·福格(氏)指令表:K8/K10:7m-OPS推土机-家庭/Ryzen:1mop(与宏融合测试和分支相同的成本,或jecxz)P4:4 OOPS(同jecxz)P6(PII/PIII):8 OOPS奔腾M,核心2:11 uopsNehalem:6 uops。(11)loope / loopne)。吞吐量=4c(loop)或7c(loope/ne).SNB-家庭*7英尺。(11)loope / loopne). 吞吐量=每5个周期一个,就像将循环计数器保存在内存中一样是一个瓶颈!jecxz只有两个uop具有与常规的相同的吞吐量。jcc西尔佛蒙特:7乌普AMD捷豹(低功耗):8 uops,5c吞吐量通过Nano 3000:2 uops难道解码器不能像lea rcx, [rcx-1] / jrcxz?那将是3次。至少在没有地址大小前缀的情况下,它必须使用ecx截断RIP到EIP如果跳下去了;也许控制减幅的地址大小的奇怪选择解释了为什么会有这么多uop?或者更好的是,把它解码成一个不设置标志的融合的分叉?dec ecx / jnz在SNB上,解码为单个uop(它确实设置了标志)。我知道真正的代码不使用它(因为它一直缓慢从至少P5或什么),但AMD认为这是值得的,使它快速推土机。可能是因为这很容易。对于SNB家族的人来说,拥有快速的生活是件容易的事吗?loop?如果是的话,他们为什么不呢?如果不是,为什么会很难呢?很多解码器晶体管?或者在一个融合的Dec&分支uop中额外的位来记录它没有设置标志?那七个人能做什么?这是一个非常简单的指示。开快车的推土机有什么特别之处?loop容易/值得吗?或者AMD在制造过程中浪费了一堆晶体管loop快地?如果是这样的话,大概有人认为这是个好主意。如果loop太快了,这将是完美的BigInteger任意精度adc循环,以避免部分旗档/减速。(请参阅我对我的答案的评论),或任何其他情况下,您想要在不接触标志的情况下循环。与代码大小相比,它还具有较小的代码大小优势。dec/jnz。(和dec/jnz只有宏观保险丝对SNB-家庭)。关于现代CPUdec/jnz在ADC循环中没问题,loop对于ADCX/ADOX循环(保留)来说还是不错的。如果loop如果是快速的,编译器将已经使用它作为一个窥视孔优化的代码大小+速度上的CPU,没有宏融合。它也无法阻止我对所有使用错误16位代码的问题感到恼火loop对于每个循环,即使当它们还需要在循环中另一个计数器时。但至少不会如坏的。
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 676 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信