[LUGOS-PROG] Loop speedup

Anze anze at volja.net
Wed Jul 28 16:49:45 CEST 2004


Zivjo!

Ali lahko cache-iras rezultate? Jih spravis v eno ogromno tabelo, 
potem pa delas samo lookup? Glede na to, da delas z int-i, bi to moralo biti 
izvedljivo. Je pa seveda odvisno od tega, kje ta stvar tece in kolikokrat se 
iste razdalje ponavljajo... Pa glede na to, da se nisi omejil na samo 2 ali 3 
razsezni prostor, bi znala biti tabela RES ogromna. ;) Da prihranis na 
prostoru in casu za racunanje tabele, jo lahko skonstruiras tako, da entriji 
kazejo na iste vrednosti - namrec razdalja '2-3-3-4' je enaka razdalji 
'3-2-4-3'. 

LP!

Anze


On Wednesday 28 July 2004 13:15, you 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