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:
Skicka en kommentar