【问题标题】:GCC optimization for CPU and MEMORY usageGCC 优化 CPU 和内存使用
【发布时间】:2015-08-31 03:56:45
【问题描述】:

有没有办法使用选项标志在 cpu 和内存方面优化 GCC 编译代码? 使用 O3 而不是 01 会增加或减少内存或 CPU 使用量吗?

【问题讨论】:

  • 通常优化的代码会消耗更多的 cpu(时间更短)。你的意思是优化可执行文件的大小?这是编译器为你做的唯一的内存消耗优化。
  • 通过以更“节俭”的风格编写代码,您会更幸运地减少代码的大小。编译器只能做很多事情来优化它,但它会受到您编写代码的限制。

标签: gcc memory cpu-usage compiler-optimization


【解决方案1】:

您可以尝试-Os,它类似于-O2(良好的 CPU 速度),同时尝试减小二进制大小。

查看各种优化here

【讨论】:

    【解决方案2】:

    关于内存使用:

    • -Os 减小程序的二进制大小。它对运行时内存使用的影响有限(C/C++ 内存分配和释放是“手动”的)。

      我说有限,因为tail recursion optimization 可以降低堆栈使用率(此优化也将与-O2 / -O3 一起执行)。

    • -flto (link time optimization) 选项还可以减小二进制大小。

    CPU 使用率:

    也许您应该使用-O2,不要担心:如果您希望节省电力/内存,您的应用程序的整体设计将比编译器开关更有效。

    【讨论】:

    • 之前有没有研究过编译器优化对 %CPU 和内存的影响?你给我的链接很有趣,但我试图找到一些与 mem 和 cpu 相关的作品。谢谢
    【解决方案3】:

    上面提到了代码大小优化。

    我只关注 CPU 优化。您可以编写处理器利用率低的非常好的/优化的代码,以及最大化 CPU 利用率的非常差的/未优化的代码。

    那么您如何最有效地使用您的处理器?

    1. 首先,使用一个好的优化编译器。我不会谈论 GCC,但英特尔和其他一些购买的编译器(例如 PGI)非常擅长优化。
    2. 利用底层硬件,例如向量指令、FMA、寄存器等。
    3. 遵循使用外围设备的最佳做法,例如蜂窝、wifi、gps 等。
    4. 遵循软件设计的最佳实践,例如延迟隐藏、通过使用中断避免轮询、在适当的情况下使用线程池等

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 2018-08-19
      相关资源
      最近更新 更多