torsdag 10 januari 2008

Optimera kod

Den här pdf-filen innehåller mycket intressanta tips om hur optimering av kod kan gå till. Exempel på vad som är snabbt och långsamt att göra på de vanligaste processorerna gås igenom.
Rekommenderas till nyfikna programmerare!

http://www.agner.org/optimize/optimizing_cpp.pdf

Uppdatering:
trots att jag faktiskt läst igenom filen ovan så missade jag en ganska lätt grej:
Koden nedan ska leta efter den första positiva nollgenomgången i vektorn x.

Originalkoden ser ut så här:

const size_t N=x.size();
size_t Ihigh=0;//index of right point
size_t Ilow=0; //index of left point
for(size_t i=1;i<n;++i) {
if(x(i-1)<=0.0 && x(i)>0.0) {
Ihigh=i;
continue;
} //end if
} //end for


Jag vet att x nästan alltid är negativ i början och positiv på slutet. Därför kommer första villkoret i nästan alltid vara sann och andra villkoret måste också evalueras.
En bättre lösning är alltså att byta ordning på testen så att det första testet är falskt oftast.

const size_t N=x.size();
size_t Ihigh=0;//index of right point
size_t Ilow=0; //index of left point
for(size_t i=1;i<n;++i) {
if(x(i)>0.0 && x(i-1)<=0.0) { //<---här är ändringen
Ihigh=i;
continue;
} //end if
} //end for

2 kommentarer:

Anonym sa...

Hej!

Även om det bara tar ett par sekunder att arbeta runt felet, så tänkte jag ändå tipsa om att länken är trasig. Kanske har du glömt ett "http://" ?

mvh
Christian

Paul Dreik sa...

tack, fixat!
hoppas du tyckte det var ett bra lästips.
paul