优化的执行时间

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


是的,这是平常的。 以-Ox优化为指导。 平均而言,它们会产生广告优化,但很大程度上取决于编写代码的风格,内存布局以及编译器本身。 有时,在获得最佳代码之前,您需要尝试失败很多次。 在大多数情况下,-O2确实提供了最佳的优化。


请注意,GCC有许多其他优化标志。

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

您可以尝试更新版本的GCC(最新版本 - 2017年11月 - 是GCC 7,GCC 8将在几个月内发布)。 你也可以尝试一些更好的-march=-mtune=选项。

最后,使用GCC插件,您可以添加自己的优化传递,或更改应用优化传递的顺序(和集合)(GCC中有数百个不同的优化传递)。 但是,为了能够扩展GCC,您需要很多工作(可能需要一年或两年)。

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

另请参阅我的(旧)GCC MELT文档上的幻灯片和参考资料。

链接地址: http://www.djcxy.com/p/40881.html

上一篇: Optimized Execution Time

下一篇: Recursive usage of @Retention annotation , how is it possible?