如何对GCC施加预测性通用性以执行计算重用

时间:2018-09-23 06:29:05

标签: c gcc compiler-optimization

根据old slide关于predictive commoning的说法,可以这样说

test1.cpp

for(int i=0; i < n; i++)
    f[i]= a[i]*exp(i+1)+a[i+1]*exp(i+2);

等同于

test2.cpp

double p0=a[0]*exp(1);
int i;
for (i=0; i < n-n%2; i+=2)
{
    double p1=a[i+1]*exp(i+2);
    f[i] = p0+p1;
    p0=a[i+2]*exp(i+3);
    f[i+1] = p1+p0;
}
for (; i < n; i++)
    f[i] = a[i]*exp(i+1)+a[i+1]*exp(i+2);

除了第二个代码更优化(Benchmark)。

我已经以最高的优化级别gcc测试了-O3,但是我看不到gcc执行这种优化。

(更糟糕的是,这两个示例AB

如何强制gcc进行这种优化?

1 个答案:

答案 0 :(得分:0)

我还没有找到打开setSelectedDelivery的任何优化级别的位置。看来您必须手动将其打开。