【问题标题】:Optimization issue优化问题
【发布时间】:2012-03-22 11:23:24
【问题描述】:

我正在开发一个控制器程序,用于运行类人小孩大小的机器人。操作系统是 debian 6,整个程序都是用 C++11 编写的。 CPU 为 1GHz VorteX86 SD,其架构为 Intel i486。

我需要以最大可能的优化来编译我的代码。目前我正在使用带有 3 级优化标志和 i486 优化调整的 gcc:

g++ -std=c++0x -O3 -march=i486 -mtunes=i486

我想知道是否有可能获得更优化的代码。我搜索了有关优化标志和编译器基准的信息,但没有找到任何...

我的问题是哪个 C++ 编译器生成更快的代码?特别适用于 i486 架构。

目前的候选者是:ICC XE、GCC 4.6、EkoPath

【问题讨论】:

  • 你试过了吗?鉴于这样一组特定的要求,您最好的选择可能是设置合适的测试工具并对每个选项进行基准测试。
  • 为什么需要更快的代码?您是否正在尝试实施实时控制?通常情况下,具有确定性行为的微控制器用于类似的事情,但如果你想使用 Linux,RTwiki 可能是一个很好的来源。
  • 是的。我正在使用 Xenomai rt 内核,虽然图像处理算法和决策机制应该非常快。
  • 在支付 ICC 费用之前,我想看看一些基准或成功案例...
  • 查看其中一些优化链接:[优化讨论][1] [另一个优化讨论][2] [使用处理器缓存进行优化][3] [1]:stackoverflow.com/questions/2932515/… [2] :stackoverflow.com/questions/2074099/… [3]:stackoverflow.com/questions/3029738/…

标签: c++ compiler-construction c++11 compiler-optimization


【解决方案1】:

通常使代码更快的一个选项是 -funroll-loops

【讨论】:

    【解决方案2】:

    请参阅documentation。有太多的排列来测试它们。也许可以试试 Acovea,它会通过基因方法测试最好的。

    如果您有很多浮点优化,您可以尝试-ffast-math-Ofast,其中包括-ffast-math。但是,您将失去 IEEE 浮动数学合规性。

    【讨论】:

    • 这个CPU中没有硬件FPU;只有来自 linux 内核的 soft-fpu。
    • @osgx:但是 soft-fpu 也可以用于 IEEE-correct-FPU 计算,不是吗?快速数学是关于应用破坏 IEEE 兼容性的优化,例如操作数重新排序或强度降低(例如,将 x * 3 替换为 x + x + x)。
    • 是的,-ffast math 会发出更优化的代码;但是无论如何soft-fpu都太慢了。
    猜你喜欢
    • 2011-04-01
    • 2019-03-12
    • 2010-10-20
    • 2012-02-25
    • 2011-05-16
    • 2019-01-27
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多