Rinnakkaisuuden hyväksikäyttö peleissä Paula Kemppi 24.4.2008
Esityksen rakenne Johdantoa Rinnakkaisuus Pelimoottorien rinnakkaisuuden mallit Funktionaalisen rinnakkaisuuden malli Rinnakkaisen tiedon malli Tehtävien riippuvuusanalyysi OpenMP Loppusanat 2
Johdantoa Prosessorien suorituskyvyn kasvulle alkanut tulla raja vastaan Prosessorien valmistajat alkaneet hakea lisätehoja monisäikeisyydestä ja moniydinarkkitehtuureista Ohjelmistoihin pitää lisätä rinnakkaisuutta 3
Rinnakkaisuus Useamman kuin yhden tehtävän suorittamista samanaikaisesti Moniajoa jos vain yksi prosessori Jos useita voidaan ajaa yhtä montaa prosessia kuin on prosessoreita Ongelman jakaminen rinnakkain suoritettaviin osiin, rinnakkaisten osien kommunikoinnin ja synkronisoinnin suunnittelu ja toisiinsa läheisesti liittyvien osien yhdistäminen 4
Amdahlin laki Amdahlin laki on helppo kaava laskea algoritmin tehonlisäys, jos osa siitä muutetaan rinnakkaiseksi. S = suorituskyvyn muutos F = sarjallisen koodin osuus N = prosessorien määrä 5
Amdahlin laki Jos 50 % suorituksesta on rinnakkaista, on kahdella prosessorilla suoritus 1,3- kertaista. Jos peräkkäisen laskennan määrä lähestyy nollaa, nopeutuu algoritmi suoraan suhteessa käytössä olevien prosessorien määrään 6
Esityksen rakenne Johdantoa Rinnakkaisuus Pelimoottorien rinnakkaisuuden mallit Funktionaalisen rinnakkaisuuden malli Rinnakkaisen tiedon malli Tehtävien riippuvuusanalyysi OpenMP Loppusanat 7
Rinnakkaisuuden mallit On kaksi perustapaa jakaa ohjelma rinnakkaisiin osiin Funktionaalinen Tietoperustainen Funktionaalisessa jaetaan ohjelma rinnakkain suoritettaviin säikeisiin Tietoperustainen pyrkii löytämään tietoa jolle suorittaa tehtäviä rinnakkaisesti 8
Funktionaalinen rinnakkaisuus Ideana jakaa pelimoottorin eri komponentit eri säikeisiin Synkroninen malli Asynkroninen malli 9
Synkroninen malli 10
Synkroninen malli Yritetään löytää olemassaolevasta pelisilmukasta osia, jotka voi suorittaa rinnakkain Tehtävien pitäisi olla mahdollisimman riippumattomia Tukee rajallista prosessorien määrää Olemassaolevia komponentteja ei tarvitse muuttaa paljoa 11
Asynkroninen malli 12
Asynkroninen malli Ei pelisilmukkaa vaan tehtävät päivittyvät omia aikojaan omissa säikeissään Tehtävät käyttävät viimeisintä saatavilla olevaa tietoa Saadaan myös toisistaan riippuvat tehtävät rinnakkaisiksi Ongelmana eri tehtävien suoritustiheyden aikatauluttaminen 13
Tietoperustainen malli 14
Tietoperustainen malli Jaetaan pelin hahmojen suoritus eri säikeille Säikeet mahdollisimman tasapainossa Eri säikeissä olevien hahmojen kommunikaatio Erittäin skaalautuva malli Suorituskykyisin malli silloin kun prosessoreita on paljon 15
Esityksen rakenne Johdantoa Rinnakkaisuus Pelimoottorien rinnakkaisuuden mallit Funktionaalisen rinnakkaisuuden malli Rinnakkaisen tiedon malli Tehtävien riippuvuusanalyysi OpenMP Loppusanat 16
Tehtävien riippuvuusanalyysi Tehtävät mahdollisimman riippumattomia Osa tehtävistä tarvitsee toisten tehtävien tarjoamaa tietoa, joten niiden täytyy odottaa näiden suorituksen päättymistä Tietoriippuvuus, hallintariippuvuus, resurssiriippuvuus 17
Tietoriippuvuus Suoritusriippuvuus = vähintään yksi S1:sen tulosteista toimii S2:sen syötteenä Antiriippuvuus = S2 seuraa S1:stä ja joku S2:sen tulosteista vaikuttaa S1:sen syötteisiin Tulosteriippuvuus = tehtävät S1 ja S2 kirjoittavat samaan muistiosoitteeseen. I/O riippuvuus = kaksi tehtävää käyttää samaa tiedostoa. Tuntematon riippuvuus = tehtävien suhteet riippuvat tiedosta, johon viitataan epäsuorasti 18
Bernsteinin ehdot Resurssiriippuvuutta Ehdot: P1 ei lue muistiosoitteita, joihin P2 kirjoittaa P2 ei lue muistiosoitteita, joihin P1 kirjoittaa P1 ja P2 eivät kirjoita samoihin muistiosoitteisiin 19
Esityksen rakenne Johdantoa Rinnakkaisuus Pelimoottorien rinnakkaisuuden mallit Funktionaalisen rinnakkaisuuden malli Rinnakkaisen tiedon malli Tehtävien riippuvuusanalyysi OpenMP Loppusanat 20
OpenMP Ohjelmointirajapinta, joka tukee jaettua muistia käyttävää rinnakkaisohjelmointia useilla alustoilla Kääntäjädirektiivejä, kirjastorutiineja ja ympäristömuuttujia Helppoa ja selkeää Kääntäjä ei juuri tee tarkistuksia 21
OpenMP Yhden rivin lisäyksellä koodiin, saadaan silmukan suoritus jaettua useisiin säikeisiin Selkeä parannus suorituskyvyssä Windowsin säiekutsuilla samaan toimintoon meni 60 koodiriviä 22
OpenMP Perustuu säiejoukkoon: kun ohjelman suoritus tulee rinnakkaiseen osioon, säiejoukkio aktivoituu ja suoritettuaan työnsä, jäävät odottamaan seuraavaa rinnakkaista osiota 23
OpenMP Voidaan käyttää myös funktionaaliseen rinnakkaisuuteen 24
Yhteenveto Useista prosessoreista saatava hyöty riippuu siitä, kuinka suuri osa ohjelman tehtävistä voidaan suorittaa rinnakkain Rinnakkaisuuden mallit tarjoavat tapoja jakaa ohjelma rinnakkaisiin osiin Rinnakkaisessa suorituksessa pitää ottaa huomioon tehtävien väliset riippuvuudet 25