Как наложить интеллектуальное обобщение на gcc для повторного использования вычислений - PullRequest
0 голосов
/ 23 сентября 2018

Согласно старому слайду о 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, выполняющего такую ​​оптимизацию.

(еще хуже эти два примера A и B )

Как заставить gcc выполнить такую ​​оптимизацию?

...