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

Szilard Cs. cs.szilard.linux at freemail.hu
2009. Aug. 30., V, 11:03:50 CEST


Szia, Sziasztok!

> A segítségeteket szeretném kérni, hogy egy nagy számítás igényű
> programnál milyen JVM paramétereket ajánlotok? Vázolom miről van szó.

  Röviden: ahogy a többiek is írták, szerintem is érdemes
megpróbálni optimalizálni a kódot is, és nem csak a futtatási
paramétereket állítani.


  Hosszabban:
  Pár hónapja részt vettem egy programozói versenyben, ahol egy
számításigényes feladatra kellett minél gyorsabb megoldást írni.

  Több ötlet is volt, amivel a győztesek nyertek (kb. hasznossági
sorrendben) :
 * Optimalizálták a megoldást algoritmuselméleti szempontból 
(átgondolták, hogy lehetőleg semmit se számoljon kétszer a program). Ez
nagyságrendileg _kb._ 50-szeres gyorsulást adott. (Ez erősen
feladattól függ. Nem tudom, nálad mennyit hozhat.)
 * Ahol lehetett, tömb helyett változót használtak, mert a
tömbelérés plusz időt igényel. (10 alatti, de talán 2 alatti gyorsítás.)
 * Elérték, hogy egy időben/ciklusban egyszerre csak ,,kevés'' adattal
foglalkozzon a processzor. (Nagyságrandileg kb.: 500 változó helyett
csak 50-nel(?)) Ez valószínűleg azért gyorsított, mert nem kellett
gyakran a következő szintű memóriacache-hez nyúlnia a processzornak. Ezt
akár a humán átláthatóság rovására is tették. (10 alatti, de talán 2
alatti gyorsítás.)
 * Számításelméleti megfontolások (páros számok összege és különbsége
csak páros lehet, stb.), amikkel nem fárasztanálak.
 * stb.

  A fordító- és tesztrendszer egységes volt, ezért a kapcsolók állítása
nem került terítékre.
  Úgy tűnt, hogy az optimalizálásba fektetett munkaidő az elején
jobban, majd egyre kevésbé térül meg: a programok sebessége
a befektetett idővel aszimptotikusan közelített egy határhoz.
  A leggyorsabb megoldásnak kb. 100-ad annyi időre volt szüksége, mint
a ,,naív'' megoldásnak.


  Volt egyszer egy egyetemi verseny is. (Az nem Java volt.) Ott olyan
lett a feladat, hogy _szigorúan_ algoritmikus szempontból nem lehetett
optimalizálni a megoldást. A leggyorsabb megoldás egy tök tömör kód
volt, s ez kb. 10-szer olyan gyorsan futott, mint a leglassabb.


Szilárd



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