我有一个涉及
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)可能会做到这一点。
如何查看为此表达式生成的表达式树?
如果您的编译器有一个选项可以在给定的优化阶段后显示树,您可以使用该选项。要了解是否是这种情况,请咨询编译器的优化。
如果您的编译器没有这样的选项,您将无法看到编译器在运行期间生成的树(或其他内部表示)。在这种情况下,最好的选择就是简单地查看生成的程序集,看看将执行哪些算术运算。