tisdag 8 april 2008

Beräkning av medelvärde i vektor

Den här funktionen beräknar medelvärdet av talen i en vektor.
Jag får den bara att gå i ca 0.7 element per klockcykel, mätt på en miljon anrop med en 100 element lång vektor. (optimeringsnivå -O3, gcc 4.2.3, Intel core 2 quad)
Någon som vet något sätt att få koden snabbare? Eller är det här den prestanda man kan förvänta sig?


int
AverageLU(const std::vector<double>& x,

double
& result) {
result=0.0;

const
size_t N=x.size();

if
(0==N) {
return
-1;
}



size_t i=0;
double
r0=0.0;
double
r1=0.0;

double
r2=0.0;
double
r3=0.0;
if
(N>=4) {

//how many full groups of 4 do we have?
const size_t N4=(N/4-1)*4;
for
(i=0; i<N4; i+=4) {
r0+=x[i ];

r1+=x[i+1];
r2+=x[i+2];

r3+=x[i+3];
}
}

for
(; i<N; ++i) {

r0+=x[i];
}


result=(r0+r1+r2+r3)/double(N);

return
0;
}

Inga kommentarer: