我有一个表达式涉及REAL
:
xf=w1*x1 + w2*x2 + w3*x3 + w1*y1 + w2*y2 + w3*y3
我想知道(英特尔 Fortran)编译器是否将其优化为:
xf=w1*(x1+y1) + w2*(x2+y2) + w3*(x3+y3)
如何查看为此表达式生成的表达式树?
我有一个表达式涉及REAL
:
xf=w1*x1 + w2*x2 + w3*x3 + w1*y1 + w2*y2 + w3*y3
我想知道(英特尔 Fortran)编译器是否将其优化为:
xf=w1*(x1+y1) + w2*(x2+y2) + w3*(x3+y3)
如何查看为此表达式生成的表达式树?
您的标准公共子表达式方案不会执行上述转换,并且某些语言会将转换视为非法,因为它可能会导致不同的副作用。
但高性能 FORTRAN 编译器(可能不包括英特尔 FORTRAN)可能会做到这一点。
如何查看为此表达式生成的表达式树?
如果您的编译器具有在给定优化阶段后显示树的选项,则可以使用该选项。要确定是否是这种情况,请查阅编译器的优化。
如果您的编译器没有这样的选项,您将无法看到编译器在运行期间生成了哪些树(或其他内部表示)。在这种情况下,您最好的选择是简单地查看生成的程序集以查看将执行哪些算术运算。