11

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

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

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

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

谁能推荐这样的资源?

4

4 回答 4

4

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

但是,要弄清楚一条指令在现代 x86 处理器上执行需要多少个周期并不容易,因为它过多地依赖于例如访问缓存中的数据、对齐访问、分支预测是否失败、是否出现停顿指令管道和很多其他的东西。

于 2010-04-23T23:27:45.623 回答
4

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

于 2011-04-24T10:11:34.767 回答
1

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

基准测试大致如下:

  • 运行原始操作一百万次(例如,添加两个整数)
  • 记录运行时间(例如,以秒为单位)
  • 乘以您的机器每秒执行的周期数 - 这将为您提供所花费的周期总数。
  • 将 1000000 除以上一步的数字 - 这将为您提供每个周期的指令数。请记住,使用流水线,这可能小于 1。
于 2010-04-23T23:12:46.000 回答
0

Agner Fog 进行了一项研究:

  1. 指令表

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

最后更新 2021-03-22

于 2021-04-27T20:55:00.887 回答