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.

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

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

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

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.

Katso myös 
 Ershovin numero
 Amdahlin laki
 Asymptoottinen suoritusaika

Lähteet

Kirjallisuutta