[LUGOS-PROG] Loop speedup

Anze anze at volja.net
Thu Jul 29 11:27:11 CEST 2004


Zivjo!

OK, kaj pa lookup kvadratov od spremenljivke d?
Govorim o tem:

  dist += d * d;   /**** tole je problem *****/

Spremenis v:
  dist += kvadrati[d];   /**** tole ni vec problem *****/

Verjetno bo lookup hitrejsi od mnozenja... Potem pa seveda se vse ostale 
optimizacije. 

Lahko pa (ce problem to dopusca) tudi razbijes program na vzporedne procese, 
ki tecejo na razlicnih masinah... ;)

LP!

Anze

On Wednesday 28 July 2004 19:23, you wrote:
> Na zalost govorim o 128 razseznem prostoru :) Gre namrec za obdelavo
> slikvonih znacilk, ki jih pridobim z nekim drugim programom.
>
> Mislim, da lookup tukaj nikakor ne pride v postev.
>
> lp,
> Grega
>
> Anze wrote:
> > 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