[Java lista] számítási teljesítmény

Varjasi Norbert varjasin at sze.hu
2009. Aug. 29., Szo, 21:36:04 CEST


Szia!
Ahogy az előttem szóló is mondta, egy párhuzamosítás sokat javíthat.

Másrészt, ha nem akar a fordító kioptimizálni egy kódot, akkor kézzel
kell: az összes olyan számítást, ami a belső ciklusban felhasznál egy
olyan értéket, amely már a külsőben számítható, érdemes kitenni temp
változókba.
Persze ez növeli a memóriafoglalást, meg nem lesz olyan tiszta OO, de
nagy ciklusoknál sokat számíthat! Gondolom a képleteid jó hosszúak és
kellően összetettek. Próbáld meg így. Főleg az idézett függvények
zabálják meg rendesen a processzort (sqrt, pow ...).

Ugyanígy ha a külső ciklus tömbös objektumait indexeled a belső
ciklusban, vagy a lista elemeket get-tel éred el, ezeket is célszerű
előtte egy segédobjektumokba másolni. Összetett szerkezetek esetén a
javac nem mindig optimalizálja ezeket ki.
Itt azzal lehet hatékonyságot növelni, hogy lehetőleg minden egyes
bonyolultabb változót egyszer kell elérni és számítani. Ha sok a
felesleges számítás, akkor az nagyon megnövelheti a számítási igényt.
(Mármint ha ugyanazt sokszor kell kiszámítani)

 üdv: VN.


Maglódszki Viktor írta:

> Ez alapból úgy néz ki hogy egyetlen futás is: 120x megy végig egy 1000x
> elemű listán.
> Tehát egy külső ciklus 1-120 megpörget egy benne lévőt 1-1000x mind a
> ciklusban vannak más-más számolások. Majd a végén ebből állítja elő a
> statisztikákat.
> Na most ez (tehát a 120x1000) futás jelenleg egy adott gépen 8másodperc
> alatt zajlik le.
> A probléma azzal van hogy ezt 10.000 kéne lefuttatni :)
> Az egy picit sokáig tart.
> 
> Mit javasoltok?
> Jelenleg számolásokhoz (pow,sqrt,log) függvényeket a math osztályokból
> használok.
> Eredmények tárolására van néhány Map ezeket hashmap implementációk.
> Listákhoz egyetlen helyen használok LinkedList-et a többi ArrayList.
> Körülbelül 6-8 ilyen objektum van benne amiket a számolás során bejár és
> abból vett eredményekből kalkulál.
> 
> Mindenféle ötlet érdekelne és ki is tesztelném vele a futást.



További információk a(z) Javalist levelezőlistáról