Kasvava suorituskyky on vuosikymmenet tarkoittanut korkeampaa kellotaajuutta ja suurempaa peräkkäisten käskyjen määrää sekunnissa. Kiihtyvät kierrokset vaihtuvat nyt rinnakkaisuuteen, jossa prosessoriin mahdutetaan useampi samanaikaisesti työskentelevä ydin.
Kun prosessorin työtehoa kasvatetaan lisäämällä ytimiä eikä kellotaajuutta, perinteiset sovellukset eivät nopeudu. Ne tekevät peräkkäisiä laskutoimituksiaan yhdessä ytimessä muiden jäädessä hukkatehoksi. Täyden tehon saa irti vain pilkkomalla sovelluksen säikeiksi, jotka ajetaan eri ytimissä.
Perinteiset sovellukset eivät saa lisäpotkua uusista prosessoreista.
Rinnakkaisuus on vaikeaa. Kun asiat tapahtuvat samanaikaisesti, monet lainalaisuudet eivät enää päde. Kehittäjä ei esimerkiksi voi olla varma, ettei toinen säie muuta muistissa olevaa tietoa kahden käskyn välillä.
Erilaiset tarkistukset ja muistilukot helpottavat rinnakkaisuuden ongelmia. Tästä seuraa kuitenkin uudenlaisia vaivoja esimerkiksi tilanteessa, jossa kaksi säiettä lukitsee tarvitsemansa resurssit, ja kumpikin jää odottamaan toisen resurssien vapautumista.
Tarkistukset ja lukot syövät tehoa, ja heikosti koodatut säikeet voivatkin olla pahimmassa tapauksessa yksisäikeisyyttä hitaampi ratkaisu. Lisäksi suorituskyky ei kaksinkertaistu ydinten määrän kaksinkertaistuessa, vaan osa tehosta menee tarkistuksiin ja sovelluksen sarjallisiin osiin.
Maagista teknologiaratkaisua rinnakkaisuuteen ei ole. Sovelluksen pilkkominen samanaikaisiksi tehtäviksi jää kehittäjän harteille, siihen ei pysty väline tai kääntäjä. Ei myöskään ole nähtävissä, että moniytimisyys jäisi vain tilapäiseksi vaiheeksi.
Säikeiden luominen käsityönä vaatii laitetason ymmärrystä, jota voi verrata Assembler-ohjelmoimiseen. Markkinoilla onkin kirjastoja kuten Intelin Threading Building Blocks, jotka helpottavat säikeiden käsittelyä. Nämä vaativat kehittäjältä silti alhaisen tason tuntemusta.
Saattaisi tuntua helpolta jakaa sovellus kahteen selkeästi erilliseen osaan, ja näin tehdäänkin esimerkiksi monissa peleissä. Tästä ei kuitenkaan ole hyötyä kun ytimiä on neljä, kahdeksan tai enemmänkin.
Ihannetilanteessa kehittäjä voisi vain kuvailla sovelluksen kasana tehtäviä, joille luodaan automaattisesti säikeitä tarpeen mukaan. Tällaisia välineitä ei vielä ole, mutta sekä Microsoft että Eclipse kehittävät omiaan lähivuosiksi.
Ohjelmointiala on ristiriitaisessa vaiheessa: moniytimisyys on todellisuutta työpöydillä tänään, mutta koodi on jäljessä. Jupitermedian mukaan alle 40% kehittäjistä sanoo hyödyntävänsä useampaa ydintä, ja monet näistä eivät sitä tosiasiassa hallitse.
Siirtyminen sarjallisuudesta rinnakkaisuuteen on ajattelutavan muutos, jota voi verrata 90-luvun olioherätykseen. Kehittäjän tulisi ajatella alusta alkaen, kuinka paljon voidaan tehdä samanaikaisesti, eikä kuinka asiat jaetaan peräkkäisiin vaiheisiin. Pessimistien mukaan rinnakkaisuus lähtee kunnolla liikkeelle vasta, kun rinnakkaisajattelun oppinut sukupolvi valmistuu korkeakouluista.
Julkaisujärjestelmä: Drupal | Tietoa Assemblix.netistä | Assemblix-kirjeen tilaus
Kirjoita uusi kommentti