Yliopistojen IT

Yhteystiedot

IT UNIVERSITAS

Yhteistyötahot

Ohjeet, säännöt

Tapahtumat

Yhteistoiminta

Linkit

Vinkkinurkka

Päivitetty viimeksi 31.1.2007



Takaisin sisällysluetteloon
IT Universitas nro 1 / 31. tammikuuta 2007

Suurteholaskennalle uusia resursseja

Kehityspäällikkö Jussi Heikonen, CSC

Muutaman vuoden hiljaiselon jälkeen suomalaisissa suurteholaskennan piireissä eletään jälleen vilkasta aikaa. Opetusministeriön omistama tieteen tietotekniikan keskus CSC on hankkinut laskennallisen tieteen tutkijoiden
käyttöön kaksi huipputehokasta laitteistoa.

Rendering of Cray XT4 Supercomputer at CSC Finland, courtesy of Cray Inc.

Huolellisen hankintaprosessin päätteeksi vuoden 2006 syksyllä allekirjoitettiin sopimukset Crayn ja Hewlett-Packardin kanssa. Cray toimittaa CSC:lle marraskuussa julkistetun XT4-tyyppisen laitteiston, jonka ensimmäinen, parituhatta laskentaydintä käsittävä vaihe asennetaan alkuvuodesta 2007. Lopullisessa kokoonpanossa vuonna 2008 koneen teoreettinen laskentateho tulee olemaan noin 70 Tflop/s.

Cray varataan erittäin suurten ja vaativien rinnakkaistöiden käyttöön. Pienemmät rinnakkaistyöt ja osa peräkkäistöistä ohjataan HP:n CP4000BL ProLiant –klusteriin, joka on samaa suuruusluokkaa Crayn ensimmäisen vaiheen kanssa.

Yhdessä laitteistot takaavat suomalaisille laskennallisen tieteen tutkijoille erinomaiset resurssit ja erinomaisen kilpailuaseman kansainvälisessä tiedeyhteisössä. Koneiden tehokas hyödyntäminen ei kuitenkaan ole aivan suoraviivaista. Tuhansien laskentaydinten käyttö rinnakkaislaskennassa edellyttää sopivien algoritmien valintaa ja huolellista ohjelmointia sekä laitteistojen ominaisuuksien tuntemista. Laskennallisen tieteen tutkijan on hallittava oman tutkimusalansa lisäksi myös numeriikkaa ja rinnakkaisohjelmointia sekä tietokonearkkitehtuureja.

Seuraavassa käsitellään nykyisiä superkonelaitteistoja ja niiden ohjelmointia sekä arvioidaan kehityksen suuntaa jatkossa.

 

Mikä on supertietokone?

Yksinkertaisin määritelmä supertietokoneelle on seuraava: laite on mukana uusimmalla Top500-listalla. Kahdesti vuodessa päivitettävä Top500-lista (www.top500.org) sisältää 500 tehokkainta tietokonetta, jotka on pantu järjestykseen Linpack-testissä. saavutetun suorituskyvyn perusteella. Top500-listan kärkipäässä olevat koneet ovat suurteholaskennan supertähtiä.

Linpack-testi on itse asiassa hyvin rajoittunut tapa arvioida tietokoneen suorituskykyä. Se mittaa lähinnä prosessorin tai prosessoriytimen liukulukutehoa, eikä juuri ota huomioon prosessorien välisen kytkentäverkon ominaisuuksia.

Kymmenisen vuotta sitten alkoi massiivisesti rinnakkaisten koneiden valtakausi, joka jatkuu edelleen. Tällaisissa koneissa korkea suorituskyky saavutetaan jakamalla laskentatyö usealle prosessorille. Tämän hetken tehokkaimmissa laitteistoissa on kymmeniätuhansia tavallisia työasemaprosessoreita, kuten AMD:n Opteroneja, Intelin Itaniumeja tai IBM:n Power-prosessoreja.

