复杂方程的C ++编译器优化

时间:2014-09-22 17:40:49

标签: c++

我有一些涉及多个操作的方程式,我希望尽快运行。由于c ++编译器将其分解为机器代码,无论如何,如果我将其分解为多行(如

)都很重要
A=4*B+4*C;
D=3*E/F;
G=A*D;

VS

G=12*E*(B+C)/F;

我的需求比这更复杂,但我认为它传达了这个想法。此外,如果这是一个被调用的函数是在一个循环中,定义双A,D是否花费CPU时间与将其作为类变量放入?

2 个答案:

答案 0 :(得分:1)

使用现代编译器,Clang / Gcc / VC ++ / Intel,它并不重要,您应该做的最好的事情是担心代码的可读性并启用优化,编译器设计人员非常清楚问题像这些并设计他们的编译器(在大多数情况下)优化根据。

如果我要说哪个会慢一些我会假设第一种方式,因为会有3个mov指令,我可能是错的。但这不是你应该担心的事情。

答案 1 :(得分:0)

如果这些变量是整数,则第二个代码片段不是第一个的有效优化。对于B=1C=1E=1F=6,您有:

A=4*B+4*C; // 8
D=3*E/F; // 0
G=A*D; // 0

G=12*E*(B+C)/F; // 4

如果浮点,那么它真的取决于什么编译器,什么编译器选项,以及你有什么CPU。