我有一个程序,在没有任何选项的情况下,使用g++编译时,运行时间大约为1分钟。然而,使用-O3编译可以让它在大约1-2秒内运行。
我的问题是,有这么大的速度是正常的吗?或者我的代码可能很糟糕,优化可能会占用那么多时间。显然,我知道我的代码并不完美,但由于这种巨大的加速,我开始认为它比我想象的更糟糕。请告诉我什么是“正常”的加速量(如果是这样的话),以及太多的加速是否意味着糟糕的代码可以(也应该)轻松地手工优化,而不是依赖于编译器。
发布于 2020-03-31 21:43:54
在开启优化的情况下,C++代码的“预期”速度应该有多快?
理论上:不一定要有速度上的差异。速度差也不存在任何上限。C++语言根本没有指定优化和缺少优化之间的区别。
在实践中:视情况而定。一些程序可以从优化中获得比其他程序更多的好处。有些行为比其他行为更容易证明。一些优化甚至会使程序变慢,因为编译器无法知道运行时可能发生的一切。
... 1分钟...优化使其在大约1-2秒内运行。
我的问题是,有这么大的速度是正常的吗?
这是完全正常的。您不能假设您总是会得到同样多的改进,但这并不是不寻常的。
或者是我的代码可能很糟糕,优化可能会占用那么多时间。
如果程序在优化时速度很快,那么它就是一个快速程序。如果程序在没有优化的情况下很慢,我们并不关心,因为我们可以启用优化。通常,只有优化后的速度才是相关的。
更快比更慢更好,尽管这不是衡量程序的唯一重要指标。可读性,可维护性,尤其是正确性更重要。
请告诉我..。是否..。代码... 可以 ...成为..。手工优化,而不是依赖于编译器。
一切都可以手工优化,至少如果你用汇编语言编写程序的话。
...或者应该 ...
不是的。没有理由浪费时间去做编译器已经为你做的事情。
有时有理由手动优化一些已经被编译器优化得很好的东西。相对的加速并不是这些原因之一。一个有效原因的例子是,当涉及实时需求(无论是硬的还是软的)时,未优化的构建可能太慢而无法执行调试目的。
https://stackoverflow.com/questions/60951870
复制相似问题