【问题标题】:Number of cycles taken for C++ or ANSI C?C++ 或 ANSI C 的周期数?
【发布时间】:2011-05-04 05:54:38
【问题描述】:

网络上是否有任何地方可以让我了解各种编程语言语法在处理器(Core i7 和 Core 2)周期方面的含义?在大学时,我学习了 ARM 汇编语言,我们可以映射执行减法运算符等所需的周期数。我只是想知道是否可以在 Core i7 或 Core 2 上使用更高级别的语言来做到这一点?

【问题讨论】:

  • 更准确的方法是读取编译器生成的程序集。然后,您将面临预测一段代码在现代乱序处理器上的性能的问题。
  • 您为什么要这样做?也许我们可以帮助您解决您正在尝试解决的问题。
  • VS2010有没有办法查看生成的程序集?
  • 您必须进入项目设置并为每个单独的源文件打开程序集列表的生成。

标签: c++ c assembly processor


【解决方案1】:

没有。这完全取决于您使用的编译器,以及您使用的优化设置等。

您可以使用自己喜欢的编译器和设置来生成汇编代码,并根据汇编代码进行这些预测。

但是,请记住,在现代架构中,诸如内存延迟和寄存器重命名之类的事情对速度的影响很大,而且这些影响即使从汇编代码的检查中也不明显。

【讨论】:

  • 祝你好运,64 位架构,与那个噩梦相比,x86 是小菜一碟。
  • 大多数情况下,缓慢的代码是由于缓慢的 CPU 指令(例如整数除法或超越浮点运算)、缓存未命中和分支错误预测。通过查看代码,您可以推断出所有这些,并大致了解性能。
  • @user:是的,但你不会得到像“特征 x == y 周期”这样的东西
【解决方案2】:

一般而言,在高级语言中,单个语句不会清晰地映射到特定的机器代码指令序列。编译器通常会优化事物,这将涉及指令的各种转换、安排甚至消除。因此,引用“for 表达式需要 20 个周期”之类的指标通常没有意义。

【讨论】:

    【解决方案3】:

    您必须手动将更高级别的指令映射到汇编指令中,或者查看汇编列表。然后看这里

    http://gmplib.org/~tege/x86-timing.pdf

    或这里

    http://www.intel.com/Assets/PDF/manual/248966.pdf

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 1970-01-01
      • 2013-08-07
      • 2011-12-07
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多