>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

