Assemblix

Moniydin haastaa kehittäjät

Ilari Sani | 25.4.2007

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ä.

Taulukko sovellusten suorituskyvyn kehityksestä. Säikeistämättömät jäävät jälkeen moniydinprosessorien yleistyessä.Perinteiset sovellukset eivät saa lisäpotkua uusista prosessoreista.

Päänvaivaa luotettavuudesta ja lukoista

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.

Välineet pelastavat kehittäjän – sitten joskus

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.

Neljä ydintä tänään on sata ydintä huomenna

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.

Assemblixissa samasta aiheesta:

Kirjoita uusi kommentti

Tämän kentän sisältöä ei näytetä julkisesti.
  • Allowed HTML tags: <h3> <img> <a> <em> <strong> <cite> <blockquote> <pre> <code> <ul> <ol> <li> <dl> <dt> <dd> <acronym> <div> <p>
  • Rivin- ja kappaleenvaihdot tunnistetaan sisällöstä automaattisesti.
  • Web- ja sähköpostiosoitteet muutetaan automaattisesti linkeiksi.

Lisätietoa muotoiluasetuksista

CAPTCHA
Tämä kysymys testaa, oletko ihminen. Tällä estetään automaattisia roskaviestejä.

Julkaisujärjestelmä: Drupal   |   Tietoa Assemblix.netistä   |   Assemblix-kirjeen tilaus