[LUGOS-PROG] Loop speedup

Ivo List ivo.list at guest.arnes.si
Wed Jul 28 13:21:09 CEST 2004


A si probal kaj v smislu:
register long dist = 0;

Predvidevam, da kar se je zgodilo je, da je compiler tvojemu tmpju
dolocil register, distu pa ne.

Ce znas kaj assemblerja je najbolje, ce si pogledas v kaksno kodo se
stvar prevede oz. se bolje da kar v asmju vse napises ;)

Lp, Ivo

On Wed, 2004-07-28 at 13:15, Gregor Berginc wrote:
> 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