各种操作所需的CPU周期数的近似值

11

我正在尝试寻找关于各种操作需要多少CPU周期的参考资料。

我不需要精确的数字(因为这会因CPU而异),但我希望获得相对可靠的数据,以便在与朋友讨论时可以引用。

例如,我们都知道浮点数除法比进行位移操作需要更多的CPU周期。

我猜差别大约是除法需要100个周期,而移位只需要1个周期,但我正在寻找一些可引用的资料来支持我的猜测。

有人能推荐这样的资源吗?

4个回答

4
我做了一个小应用程序来测试这个。使用免费版本的SynthMaker制作的非常粗略的应用程序... e 表示空,数字表示非常近似的周期数。
  divide|e:115|10
    mult|e: 48|10
     add|e: 48|10
    subs|e: 50|10
compare>|e: 50|10
     sin|e:135:10

周期分析仪中的读数变化很大,通常是预期数量的一倍或两倍,这些数字表示平均值,周期分析仪是一个非常粗糙的工具,但它可以给出公平的结果。用户采用 ASM 编写了一个指数计算器,在音频速率下同时计算指数和基数,大约需要800个周期,所以上述数字至少接近50%。我以为差距会更大!看起来实际上是预期的两倍左右。如果你想要我制作的文件在 SM 免费版本中运行,请发邮件联系我,我本来想保存一个 exe 文件的,但免费版本不能保存,真是太傻了!我不打算在1.17版本中从头开始编码 :/ ant.stewart at the place yahoo dotty com。


为什么MULT的延迟时间与ADD相似?我听说在现代CPU中,整数MULT通常比ADD慢3倍。然而,浮点数MULT可能与浮点数ADD具有相同的速度。 - adieux

4
对于x86处理器,请参见Intel® 64和IA-32架构优化参考手册,可能在附录C中有相关内容。
然而,在现代x86处理器上计算指令执行所需的周期数并不容易,因为它太过依赖于例如访问缓存中的数据、对齐访问、分支预测失败、指令流水线中是否存在停顿以及其他许多因素。

1

这会依赖于硬件。最好的方法是在要测试的特定硬件上运行一些基准测试。

基准测试大致如下:

  • 运行一个原始操作一百万次(例如,将两个整数相加)
  • 记录所用时间(例如,以秒为单位)
  • 乘以你的机器每秒执行的周期数 - 这将给出总共花费的周期数。
  • 将1000000除以上一步骤中得出的数字 - 这将给出每个周期的指令数。请注意,使用流水线技术时,这可能少于1。

你如何消除运行1000000个循环所使用的时间以及用于存储循环次数的寄存器分配、分支预测等问题? - SOFe

0

Agner Fog曾经进行了研究:

  1. 指令表

指令表:列出了英特尔、AMD和VIA CPU的指令延迟、吞吐量和微操作分解。

最后更新于2021年3月22日。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接