c++ - 优化执行时间

标签 c++ gcc optimization compilation

由于学校作业,我必须将 C++ 代码转换为程序集 (ARMv8)。然后我必须使用 GCC 的 -O0、-O1、-O2、-O3 和 -Os 优化来编译 C++ 代码,记下时间并与我的汇编代码的执行时间进行比较。因为,我想我知道 -O3 必须比 -O1 和 -O2 快。但是,我知道 -O2 是最快的,然后是 -O1、-O3、-Os、-O0。那是平常的吗? (计算时间约为 30 秒)。

最佳答案

请注意 GCC 许多其他 optimization flags .

不能保证-O3-O2 给出更快的代码;编译器可以应用更多的优化过程,但它们都是启发式的,可能不会成功(甚至会稍微减慢您的特定代码)。因此,-O3 确实会给出一些比 -O2 稍慢的代码(在某些特定输入源代码上)。

您可以尝试更新版本的 GCC(2017 年 11 月的最新版本是 GCC 7,GCC 8 将在几个月后推出)。你也可以试试 better -march=-mtune= 选项。

最后,有了你的 GCC plugin ,您可以添加您自己的优化过程,或更改应用的优化过程的顺序(和集合)(GCC 中有数百种不同的优化过程)。但是您需要大量工作(可能一两年)才能扩展 GCC。

您可以调整优化参数,一些项目 (MILEPOST) 甚至使用机器学习技术来改进它们。

另请参阅我的(旧)GCC MELT documentation 上的幻灯片和引用资料.

关于c++ - 优化执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47440118/

相关文章:

java - 使用变量进行输入处理的性能?

c++ - 模板函数调用的ifstream或ofstream类型

c++ - Doxygen:剥离顶级命名空间

arrays - 删除数组元素的最快方法是什么?

c++ - 为什么 __builtin_popcount 比我自己的位计数函数慢?

c - 生成函数调用图

javascript - 如何避免这个很长的 if else 语句

c++ - Boost 或标准库是否提供了一种方法来检查转换是否无损?

c++ - 在预处理器条件中使用 bool 文字是否有效?

c++ - gcc 4.8 或更早版本是否存在关于正则表达式的问题?