【问题标题】:Approximate Number of CPU Cycles for Various Operations各种操作的近似 CPU 周期数
【发布时间】:2011-02-11 17:51:24
【问题描述】:

我正在尝试查找各种​​操作需要多少 CPU 周期的参考。

我不需要确切的数字(因为这在 CPU 之间会有所不同),但我想要一些相对可信的数据,可以提供我可以在与朋友讨论时引用的大致数字。

举个例子,我们都知道浮点除法比位移位花费更多的 CPU 周期。

我猜不同之处在于除法大约是 100 个周期,而 shift 是 1,但我正在寻找可以引用的东西来支持它。

谁能推荐这样的资源?

【问题讨论】:

    标签: reference citations cpu-cycles


    【解决方案1】:

    我做了一个小应用程序来测试这个。一个使用合成器免费版的非常近似的应用程序...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
    

    循环分析器中的读数从 50 到 100 变化很大,通常是预期值的单倍或两倍,这些是代表平均值的数字,循环分析器是一个非常粗糙的工具,但它给出了公平的结果,一个解决方法用户在 ASM 中编码的指数以音频速率计算 exp 和基数,例如大约 800 个周期,所以我想说上述数字至少接近 50%。我认为分歧更大!似乎是两倍。如果你想让我制作的文件在 SM 免费版中运行,请发邮件给我,我打算保存一个 exe,这就是我这样做的原因,但你不能保存在免费版中,我很傻!我不会在 1.17 版中从第一方开始编写代码:/ ant.stewart 在 yahoo dotty com 的地方。

    【讨论】:

    • 为什么 MULT 的延迟与 ADD 差不多?我听说整数 MULT 通常比现代 CPU 中的 ADD 慢 3 倍。但是浮点 MULT 可能与浮点 ADD 具有相同的速度。
    【解决方案2】:

    对于 x86 处理器,请参阅 Intel® 64 and IA-32 Architectures Optimization Reference Manual,可能是附录 C。

    但是,要弄清楚一条指令在现代 x86 处理器上执行需要多少个周期并不容易,因为它过多地依赖于例如访问缓存中的数据,对齐访问,分支预测是否失败,指令流水线是否停止以及其他很多事情。

    【讨论】:

      【解决方案3】:

      这将取决于硬件。最好的办法是在您要测试的特定硬件上运行一些基准测试。

      基准大致如下:

      • 将原始运算运行一百万次(例如,将两个整数相加)
      • 记录运行时间(例如,以秒为单位)
      • 乘以您的机器每秒执行的周期数 - 这将得出所花费的总周期数。
      • 将 1000000 除以上一步中的数字 - 这将为您提供每个周期的指令数。请记住,使用流水线时,这可能小于 1。

      【讨论】:

      • 如何消除运行1000000个周期所用的时间,以及用于存储次数、分支预测等的寄存器分配?
      【解决方案4】:

      research由Agner Fog制作:

      1. 说明表

      指令表:指令延迟、吞吐量和 Intel、AMD 和 VIA CPU 的微操作故障。

      最后更新时间 2021-03-22

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-02
        相关资源
        最近更新 更多