Regruparea calculelor este o modalitate de a reduce numărul ciclurilor mașină. În secvența:
s1=0;
for(i=0;i <n; i++) s1+=x[i];
s2=0;
for(i=0;i <n; i++) s2+=x[i]*x[i];
s3=0;
for(i=0;i <n; i++) s3+=x[i]*x[i]+x[i];
sxy=0;
for(i=0;i <n; i++) sxy+=x[i]*y[i];
prin regruparea intr-o singura structura repetitiva, devine:
s1=0;
s2=0;
s3=0;
sxy=0;
for(i=0;i <n; i++)
{
s1+=x[i];
s2+=x[i]*x[i];
s3+=x[i]*x[i]+x[i];
sxy+=x[i]*y[i];
}
Dacă numărul de cicluri variază se vor găsi modalități de a face ceea ce trebuie și de a rezolva problema.
Dacă se consideră secvența:
s1=0;
for(i=0;i <n; i++) s1+=x[i];
s2=0;
for(i=0;i <m; i++) s2+=x[i]*x[i];
și dacă m= n+2, atunci sevența inițială prin optimizare devine;
s1=0;
s2=0;
for(i=0;i <n; i++)
{
s1+=x[i];
s2+=x[i]*x[i];
}
s2+=x[n]*x[n] + x[n+1]*x[n+1] ;
și se vede că se țin sub control numărul de repetări ale instrucțiunii for() care apare o singură dată, ceea ce la o analiză atentă este un lucru benefic. Regruparea de calcule presupune ca secvențele să fie independente între ele, ceea ce se întâlnește destul de des în programe.
s1=0;
for(i=0;i <n; i++) s1+=x[i];
s2=0;
for(i=0;i <n; i++) s2+=x[i]*x[i];
s3=0;
for(i=0;i <n; i++) s3+=x[i]*x[i]+x[i];
sxy=0;
for(i=0;i <n; i++) sxy+=x[i]*y[i];
prin regruparea intr-o singura structura repetitiva, devine:
s1=0;
s2=0;
s3=0;
sxy=0;
for(i=0;i <n; i++)
{
s1+=x[i];
s2+=x[i]*x[i];
s3+=x[i]*x[i]+x[i];
sxy+=x[i]*y[i];
}
Dacă numărul de cicluri variază se vor găsi modalități de a face ceea ce trebuie și de a rezolva problema.
Dacă se consideră secvența:
s1=0;
for(i=0;i <n; i++) s1+=x[i];
s2=0;
for(i=0;i <m; i++) s2+=x[i]*x[i];
și dacă m= n+2, atunci sevența inițială prin optimizare devine;
s1=0;
s2=0;
for(i=0;i <n; i++)
{
s1+=x[i];
s2+=x[i]*x[i];
}
s2+=x[n]*x[n] + x[n+1]*x[n+1] ;
și se vede că se țin sub control numărul de repetări ale instrucțiunii for() care apare o singură dată, ceea ce la o analiză atentă este un lucru benefic. Regruparea de calcule presupune ca secvențele să fie independente între ele, ceea ce se întâlnește destul de des în programe.
(023 decembrie 2017)