Pitkään jatkunut kellotaajuuksien kasvaminen on viime aikoina lähes pysähtynyt ja tehonlisäystä tavoitellaan lisäämällä rinnakkaisuutta prosessorin sisällä. Yksi prosessori koostuu useammasta laskentaytimestä, jotka toimivat itsenäisten prosessorien tavoin vaikka jakavatkin osan tarvitsemistaan väylistä ja muisteista. Esimerkiksi CSC:n Cray XT4:ssä tulee lopullisessa kokoonpanossa olemaan neliytimiset prosessorit. Voidaankin sanoa, että lähitulevaisuuden prosessorit vastaavat pieniä yhteisen muistin solmuja.



Laitteiden käyttöikä on 5-6 vuotta.

Käyttökelpoiseen superkoneeseen tarvitaan muutakin kuin suuri määrä tehokkaita prosessoreja. Jotta rinnakkaislaskenta olisi mahdollista, laskentatehtävien pitää pystyä vaihtamaan tietoa keskenään. Kytkentäverkon topologia ja ”älykkyys” vaikuttavat ratkaisevasti koneen suorituskykyyn ja hintaan. Kun prosessoreiden välillä on useita vaihtoehtoisia ja mahdollisimman lyhyitä reittejä, viestintä on nopeaa eikä hidastu liikaa kuorman lisääntyessä. Älykäs verkko taas pystyy ottamaan vastuun tiedon siirtämisestä itselleen ja vapauttaa prosessorit tekemään laskentaa.

CSC:n hankkimien laitteistojen ero onkin karkeasti yksinkertaistaen juuri kytkentäverkoissa. Molemmissa koneissa on AMD:n Opteron-prosessorit, mutta Cray käyttää omaa Seastar2-verkkoaan, joka muodostaa kolmiulotteisen toruksen. Verkon jokaisessa solmussa on erillinen prosessori huolehtimassa tiedonsiirrosta.

HP:ssä verkkona toimii InfiniBand, joka on erittäin nopea, mutta ei kuitenkaan yhtä suorituskykyinen kuin Crayn ratkaisu. Ero tulee havaittavaksi vasta ajettaessa paljon viestiviä ohjelmia useilla sadoilla prosessoreilla.

CSC:n HP-laitteiston kaltaiset, nopealla verkolla varustetut PC-klusterit ovat viime aikoina yleistyneet nopeasti hyvän kustannustehokkuutensa vuoksi. Alkuaikojen klustereita vaivanneet ongelmat, kuten ohjelmankehitys- ja hallintaympäristön puutteet, ovat mennyttä aikaa.

Tekniikan nopea kehitys pitää huolta siitä, että tietokoneet vanhenevat armottoman nopeasti. Mooren ”lain” mukaisesti prosessorien laskentateho kaksinkertaistuu keskimäärin 18 kuukaudessa, ja niinpä CSC:n uusien laitteiden odotettavissa oleva käyttöikä on viisi tai kuusi vuotta. Sen jälkeen niiden ylläpitäminen suhteessa laskentatehoon tulee kohtuuttoman kalliiksi.

 

Rinnakkaisohjelmointi vaatii onnistunutta delegointia

Ohjelmointikielten suhteen ei Fortran 77:n yleistymisen jälkeen ole tieteellisessä laskennassa tapahtunut radikaaleja muutoksia. Toki C:llä ja C++:lla on omat kannattajansa ja Fortraniinkin lisätään uusia piirteitä, mutta ainakaan muutaman vuoden sisällä ei ole odotettavissa mullistavia uusia ohjelmointikieliä. Fortranin valta-asema HPC-maailmassa perustuu tehokasta koodia tuottaviin kääntäjiin, kielen laskentaa varten suunniteltuun rakenteeseen sekä laajaan aliohjelmakirjastovalikoimaan.

Rinnakkaislaskenta perustuu laskentatyön jakamiseen usealle prosessille tai prosessoriytimelle, jolloin suoritusaika periaatteessa lyhenee, ihanteellisessa tapauksessa kääntäen verrannollisesti prosessorien määrään. Käytännössä tällaiseen päästään kuitenkin vain erikoistapauksissa, joissa erilliset laskentatehtävät ovat täysin riippumattomia toisistaan. Tähän luokkaan kuuluu kuitenkin tärkeitä menetelmiä kuten Monte Carlo -simulaatiot.

