【问题标题】:C++0x optimizing compiler qualityC++0x 优化编译器质量
【发布时间】:2011-02-10 09:21:30
【问题描述】:

我做了一些繁重的数字运算,对我来说浮点性能非常重要。 我非常喜欢英特尔编译器的性能,并且对它产生的汇编质量非常满意。

我想在某个时候尝试 C++0x 主要用于糖部分,如 auto、初始化列表等,还有 lambdas。在这一点上,我通过 boost 在常规 C++ 中使用这些功能。

编译器 C++0x 生成的汇编代码有多好?特别是 Intel 和 gcc 编译器。 他们是否生成 SSE 代码?性能可以与 C++ 媲美吗?有基准吗?

我的 Google 搜索没有透露太多信息。

谢谢。

ps:有时我会自己测试它,但想知道相对于 C++ 会发生什么。

【问题讨论】:

  • 请注意,英特尔 C++ 编译器目前仅支持 lambda,并且它们的实现就像它们是简单的、唯一命名的仿函数一样。因此,从优化的角度来看,它们将像任何其他函数一样进行优化。

标签: c++ performance optimization g++ c++11


【解决方案1】:

您可以期待对您的代码进行同样的优化,因为编译器在优化方面肯定不会变得更糟。因此,仅使用新的 C++0x 功能可能会对其产生影响。但我怀疑你的核心例程会突然完全改变为以某种方式使用仅限 C++0x 的功能。

请记住,auto 和 lambda 之类的东西只是语法糖。这对编译器优化没有影响,因为它们只是生成相同代码的方法。所以你只需要担心像初始化列表这样的新“东西”。但如果这也是低效的,我会感到惊讶。

由于移动语义,您还应该期待许多改进。您不再需要复制数据,而只是移动它。设计您的代码以充分利用这一点。

【讨论】:

  • 如果有的话,由于移动语义,您几乎可以立即获得好处
  • 好吧,用 C++ 0x g++ 重新编译 C++ 源代码,确实没有区别,每当我使用常规浮点或 Intel 内在函数时。所以就表现而言,它们似乎是一样的。没看过程序集,但我的猜测也是等价的
猜你喜欢
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多