>avendo una macchina con problemi di carico CPU ma non di memoria è meglio 
>usare:
>
>float m[16],mn;
>…
>m[0]=m[1];m[1]=m[2];m[2]=m[3];m[3]=m[4];m[4]=m[5];m[5]=m[6];m[6]=m[7];m[7]=m[8];m[8]=mn;
>e poi
>m[9]=m[8]-m[3]+m[7]-m[2]+m[6]-m[1]+m[5]-m[0])/4+m[8];
>
>oppure usare un array circolare
>m[i&0xf]=m[(i-5)&0xf]-m[(i-6)&0xf] ... e così via con una sola riga )i 1e 
>la iterazione, ogni 15 secondi)

Ci provo.

Nel primo caso fai in più 16 accessi in memoria.

Nel secondo caso fai in più otto sottrazioni e otto And nei registri.

Mi aspetto che una sottrazione e un And nei registri costino meno che due 
accessi in memoria.  Ma stiamo andando a cercare il pelo nell'uovo, per essere 
sicuri che sia veramente così bisogna provare e misurare i tempi, che saranno 
molto vicini (immagino decine microsecondi se la memoria è Ram e il contenuto 
non è in cache).  Se l'operazione è fatta ogni 15s può avere senso porsi il 
problema solo se stiamo parlando di un interrupt driver in un sistema con 
vincoli di tempo reale molto stretti.

-- fp

  • Ottimizzazione Leonardo Boselli
    • Re: Ottimizzazione Francesco Potortì

Rispondere a