Useimmiten yksittäisen laskentatehtävän eteneminen edellyttää tietojen vaihtamista muiden tehtävien kanssa. Kommunikaation ja laskennan välinen jaksotus riippuu käytettävästä algoritmista, mutta tehtävien välinen keskustelu on joka tapauksessa peräkkäislaskentaan verrattuna ylimääräistä työtä (overhead).

Tyypillisesti tämän ylimääräisen työn ja laskennan suhde kasvaa prosessorien määrän mukana, minkä seurauksena ohjelman ajoaika ei enää lyhene tietyn pisteen jälkeen. Käsite skaalautuminen tarkoittaa prosessorien määrän ja ajoajan välistä riippuvuutta.

Hyvä skaalautuminen edellyttää myös erinomaista kuormantasausta: epätasaisesti jaettu työ johtaa tilanteeseen, jossa osa laskentatehtävistä joutuu odottamaan muita ja hitaimmat määräävät koko ohjelman tehon. Hyvän kuormantasauksen saavuttaminen voi monimutkaisissa ongelmissa olla erittäin hankalaa.

Joustava viestinvälitysmalli

Muitakin haasteita on. Algoritmi, joka on osoittautunut hyväksi peräkkäislaskennassa, ei ehkä olekaan paras mahdollinen valinta rinnakkaisohjelman lähtökohdaksi. Laskentatyö on pyrittävä jakamaan prosessorien kesken mahdollisimman tasaisesti ja tiedonvaihto ei saisi häiritä laskentaa. Voi olla että viestinnän minimoimiseksi tehokas rinnakkaisalgoritmi tekee enemmän laskentatyötä kuin peräkkäisalgoritmi.

Tällä hetkellä vallitseva rinnakkaisohjelmointimalli on viestinvälitys (message passing). Viestinvälitysohjelmoinnissa kukin laskentatehtävä suorittaa omaa, mahdollisesti yksilöllistä, kopiotaan ohjelmasta ja kaikki muuttujat ovat paikallisia. Kun laskennan edistyminen vaatii tiedonvaihtoa muiden tehtävien kanssa, molemmat osapuolet kutsuvat erityisiä viestintärutiineja. Toinen tehtävä esimerkiksi lähettää, toinen vastaanottaa.

Viestinvälitysohjelmoinnissa kullakin laskentatehtävällä on oma järjestysnumeronsa, jonka perusteella työ voidaan jakaa. Tyypillisessä esimerkissä järjestysnumeron perusteella lasketaan tehtävän osuus (eli indeksien rajat) globaalista taulukosta, joka on jaettu laskentatehtävien kesken. Viestinvälitysmalli on hyvin joustava, se sopii kaikille rinnakkaiskonearkkitehtuureille ja sillä voi toteuttaa lähes kaikki tavallisesti esiintyvät rinnakkaistusstrategiat.

Käytännössä viestinvälitysohjelma toteutetaan Fortranilla tai C/C++:lla ja viestinvälityksen hoitavalla aliohjelmakirjastolla. Yleisin kirjastoista on MPI (Message Passing Interface), joka on lähes täysin syrjäyttänyt vanhemman PVM:n (Parallel Virtual Machine). MPI:stä on olemassa useita toteutuksia. Kullakin laitevalmistajilla on omansa ja myös vapaasti saatavilla olevia versioita löytyy. Koska MPI on standardoitu, ohjelmat ovat siirrettävissä koneesta toiseen, kunhan ne on kirjoitettu huolellisesti.

 

Yhteisen muistin koneet

Yhteisen muistin koneissa kaikki prosessorit pystyvät käsittelemään koko muistia. CSC:n IBMSC:n yksittäiset solmut ja Corona ovat tällaisia laitteita ja niissä voidaan viestinvälityksen sijaan käyttää vaihtoehtoista rinnakkaistusmallia.

