Rinnakkaistietokoneet luento 1 521475S
Yleistä Luennnoitsija: Janne Haverinen huone: TS349 s-posti: janne.haverinen@oulu.fi puh: 553 2801 Assistentti: Jarno Haapamäki huone: TS354 s-posti: jarno.haapamaki@oulu.fi puh: 553 8998
Yleistä (jatkuu) Luennot: ma. klo. 14-17 (TS101) ti. klo. 16-16 (TS101) Laskuharjoitukset: to. klo. 12-14 (TS101) Kurssikirja: Dan I. Moldovan (1993), Parallel Processing: From Applications to System. Patterson D., Hennessy J. (1996), Computer Architecture: A Quantitative Approach.
Yleistä (jatkuu) Kotisivu: http://www.ee.oulu.fi/research/tklab/52475s /
Von Neumann malli (kts kuva 1.1) Von Neuman malli on hallinnut tietokonearkkitehtuureita yli 40 vuoden ajan: Yksi laskentayksikkö (CPU), joka on kommunikoi erillisen muistin kanssa väylän kautta Lineaarinen muisti jossa kiinteän kokoiset muistisolut lineaarinen muistimalli olettaa, että peräkkäiset käskyt ja dataelementit ovat peräkkäisissä muistiosoitteissa Konekielikäskyt, jotka suorittavat yksinkertaisia operaatioita data operandeille. Sekventiaalinen laskenta ja keskitetty ohjaus (CPU Central Processing Unit)
Kuva 1.1: von Neuman malli
Sekventiaalinen ja keskitetty laskenta on helppo toteuttaa ja laskennan eteneminen on helppo ymmärtää. Algoritmien toteutus on helppoa voidaan simuloida myös rinnakkaisia prosesseja, esimerkkinä soluautomaatit. Prosessorin ja muistin välinen tiedonsiirto on selkeästi määritetty: yksi osoitus vuorollaan. Sama korkeantason kielellä kirjoitettu ohjelma voidaan kääntää ja ajaa monella eri arkkitehtuurilla: laskennan perusperiaatteet ovat laitteiston organisaatoista riippumatta samat
RAM-malli (kts. kuva 1.2) Perinteinen yksiprosessorijärjestelmä voidaan ajatella satunnaisosoitus koneena (random-access machine) eli lyhyesti RAM. RAM malli on teoreettinen malli, jota voidaan hyödyntää algoritmin kehityksessä ja kompleksisuustutkimuksessa Tarjoaa lähtökohdan teoreettisille rinnakkaismalleille
Kuva 1.2: RAM malli
RAM-malli koostuu ohjelmasta, muistista, lukunauhasta (read-only tape) ja kirjoitusnauhasta Ohjelma koostuu sekventiaalisista käskyistä jotka haetaan muistista ohjelmalaskurin (PC) osoittamasta paikasta Ohjelma prosessoi syötenauhan symbooleja (yksi kerrallaan) ja tuottaa symbooleja tulostenauhalle. Sopivalla ohjelmalla ja syötesymbooleilla voidaan laskea mikä tahansa funktio: vastaus tulkitaan tulostenauhasta ohjelman lopetettua laskenna. Muistuttaa paljon Turingin konetta.
Pääasialliset keinot laajennettaessa von Neumann arkkitehtuuria kohti rinnakkaisarkkitehtuureita ovat: käskyjen likuhihnoitus vektoriprosessointi taulukkoprosessorit (SIMD) moniprosessoriarkkitehtuurit
Liukuhihnoitus Toiminto jaetaan eri alitoimintoihin jotka suoritetaan rinnakkaisissa vaiheissa (pipe stages) käskytason rinnakkaisuus (kuva 1.3a) Käskyn suorituksen eri vaiheet pyritään rinnakkaistamaan ALU-tason rinnakkaisuus (kuva 1.3b) ALU operaation (esim. liukulukujen kertolasku) eri vaiheet pyritään suorittamaan rinnakkain
Kuva 1.3:
Vektoriprosessorit Vektoriprosessorit prosessoivat tietoa vektori muodossa (kuva 1.4): operandit ovat vektoreita voidaan toteuttaa käyttämällä vektorin koon verran skalaari-aluja Tekee kovosta monimutkaiset liukuhihnoitus parempi ratkaisu Rinnakkaisia laskutoimituksia paljon (vektorin elementit) Ideaalinen tilanne liukuhihnalle: ei data riippuvuuksia joten data-hasardit harvinaisia Voidaan käyttä useita ALUja (< vektorin koko) Yksiprosessorijärjestelmään voidaan liittää vektoriapuprosessori tukemaan vektorilaskentaa
Kuva 1.4: vektoriprosessori
Taulukkoprosessorit Taulukkoprosessorissa (kuva 1.5) on useita erillisiä laskentayksiköitä, jotka voivat tehdä saman operaation yht aikaa niiden omalle datalle omasta muistista Keskusyksikkö synkronoi kaikki ALUt kontrollisignaalien avulla Sama käsky operoi useilla eri operandilla: SIMD (single instruction multiple data) tietokone Data-rinnakkainen (data parallel) malli
Kuva 1.5: taulukkoprosessoriarkkitehtuuri
Jaetun muistin moniprosessorit Useita keskusyksiköitä joilla oma ALU ja paikallinen muisti (LM) (kuva 1.6) Prosessorit kommunikoivat käyttäen: jaettua muistia (shared memory) (kuva 1.6), tai viestin välitystä (message passing), joka voidaan toteuttaa käyttäen erillistä tiedonsiirtolinkkiä (esim. sarjamuotoinen) Jokaisella prosessorilla on oma käskyvirta, joka sijaitsee paikallisessa tai jaetussa muistissa Moniprosessori järjestelmä on asynkrooninen arkkitehtuuri
Kuva 1.6: moniprosessoriorganisaatio
PRAM-malli PRAM-malli eli rinnakainen satunnaisosoituskone (parallel randomaccess machine) malli (kuva 1.7) Abstrahoi jaetun muistin moniprosessorijärjestelmän samalla tavalla kuin RAM malli yksiprosessorijärjestelmän
Kuva 1.7: PRAM malli
PRAM malli koostuu: p kpl ohjelmia p akkumulaattoria, yksi jokaiselle ohjelmalle jaettu muisti jota voidaan osoittaa jokaisesta ohjelmasta lukunauha ja kirjoitusnauha Jokainen ohjelma on eri ja kaikki käskyt vievät saman ajan Kommunikointi viive on 0
Muistinosoitus mahdollisuudet mallissa: EREW (exclusive read, exclusive write) ohjelmat eivät voi saman aikaisesti osoittaa samaa muistisolua ERCW (exclusive read, concurrent write) ohjelmat voivat kirjoittaa saman muistisolun yht aikaa CREW (concurrent read, concurrent write) ohjelmat voivat lukea saman muistisolun yht aikaa CRCW (concurrent read, concurrent write) ohjelmat voivat lukea ja/tai kirjoittaa solun yht aikaa
PRAM-malli on hyödyllinen, kun suunnitellaan rinnakkaisalgoritmeja jaetun muistin moniprosessorijärjestelmille ja tutkittaessa algoritmien ominaisuuksia
Viestinvälitysmoniprosessorijärjestelmä Useita keskusyksiköitä joilla oma ohjelma- ja datamuisti Tiedonvälitys prosessorien välillä tapahtuu käyttämällä erityistä tiedonsiirtoverkkoa Tietokoneverkko (esim. internet) voidaan ajatella viestinvälitysmoniprosessori arkkitehtuuriksi
Kuva 1.8: viestinvälitysmoniprosessorijärjestelmä
Muita von Neumann mallin laajennuksia Systoliset prosessorit Datavuo prosessorit Logiikka-päättely mallit (deduktio/induktio mallit) Reduktiomallit (vaatimuslähtöinen, demand driven) Neuroverkot
Systolinen laskenta (kts. kuva 1.9) Systoliset taulukot ovat likuhihnoitettuja taulukkoprosessoreita koostuen samanlaisista soluista (kuva 1.10), jotka suorittavat yksinkertaisia operaatioita Tieto liikkuu solusta toiseen missä arvo päivitetään huomioiden edellisen solun laskema tulos Lopulta vastaus saadaan viimeisestä solusta Rinnakkaisuus saavutetaan, koska solut suorittavat operaatioita samanaikaisesti
Kuva 1.9 (ja 1.10): matriisin ja vektorin kertolasku systoolisella prosessorilla
Datavuolaskenta (dataflow computation) Datavuomallissa laskenta tapahtuu heti, kun operandit ovat saatavilla Ohjelmalaskuria ei tarvita: laskenta etenee vuon tavoin operaatiosta toiseen Operaatin tulos siirtyy seuraavan, tuloksesta riippuva, operaation operandiksi Datavuota voidaan kuvata käyttämällä datavuoverkkoa (kuva 1.11), joka koostuu solmuista (node) tai toimijoista (actor) reunoista (edges, arcs), jotka yhdistävät solmuja
Yksi tapa suorittaa datavuoverkko on laukaista toimija vain, kun data on saapunut reunoja pitkin toimijan operandeiksi.
Kuva 1.11: datavuolaskentaesimerkki
Rinnakkaisuuden tasot Työtaso (job level) esim. monirobottijärjestelmä voi tehdä rakennuksen vartiointia rinnakkaisesti Tehtävätaso (task level) esim. yksittäinen robotti voi suorittaa rinnakkain liikkeen havainnointia, etäisyyden mittausta ja moottorien ohjausta: työ on jaettu useaan tehtävään, jotka voidaan rinnakkaistaa
Prosessitaso (kts. kuva 1.12) jokainen tehtävä voidaan jakaa useaksi prosessiksi (monella tavalla) esim. robotin liikkuessa mitataan rinnakkain nopeutta ja suoritetaan ajomoottoreiden säätöä nopeuden perusteella Muuttujataso (kuva 1.13) prosessi voi koostua useista käskyistä (laskutoimituksista), jotka tuottavat muutujien arvoja: useita muuttujia voidaan laskea rinnakkain
Bittitaso (bit level) useimmat tietokoneet suorittavat binääriaritmetiikaa useampi bittisillä luvuilla: rinnakkaisuus saavutetaan operoimalla samanaikaisesti useaa bittiä, jotka muodostavat binääriluvun esim. binäärilukujen yhteenlasku
Kuva 1.12: prosessitason rinnakkaisuus
Kuva 1.13: muuttujatason rinnakkaisuus
Rinnakkaislaskenna sovellutukset Sään ennustaminen simuloidaan ilmakehän ilmiöitä lähtien tietystä alkutilanteesta, joka on muodostettu tehtyjen mittausten perusteella epälineaaristen vuorovaikutusten laskenta resoluutio vaikuttaa ennusteen tarkkuuteen: pyritään parantamaan rinnakkaislaskennalla
Tekniikka esim. numeeriset menetelmät ja simulointi: lujuuslaskelman nesteen virtausmallit aerodynamiikka Materiaalitekniikka, esim: sähköiset ilmiöt puolijohteissa kiderakenteiden muodostuminen
Fysiikka esim. simulointi: alkuräjähdys, taivaankappaleiden liikkeiden ennustaminen Taloustiede esim. osakemarkkinoiden ennustaminen Tekoäly esim. koneoppiminen, neurolaskenta, kuvankäsittely, päätöksentekoprosessit, puheen tunnistaminen, tehtyjen mittausten nopea (=reaaliaikainen) analysointi yleensä
Rinnakkaisalgoritmien ja arkkitehtuurien suhde Rinnakkainen algoritmi voidaan ajatella koostuvan joukosta itsenäisiä tehtäviä (moduleita), joista osa voidaan suorittaa samanaikaisesti Modulit kommunikoivat algoritmin suorituksen aikana Koska algoritmit suoritetaan rinnakaislaskenta laitteistolla, on luonnollista miettiä algoritmin ja laitteiston suhdetta: auttaa suunnittelemaan tehokkaita rinnakkaislaskentajärjestelmiä
Rinnakkaisalgoritmi voidaan luonnehtia käyttäen seuraavia kriteereitä: 1. moduulin rakeisuus (module granularity) Laskennan määrä tyypillisessä modulissa Suuri rakeisuus: monimutkaisemman prosessorit vähän kommunikointia Pieni rakeisuus: yksinkertaiset prosessorit paljon kommunikointia Paras tulos saavutetaan tekemällä kompromissi rakeisuuden ja kommunikaatiomäärän välillä laskenta tehokkuuden maksimoimiseksi
2. Samanaikaisuuden kontrollointi (concurrence control) tapa jolla valitaan suoritettavat modulit kullakin ajan hetkellä ottaa huomioon data- ja kontrolliriippuvuudet siten, että algoritmin suoritus on oikeellinen Mahdollisia kontrollitapoja: datavuo (data-flow) esim. algoritmit, joissa ehdollisia tilansiirtymiä, tilakoneet, epäsäännölliset algoritmit keskuskontrolli (synchronized) esim. matriisien kertolasku, säännölliset algoritmit systoliset- ja taulukkoprosessorit vaatimuslähtöinen (demand-driven) esim. logiikka/päättely algoritmit, päätöksenteko algoritmit
3. Tietomekanismi (data mechanism) viittaa operandien käyttämiseen ohjataanko suoraan tarvitsevalle operaatiolle (data-flow malli) vai kirjoitetaanko muistiin, johon tarvittaessa viitataan osoitteella (von Neumann malli) tiedon hakemiseksi (tiedon tarvitsija hoitaa itse operandin haun muistista) 4. Tiedonsiirtogeometria (communication geometry) viittaa tiedonsiirtoyhteyksiin laskennallisten moduleitten välillä algoritmin tiedonsiirtogeometrian sanotaan olevan säännöllinen, kun tiedonsiirrot moduleiden välillä toistuvat samanlaisina läpi laskennan ( ensin tämä kommunikoi tuon kanssa ja sitten tuon, sen jälkeen tämä tuon.. ) tiedonsiirtogeometria on epäsäännöllinen, jos tiedonsiirrot moduleiden välillä ovat satunnaisia (ei säännöllistä kuviota: tuo kommunikoi joskus tuon ja silloin tällöin tuon ja ehkäpä myös tuon kanssa.. ) Säännölliset tiedonsiirtoyhteydet voivat muistuttaa puurakennetta, kuutioita tai muita luonnossa esiintyviä rakenteita (modulit ovat solmuja ja yhteyden niiden välisiä reunoja)
5. Algoritmin koko viittaa laskutoimitusten määrään jonka algoritmin täytyy suorittaa Voi olla pieni, keskikokoinen tai suuri 1000 x 1000 matriisin laskemista voidaan pitää suurena tehtävänä Algoritmin koko vaikuttaa prosessorien määrään ja vaadittavan muistin määrään
Rinnakkaistietokonearkkitehtuureita voidaan luonnehtia käyttäen seuraavia kriteereitä: 1. Prosessorin kompleksisuus viittaa käytettävän prosessorin (tai useiden) laskentatehoon ja sisäiseen organisaatioon Homogeeninen järjestelmä koostuu useista samanlaisista prosessoreista ja heterogeeninen järjestelmä erilaisista prosessoreista joilla voi olla eri tehtäviä esim. systolisissa prosessoreissa solut ovat yksinkertaisia ja dataa prosessoidaan eikä tallenneta esim. moniprosessorijärjestelmissä jokaisella prosessorilla on oman muistinhallinta, välimuisti, jne. Suurirakeisissa arkkitehtuureissa on muutama tehokas prosessori ja pienirakeisissa monia yksinkertaisia prosessoreita (esim. Connection Machine: 65 536)
2. Toimintatila (mode of operation) käskyvuo (command-flow) ohjelmakäskyt laukaisevat laskentatapahtumat datavuo (data-flow) operaatiot laukaistaa heti, kun operandit ovat käytössä vaatimusvuo (demand-flow) laskentaoperaatio käynnistyy vain, jos joku tarvitsee sen tulosta Eri toimintatilojen yhdistelmät ovat mahdollisia Arkkitehtuurin toimintatila liittyy algoritmin samanaikaisuuden kontrollointiin
3. Muistirakenne (memory structure) Muisti voi olla RAM tyyppistä, osoitteella osoitettavaa tai assosiatiivista, jolloin muistista haetaan tietoa osan tiedosta toimiessa hakuehtona Neuroverkoissa muistina toimivat neuroneiden väliset painokertoimet, jotka edustavat järjestelmään tallennettua tietoa (knowledge) 4. Yhteysverkko (interconnection network) laitteistotason yhteydet prosessoreiden ja prosessoreiden ja muistien välillä Mahdollisimman yhteensopiva algoritmin tiedonsiirtogeometrian kanssa maksimaalisen suorituskyvyn saavuttamiseksi kompleksinen yhteysverkko soveltuu moniin algoritmeihin mutta on kallis toteuttaa ja pidentää kytkentäaikoja tiedon reitityksen monimutkaistuessa
5. Prosessoreiden lukumäärä ja muistin koko Pienillä järjestelmillä prosessoreiden määrä on 1-100 Keskisuurilla 100-1000 ja suurilla yli 1000 (kirjan määritelmä) Prosessoreiden määrän kasvattaminen lisää suorituskykyä: ideaalitilanteessa prosessoreiden määrä vastaa algoritmin kokoa jolloin ei vaadita algoritmin pilkkomista
Rinnakkaislaskennan suorituskyky Kuinka rinnakkaistietokoneita voisi hyödyntää mahdollisimman tehokkaasti useilla eri sovellutusalueilla? On arvioitu, että supertietokoneet käyttä keskimäärin vain 10% niiden huippulaskentatehopotentiaalista Kuitenkin juuri laskentateho on syy miksi supertietokoneita tehdään ja käytetään
Laskentatehoa laskee sovelluksen (ratkaistava ongelman), ohjelmiston (algoritmitoteutuksen) ja laitteiston yhteensopimattomuudet Pääkohdat jotka johtavat suorituskyvyn laskemiseen: ongelma: rinnakkaisuuden aste algoritmi: kuinka ongelma ratkaistaan ohjelmointikieli ja kääntäjä: kuinka algoritmi kuvataan prosessorille, pystytäänkö kuvaamaa rinnakkaisuutta? käyttöjärjestelmä: algoritmin suoritus laitteistolla, laskenta resurssien jakaminen Laitteisto: tiedonsiirtoverkko, prosessorin/muistin nopeus, prossessoreiden määrä, muistihierarkia (tukevatko rinnakkaisuutta?)
Sovellutusten kuvaaminen rinnakkaistietokoneille ja rinnakkaisprosessoreiden tasapainottaminen eri sovellutuksille on vaikea ongelma ja ymmärtämys tällä alueella on vielä heikkoa (aivot näyttävät ratkaisseen nämä ongelmat) Suorituskyvyn määrittämistä tarvitaan: uusien koneiden evaluointi niiden tullessa markkinoille tietoa algoritmien ja arkkitehtuurien yhteensovittamiseksi ja sitä kautta koneiden laskentatehon tehokkaampi hyödyntämienen tiedon kerääminen uusien koneiden suunnittelun tueksi
Suorituskyvyn määrittämistä voidaan lähestyä: analyyttisesti usein liikaa yksinkertaistuksia, joka johtaa mallien epäonnistumiseen: ei kuvaa todellista tilannetta Kompleksisissa järjestelmissä analyyttiset malli pystyvät harvoin kuvaamaan järjestelmäkokonaisuuden suorituskykyä kokeellisesti, mittaamalla ja analysoimalla tällä hetkellä ainoa tapa saada luotettavaa tietoa rinnakkaistietokoneen suorituskyvystä useita mittauksia ohjelmistosta ja laitteistosta monilla eri sovellutusohjelmilla mittapuut (benchmarks) eivät anna tietoa siitä, kuinka arkkitehtuuria, laitteistoa ja algoritmeja säädetään parhaan suorituskyvyn saavuttamiseksi: halutaan tietoa miksi järjestelmän suorituskyky on mitä on ja kuinka sitä parannetaan
Suorituskyvyn mittareita Suoritustahti (execution rate) MIPS (miljoonaa käskyä sekunnissa) MFLOPS (miljoonaa likulukukäskyä sekunnissa) LIPS (loogista päättelyä sekunnissa) Nopeutus, Sp (speedup) Sp = T1/Tp, missä T1 suoritusaika yksiprosessorijärjestelmällä ja Tp suoritusaika moniprosessori järjestelmällä (p prosessoria), eli T1 on sekventiaalinen prosessointiaika ja Tp on rinnakkainen prosessointiaika Mitä suurempi Sp on sitä enemmän rinnakkaislaskenta nopeuttaa laskentaa (olettaen, että sekventiaalinen algoritmi on lähes optimaalinen kuvattuun ongelmaan) 1 Sp p
Tehokkuus, Ep (efficiency) Nopeutuksen ja prosessoreiden määrän suhde (ideaalitilanteessa 1): Ep = Sp / p = T1/pTp Mittaa laskennan hinta-tehokkuutta: kuinka hyvin prosessoreiden lukumäärä (vaikuttaa hintaan) on saatu siirrettyä laskentatehokkuudeksi (nopetus yksiprosessorijärjestelmään verrattuna) Redudanttisuus, Rp Rinnakkaislaskennassa käytettyjen operaatioiden määrän suhde yksiprosessorijärjestelmässä käytettyjen operaatioiden määrään: Rp = Op/O1
Hyödynnettävyys, Up (utilization) Rinnakkaislaskennassa käytettyjen operaatioiden määrän suhde opeeraatioiden määrän teoreettiseen minimiin: Up = Op / ptp Olettaa, että joka aikayksikössä voidaan suorittaa yksi operaatio jokaisessa p prosessorissa
Rinnakkaislaskennan rajat [Worlton 1968] on esittänyt mallin, jolla voidaan arvioida moniprosessorijärjestelmän toimintaa. Määritellään seuraavat muuttujat: ts = synkrontiaika t = keskimääräinen tehtävän suoritusaika t0 = tehtävään liittyvä rinnakkaislaskentalisä (overhead) N = tehtävien määrä synkronointitapahtumien välissä P = prosessoreiden lukumäärä
N tehtävän sekventiaalinen laskenta kestää: T1 = Nt Rinnakkaistietokoneessa laskenta kestää: TN,P = ts + [N/P](t+t0), missä [N/P] on vaatittavien rinnakkaisten askelten määrä (pyöristetty lähimpään suurempaan kokonaislukuun, eli [N/P] = ceil(n/p) ) Nopeutus: SN,P = T1 / TN,P = Nt / (ts + [N/P](t+t0) ) = 1 / ( ts/(nt) + (1/N)[N/P](1+t0/t) ) Nopeutus voidaan maksimoida minimoimalla nimittäjä, eli minimoimalla synkronoinnin vaikutus, rinnakkaistamisesta aiheutuva aikalisä ja rinnakkaisaskelten määrä
Synkronoinnin vaikutusta (ts/nt) voidaan pienentää pienentämällä synkronointiaikaa ts tai suorittamalla enemmän tehtäviä synkronointien välillä (suurempi N) Rinnakkaistamislisäaikaa (overhead) voidaan pienentään pienentämällä t0:aa tai kasvattamalla sovelluksen rakeisuutta (t kasvaa, enemmän laskentaa / tehtävä, vähemmän tehtäviä): vähentää myös syknronoinnin vaikutusta (N ja t pienenevät) Laskenta-askelten määrää voidaan vähentää käyttämällä enemmän prosessoreita