Loop speedup
Gregor Berginc
gregor.berginc at guest.arnes.si
Wed Jul 28 13:15:05 CEST 2004
Zivjo,
Od vceraj popoldne se ze matram s pohitritvijo enga dela
predprocesirnega algoritma. Spodnja rutina naj bi izracunala evklidsko
razdaljo med dvema vektorjema:
----------------------------
double FeatureDistance::euclideanDistance(Feature *_f1, Feature *_f2) {
int fSize = _f1->getSize();
int *f1Value = _f1->getValue();
int *f2Value = _f2->getValue();
long dist = 0;
for (long i = 0, tmp = 0; i < fSize; i++) {
int d = (*f1Value) - (*f2Value);
dist += d * d; /**** tole je problem *****/
f1Value++;
f2Value++;
} // for
return sqrt(dist);
} // euclideanDistance
----------------------------
Problem je, da je v tej izvedbi blazno pocasna. Gre namrec za to, da se
ta rutina poklice ogromnokrat, zato je vsaka pohitritev bistvenega
pomena. Se najbolj me jezi, da ce namesto dist v problematicni vrstici
uporabim tmp (definiran na zacetku for zanke) stvar pade skoz: namesto
25s porabi 2.75s.
Zato me zanima, ce kdo izmed vas ve, kako bi spravil tmp ven (if v zanki
seveda ne pride v postev).
lp,
Grega
p.s. Kaj bi sedaj dal za MS compiler, ki je imel tist "feature", da je
spremenljivke definirane v for headerju pustil tudi kasneje :)
More information about the lugos-prog
mailing list