Yhteisen muistin rinnakkaistuksessa osa muuttujista on jaettuja, ne näkyvät kaikille säikeille (jokaista säiettä suorittaa oma prosessori tai prosessoriydin). Helpoimmin yhteisen muistin rinnakkaisohjelmointia voi harrastaa OpenMP-rajapinnan avulla: Fortran- tai C/C++-kieliseen peräkkäisohjelmaan lisätään kommentteja muistuttavia kääntäjädirektiivejä tai –pragmoja, jotka muun muassa säätelevät muuttujien näkyvyyttä ja ohjaavat työnjakoa säikeiden kesken.

OpenMP:n avulla ohjelmointi on viestinvälitykseen verrattuna yksinkertaista, vaikka varomaton koodari voikin saada aikaan todella outoja ja vaikeasti jäljitettäviä virheitä. Erityisen houkuttelevaa on, että ohjelman voi rinnakkaistaa vain osittain ja että samaa lähdekoodia voi yleensä ajaa myös peräkkäisohjelmana.

OpenMP:n suosiota kuitenkin rajoittaa sen soveltuvuus vain yhteisen muistin koneille ja MPI:tä tyypillisesti heikompi suorituskyky. OpenMP:llä saattaa kuitenkin olla paikkansa suurteholaskennassa: uudet moniytimiset prosessorit ovat pieniä yhteisen muistin koneita, ja joissain tapauksissa hybridiohjelmointi on tehokkaampaa kuin pelkän MPI:n käyttäminen. Hybridimallissa prosessorien kesken viestitään MPI:llä, mutta prosessorin sisällä ytimien välinen kommunikaatio toteutetaan OpenMP:llä.

 

Mitä seuraavaksi?

Kuten edellä mainittiin, tällä hetkellä lisätehoa haetaan multicore- eli moniydinprosessoreilla. Kellotaajuuksien jatkuva kasvaminen näyttää pysähtyneen, koska tehonkulutuksessa ja lämmöntuotossa alkavat käytännön asettamat rajoitukset tulla vastaan. Pian ollaan tilanteessa, jossa superkoneen kuluttama sähkö maksaa enemmän kuin kone itse.

Tämän hetken kuuma puheenaihe on ”yleiskäyttöisten” grafiikkaprosessoreiden (GPGPU) hyödyntäminen laskennassa. Tällaiset pelikonsoleita varten kehitetyt prosessorit pystyvät huimaan liukulukutehoon, kuluttavat vähän sähköä ja ovat erittäin edullisia tavallisiin prosessoreihin verrattuna. Nämä ominaisuudet on kuitenkin saavutettu osittain pitkälle viedyllä erikoistumisella grafiikan tarvitsemiin operaatioihin, mikä tekee laskentasovellusten ohjelmoinnin hankalaksi tai pahimmillaan mahdottomaksi.

Grafiikkaprosessoreiden yleiskäyttöominaisuudet ja ohjelmointiympäristöt kehittyvät koko ajan, ja onkin odotettavissa, että GPGPU:t yleistyvät laskentakoneissakin oheisprosessoreina. Luonnollinen ratkaisu olisi esimerkiksi tavallisimpien lineaarialgebran aliohjelmien ajaminen tällaisilla niin sanotuilla kiihdyttimillä.

Ohjelmointipuolella kehitys on hitaampaa, eikä varsinaisia mullistuksia ole näköpiirissä. Kansainvälinen HPC-yhteisö kuitenkin tiedostaa tilanteen: tehokkaiden rinnakkaisohjelmien tekeminen tuhansille prosessoreille on erittäin vaikeaa. HPC-ohjelmoinnin tuottavuutta yritetään parantaa Yhdysvalloissa kansallisella DARPA HPCS -projektilla. Vaikka esimerkiksi Co-Array Fortran ja Unified Parallel C lupaavat helpompia aikoja rinnakkaisohjelmoijille, käytössä olevien Fortranilla tai C:llä ja MPI:llä kirjoitettujen sovellusten suuri määrä jarruttaa kehitystä. Uusien kielten ja ohjelmointimallien pitäisi olla selkeästi tehokkaampia, jotta vanhojen ohjelmien uudelleen kirjoittaminen olisi kannattavaa.

Kehitys tullee siis jatkossakin olemaan vähittäistä vallankumouksellisen sijaan.