Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Optimointi: taulukko vai useampi muuttuja?

panttu [25.07.2006 20:44:02]

#

Onko npopeus eroa tallentaako esim. 3x3 matriisin taulukkoon, jossa on yhdeksän solua putkeen tai 3 solua ja kussakin 3 lisää vai tekisi kaikista soluista muuttujia tyylii s11,s12,s13,s21,s22,s23,s31,s32 ja s33.

Eli koodi jossa tuota käytetään on jotain tälläistä

float[][] t1 = float[3][3];
return t[0][0]*t[1][1]*t[2][2] ...

float[] t2 = float[9];
return t[0]*t[4]*t[8]...;

float s11,s12,s13,s21,s22,s23,s31,s32, s33;
return s11*s22*s33...;

Tein omia testejä tuosta ja aavistuksen saattaisi olla tuo viimmeinen nopeampi, mutta yleinen hajonta oli kuitenkin samaa luokkaa. Tutkin joitakin "optimoituja" c-koodeja joissa myös käytettiin viimmeistä jonkin verran.

Blaze [25.07.2006 21:39:51]

#

Vaikka noilla nyt joku marginaalinen ero oiskin, on taulukon käyttömukavuus niin paljo suurempi, ettei tuollaisiin virityksiin kannata alkaa.

Metabolix [25.07.2006 22:10:26]

#

Varmasti se marginaalinen erokin on hyvin paljon kiinni kääntäjän kyvyistä. Jos taulukko on määritelty juuri tuon kokoiseksi, kääntäjä osannee optimoida koodin jotakuinkin samaksi kuin irtomuuttujilla. Itse todennäköisesti päädyn käyttämään 3x3-matriisin tallentamiseen kolmea vektoria, koska kyseinen esitysmuoto sattuu helpottamaan käyttöä tiettyihin tarkoituksiin.

Heikki [26.07.2006 17:01:15]

#

Taulukoita käytettäessä mutuilisin, että nopeuseroa tulee muuttujiin suunnilleen yhden kertolaskun verran tai ei lainkaan, mutta se on niin mitätön että ei ole mitään syytä käyttää erillisiä muuttujia.

FooBat [27.07.2006 22:09:34]

#

Taulukoita käyttäessä kääntäjä mitä todennäköisimmin luo STORE eli muistitallennus-käskyjä, kun taulukkoon sijoittaa arvoja. Erillisillä muuttujilla sen sijaan saatetaan pärjätä sillä, että muuttujat pysyvät jatkuvasti rekistereissä (olettaen, että alkioita on tarpeeksi vähän) eikä hitaita muistitallennuksi tai -latauksi tarvita. Tällä saattaa tietyissä tapauksissa olla merkittävä nopeusero.

Aika harvoin tulee kuitenkaan eteen oikeita tilanteita, joissa optimointi olisi oikeasti niin tärkeää, että koodin siisteydestä kannattaisi tinkiä nopeuden takia.

Merri [27.07.2006 23:53:15]

#

Toisaalta kieltenkin eroja täytyy ottaa huomioon. VB6:ssa on hieman ikävästi, että moniulotteiset taulukot ovat huomattavasti hitaampia kuin yksiulotteiset. Lisäksi nollapohjaiset taulukot ovat (ymmärrettävästikin) nopeampia kuin muihin lukuihin pohjautuvat taulukot. Eroa on niin paljon, että jos kyse on esimerkiksi grafiikan käsittelystä, on nollapohjaisen yksiulotteisen taulukon käyttö ainoa vaihtoehto, varsinkin jos tietoa käsitellään esim. koko ruudun kokoisella alalla.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta