X
Loading...
Ei hakutuloksia
Sisältö
Henkilöt
{ page.post_title }
{ page.titteli }
{ page.sahkoposti }
{ page.puhelinnumero }

Ohjelmien optimointi

Viime blogissani kerroin tietokoneiden rajoittuneisuudesta Apollo-ohjelmien aikaan, 1960-luvulla. Rajallinen teho ei näissä vuosikymmenissä ole mihinkään poistunut, vaikka laskentakapasiteetti on tullut todella paljon suuremmaksi. Totuus on, että tänäkin päivänä rajat tulevat vastaan, jos käsiteltäviä materiaaleja on todella paljon. Asiakkaat ja käyttäjät eivät halua odottaa kauaa, että ohjelma saa annetun tehtävän valmiiksi.

Käsiteltävän tiedon määrä on kasvanut valtavasti. Kun puhutaan suurista tietomääristä, sillä on merkitystä kestääkö yksittäinen toimenpide yhden vai tuhannesosasekunnin. Näinkin pienet erot aiheuttavat valtavia suorituskykyeroja, jotka ovat tulleet minullekin selvästi eteen ohjelmoinnissa. Onneksi on mahdollista tehdä näille asioille jotakin optimoimalla.

Optimoinnissa on tärkeää löytää ensin se kohta koodissa, mikä aiheuttaa pullonkaulan. Itse olen huomannut tehokkaaksi tavaksi poiskommentoida koodia pala kerrallaan, kunnes syyllinen lopulta löytyy. Se voi löytyä välillä yllättävästäkin paikasta.

Sen jälkeen, kun ongelman aiheuttaja on löydetty, voidaan miettiä sen ratkaisuja. Nopeuden parantamiseen on useitakin keinoja. Nykyään yleistyneet moniydinprosessorit tarjoavat yhdeksi ratkaisuksi säikeistystä, jolloin suoritetaan rinnakkain useita asioita. Algoritmien uudelleen ohjelmoiminen, vähentämällä silmukoiden määrää, on myös yksi hyvä keino. Lisäksi voidaan tarkastella, mitä asioita silmukassa käsitellään. Esimerkiksi jos taulukkoa läpikäyvässä silmukassa lasketaan joka ainoa kerta taulukon koko, tehdään turhaa työtä, jos taulukon koko ei muutu silmukan suorituksen aikana. Järkevämpää olisi laskea taulukon koko valmiiksi ennen silmukkaan tuloa.

Joskus törmätään siihenkin tilanteeseen, että on tasapainoteltava esimerkiksi nopeuden ja jonkun muun rajallisen resurssin, kuten vaikka muistin määrän kanssa. Silloin on päätettävä, kumpi on olennaisempi juttu, huomioiden kuitenkin myös toisen resurssin rajallisuus.

On toki olemassa ohjelmointiongelmia, joihin ei löydy suoraan tehokasta ratkaisua. Tästä esimerkkinä on vaikkapa kuuluisa kauppamatkustajan ongelma: Kierrä kaikkien kartalla olevien kaupunkien kautta lyhintä mahdollista reittiä pitkin. Sitä ei tehokkainkaan tietokone pysty ratkaisemaan täydellisesti, mutta onneksi tyypillisimpiin tilanteisiin on olemassa useita mahdollisia ratkaisuja. Näin saadaan ohjelmaa vietyä optimaalisempaan suuntaan.

Antto Hautamäki

KIRJOITTANUT

Antto Hautamäki

Software Designer

Antto Hautamäki suorittaa parhaillaan Eatechissa työharjoittelua ohjelmistokehityksen parissa. Hän on innokas partiolainen sekä penkkiurheilija. Motto: ”Kun matemaattisetkin mahdollisuudet ovat vielä olemassa, niin silloin ei luovuteta!”

Antto Hautamäki