Согласно старому слайду о 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
выполнить такую оптимизацию?