[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