Ohjelman optimointi

Ohjelman optimointi on tietotekniikassa joukko menetelmiä, joilla ohjelmakoodin suoritusta tehostetaan. Tapauksesta riippuen optimointia voidaan tehdä esimerkiksi muistimäärän käytön, virran käytön tai suoritusajan suhteen. Optimointia voidaan tehdä kääntäjän asetuksilla ja itse ohjelmakoodin muokkaamisella. Tärkeysjärjestyksessä ensimmäisenä on aina ohjelman oikea ja luotettava toiminta, mutta on useita tilanteita joissa optimointia voidaan tarvita.[1]

Optimoinnin apuna voidaan käyttää profilointia "kuumien kohtien" (engl. hot spot) havaitsemiseen.

Kevyimmällä tasolla optimointi voi tarkoittaa selkeää ja yksinkertaista toteutusta ja syvemmällä tasolla toteutusmenetelmien muuttamista.[1]

Ohjelmakoodin lisäksi tietorakenteita muuttamalla voidaan parantaa ohjelman suoritusta: kielestä riippuen ongelmakohtia voivat olla monimutkaiset varaukset yksinkertaisille rakenteille tai useita välituloksia suorituksen aikana.[2] Muistiarkkitehtuurit kuten NUMA voivat vaatia erityistä suunnittelua.[3]

Esimerkkitapaus muokkaa

void twiddle1(int *xp, int *yp)
{
    *xp += *yp;
    *xp += *yp;
}

void twiddle2(int *xp, int *yp)
{
    *xp += 2* *yp;
}

Esimerkkitapauksessa on kaksi vaihtoehtoa, joissa muuttujan arvo lisätään kahdesti toiseen muuttujaan. Jälkimmäinen voi vaatia vähemmän muistioperaatioita, mutta mikäli osoittimetxp ja yp osoittavat samaan muistipaikkaan jälkimmäinen voi antaa virheellisen tuloksen.

Katso myös muokkaa

Lähteet muokkaa

  1. a b Paul Hsieh: Programming Optimization azillionmonkeys.com. Viitattu 31.3.2018.
  2. Optimizing Data Structures in High-Level Programs arsenalfc.stanford.edu. Viitattu 31.3.2018. [vanhentunut linkki]
  3. Performance optimization of data structures using memory access characterization ashay.rane.info. Arkistoitu 31.3.2018. Viitattu 31.3.2018.

Kirjallisuutta muokkaa

  • Bryant, Randal E. & O'Hallaron, David R.: Computer Systems: A Programmer's Perspective. Pearson. ISBN 978-0134092669.