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
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.
Lähteet
- Paul Hsieh: Programming Optimization azillionmonkeys.com. Viitattu 31.3.2018.
- Optimizing Data Structures in High-Level Programs arsenalfc.stanford.edu. Viitattu 31.3.2018. [vanhentunut linkki]
- Performance optimization of data structures using memory access characterization ashay.rane.info. Arkistoitu 31.3.2018. Viitattu 31.3.2018.
Kirjallisuutta
- Bryant, Randal E. & O'Hallaron, David R.: Computer Systems: A Programmer's Perspective. Pearson. ISBN 978-0134092669.