Rinnakkaisuuden hyväksikäyttö tietokonepeleissä

Koko: px
Aloita esitys sivulta:

Download "Rinnakkaisuuden hyväksikäyttö tietokonepeleissä"

Transkriptio

1 Rinnakkaisuuden hyväksikäyttö tietokonepeleissä Paula Kemppi Helsinki Ohjelmistotuotanto ja tietokonepelit -seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

2 Sisältö i 1 Johdanto 1 2 Rinnakkaisuus Pelimoottorit Amdahlin laki Pelimoottorien rinnakkaisuuden mallit Synkroninen funktionaalinen rinnakkaisuus Asynkroninen funktionaalinen rinnakkaisuus Rinnakkaisen tiedon malli Tehtävien väliset riippuvuudet Rinnakkaisuuden ehtoja OpenMP 8 6 Yhteenveto 11 Lähteet 12

3 1 Johdanto 1 Viime vuosina on prosessorien suorituskyvyn kasvulle alkanut tulla raja vastaan, sillä kellotaajuutta ei voida enää nostaa aiemmin totuttuun tapaan. Kun aiemmin ohjelmistoja ovat rajoittaneet esimerkiksi internetyhteyden nopeus tai näytönohjaimen taso, alkaa tulevaisuudessa prosessoritehosta tulla tällainen rajoittava tekijä [Sut05]. Näin ollen prosessoritehoja pitää pystyä hyödyntämään entistä paremmin. Koska yksittäisten prosessorien tehoja ei voi enää rajattomasti kasvattaa, ovat prosessorien valmistajat alkaneet hakea lisätehoja monisäikeisyydestä (hyperthreading) ja moniydinarkkitehtuureista (multicore architectures) [Sut05]. Mutta jotta moniydinprosessoreista saataisiin paras hyöty irti, pitää ohjelmistoihinkin lisätä rinnakkaisuutta. Muuten käy helposti niin, että osa prosessoreista vaan odottelee joutilaina. Aiemmin monisäieteknologiaa ei ole juurikaan käytetty hyväksi pelimoottorien säikeyttämisessä sen monimutkaisuuden takia, vaikka edut suorituskykyyn ovat olleet tiedossa [And07]. Modernit tietokonepelit kuitenkin koettelevat nykyisten kotitietokoneiden rajoja, joten pelikehittäjien voi olettaa olevan ensimmäisten joukossa ottamassa käyttöön moniydinteknologiaa [GL05]. Tässä artikkelissa käsitellään ensin lyhyesti rinnakkaisuutta ja pelimoottoreita, minkä jälkeen tutustutaan korkean tason malleihin, joilla pelimoottoreita voi toteuttaa rinnakkaisesti. Sitten käsitellään vielä tarkemmin ehtoja, jotka määrittävät voiko tietyt tehtävät suorittaa rinnakkain, ja lopuksi esitellään rinnakkaisohjelmoinnin rajapinta OpenMP. 2 Rinnakkaisuus Rinnakkaisuus tarkoittaa useamman kuin yhden tehtävän suorittamista samanaikaisesti. Jos käytössä on vain yksi prosessori, voidaan rinnakkaisuutta toteuttaa moniajolla (multitasking), jossa rinnakkain suoritettavat tehtävät jakavat prosessorin ja suoritettavaa tehtävää vaihdetaan hyvin nopeasti. Jos taas käytössä on useampi prosessori, voidaan ajaa yhtä montaa prosessia kuin on prosessoreita. Rinnakkaisohjelmointi on siis ohjelman jakamista useisiin rinnakkain suoritettaviin osiin. Peräkkäisohjelmassa puolestaan kaikki tehtävät suoritetaan peräkkäisessä järjestyksessä. Rinnakkaisohjelmoinnin tehtäviin kuuluu ongelman jakaminen rinnakkain suoritettaviin osiin, rinnakkaisten osien kommunikoinnin ja synkronisoinnin suunnittelu ja toisiinsa läheisesti liittyvien osien yhdistäminen [Fos95]. Etenkin olemassa olevaa

4 ohjelmaa muuttaessa on tärkeää tunnistaa, mitä osia voidaan suorittaa rinnakkain, ja pitää myös pystyä jakamaan ohjelma tällaisiin osiin Pelimoottorit Pelimoottorit ovat erikoistuneita väliohjelmistoja, jotka toimivat käyttöjärjestelmän ajurien ja pelin toimintalogiikan välissä. Ne nopeuttavat pelikehitystä ja pienentävät pelin tekemisen riskiä, sillä tekniset ratkaisut voidaan erottaa pelimoottoriin jolloin niitä voidaan käyttää useissa peleissä. Pelimoottorit perustuvat useimmiten erilaisten komponenttien käyttöön. Tällaisia komponentteja ovat esimerkiksi fysiikka-, ääni-, verkko- ja grafiikkakomponentit. Tähän asti pelimoottorit on pitkälti optimoitu hyödyntämään mahdollisimman paljon yksiprosessorisen laitteiston tehoja, sillä pelisilmukan tehtävät ovat perinteisesti olleet peräkkäin suoritettavia. Viime vuosina kaksi- ja moniprosessoriset arkkitehtuurit ovat alkaneet yleistyä ja myös uusimmissa pelikonsoleissa on useita prosessoreita. Nyt pelimoottorien suunnittelijoiden täytyy ottaa entistä enemmän huomioon myös rinnakkaisuus, jos halutaan hyödyntää myös moniprosessoristen laitteistojen tehoja mahdollisimman hyvin. Rinnakkaisuuden lisääminen olemassa olevaan pelimoottoriin ei ole kuitenkaan mikään triviaali muutos, sillä suoritettavien tehtävien välillä on usein riippuvuuksia. 2.2 Amdahlin laki Amdahlin laki on helppo kaava laskea algoritmin tehonlisäys, jos osa siitä muutetaan rinnakkaiseksi. Amdahlin laki esittää perimmäisen rajan sille, paljonko on mahdollista nopeuttaa ohjelmiston suoritusta rinnakkaisuuden avulla. Rinnakkaisuudesta saatavaa nopeutusta rajoittaa peräkkäisen laskennan määrä. Nopeutuminen lasketaan kaavalla missä S = 1 (F + (1 F)/N) S = Rinnakkain suoritettavan algoritmin nopeuden suhde peräkkäin suoritettavaan algoritmiin F = Kuinka suurta osaa algoritmista ei voida suorittaa rinnakkain N = Prosessorien määrä

5 3 Kuva 1: Synkroninen funktionaalinen malli [Mön06]. Esimerkiksi, jos 50 % suorituksesta on rinnakkaista, on kahdella prosessorilla suoritus 1,3-kertaista verrattuna peräkkäissuoritukseen. Jos F eli peräkkäisen laskennan määrä lähestyy nollaa, lähestyy S N:ää eli algoritmi nopeutuu suoraan suhteessa käytössä olevien prosessorien määrään. 3 Pelimoottorien rinnakkaisuuden mallit On olemassa kaksi perusmallia jakaa ohjelma rinnakkaisiin osiin. Funktionaalisen rinnakkaisuuden mallissa ohjelma jaetaan tehtäviin, joita suoritetaan eri säikeissä. Rinnakkaisen tiedon mallissa puolestaan yritetään löytää tietoa, jolle voi suorittaa samoja tehtäviä rinnakkaisesti. Funktionaalinen rinnakkaisuus voidaan vielä jakaa synkroniseen ja asynkroniseen malliin. Peleissä funktionaalista rinnakkaisuuteen sopivia osa-alueita ovat esimerkiksi tekoäly, ääni, fysiikka, käyttöliittymä ja päivitys ja rinnakkaisen tiedon malliin sopivia tilanteita ovat muun muassa animointi, reitinetsintä, äänen prosessointi ja tietyt tekoälyn algoritmit [Dam07]. 3.1 Synkroninen funktionaalinen rinnakkaisuus Synkronisessa funktionaalisen rinnakkaisuuden mallissa lisätään rinnakkaisuutta yrittämällä löytää olemassa olevasta pelisilmukasta rinnakkaisia tehtäviä. Näiden tehtävien pitäisi mieluiten olla täysin riippumattomia toisistaan. Kuvassa 1 on pelisilmukka, jossa animaatio ja fysiikan laskenta suoritetaan rinnakkain [Mön06]. El Rhalibi et al. ovat kehitelleet kehystä, jolla automatisoida tehtävien jakaminen

6 4 Kuva 2: Asynkroninen funktionaalinen malli [Mön06]. prosessoreille. Ideana on jakaa toiminnallisuus pieniin tehtäviin, sen jälkeen muodostetaan kaavio, josta nähdään, mitkä tehtävät seuraavat toisiaan, minkä jälkeen tämä riippuvuuskaavio syötetään kehykselle. Kehys osaa aikatauluttaa tehtävien suorituksen ja jakaa ne säikeille ottaen huomioon käytettävissä olevan prosessorien määrän. Funktionaalisten mallien ongelmana on yleensä se, että ne voivat tukea vain rajallista määrää prosessoreja. Synkronisessa funktionaalisen rinnakkaisuuden mallissa rajoitteena on lisäksi se, että tehtävien pitäisi olla toisistaan mahdollisimman riippumattomia. Mallin odotettavissa oleva suoritusaika voidaan nähdä suoraan pelisilmukan pisimmän polun suoritusajasta. Polun pituus liittyy suoraan siihen, kuinka paljon rinnakkaisuutta silmukassa on. Mallin etuna on, että koska komponenttien pitää olla mahdollisimman riippumattomia toisistaan, ei olemassaolevia komponentteja yleensä tarvitse muuttaa paljoa. 3.2 Asynkroninen funktionaalinen rinnakkaisuus Gabb ja Lake [GL05] esittävät vaihtoehtoisen mallin eli asynkronisen funktionaalisen rinnakkaisuuden mallin. Tässä mallissa olennaista on, ettei se sisällä pelisilmukkaa, vaan peliä eteenpäinajavat tehtävät päivittyvät omaa tahtiaan ja käyttävät viimeisintä saatavilla olevaa tietoa. Tällä tavoin saa tehokkaasti toisistaan riippuvat tehtävät rinnakkaisiksi.

7 5 Myös asynkronisen mallin skaalautuvuutta rajoittaa se, montako tehtävää pelimoottorista voidaan löytää. Koska säikeiden välinen kommunikaatio tapahtuu viimeisintä saatavilla olevaa tietoa käyttäen, ei tehtävien tässä mallissa tarvitse olla toisistaan riippumattomia. Tämän vuoksi asynkroninen malli voi tukea suurempaa määrää tehtäviä ja täten myös suurempaa määrää prosessoreita kuin synkroninen malli. Tässä mallissa tehtävien välisessä kommunikaatiossa ongelmaksi muodostuu oikea ajoitus. Optimaalisessa tilanteessa tietoa päivittävä tehtävä lopettaa suorituksensa juuri, ennen kuin sitä tarvitseva tehtävä aloittaa suorituksensa. Huonolla tuurilla tietoa tarvitseva tehtävä aloittaa juuri, ennen kuin sitä päivittävä tehtävä lopettaa suorituksensa. Jos kyseessä olisi esimerkiksi käyttäjän syötteitä lukeva tehtävä ja näyttöä päivittävä tehtävä, kestäisi jälkimmäisessä tilanteessa lähes kaksinkertainen aika siihen, että näyttö päivittyy syötteiden perusteella, verrattuna optimaaliseen tilanteeseen [Mön06]. Gabb ja Lake ehdottavatkin, että joidenkin tehtävien suoritus kannattaa kalibroida tapahtumaan useammin kuin toisten. Tämä vähentää ongelman merkittävyyttä, mutta ei poista sitä kokonaan. Tässä mallissa suorituskyky ei riipu yhtä paljoa ohjelman peräkkäin suoritettavista osista, koska malli ei vaadi juurikaan synkronisointia rinnakkaisten tehtävien välille. Näin ollen suorituskykyä rajoittaa lähinnä se, voidaanko löytää tarpeeksi rinnakkaisia tehtäviä, sillä tehtävien pitäisi olla hyvin tasapainossa. Asynkronisessa mallissa joudutaan olemassa olevia komponentteja todennäköisesti muuttamaan, että ne toimivat tilanteessa, jossa käytetään viimeisintä saatavilla olevaa tietoa komponenttien välisessä kommunikaatiossa. Tarvitaan lisäksi säieturvallinen tapa tiedustella tilojen viimeisimpiä päivityksiä. Näiden muutosten toteuttamisen ei kuitenkaan pitäisi olla vaikeaa. 3.3 Rinnakkaisen tiedon malli Rinnakkaisen tiedon mallissa etsitään tietoa, jolle voi suorittaa samoja tehtäviä rinnakkain. Pelimoottoreissa tämä tarkoittaa yleensä pelin hahmoja. Kuvassa 3 on esimerkki, jossa käytössä on kaksi säiettä. Näistä toinen hoitaa puolet hahmoista ja toinen puolet. Optimaalisessa tilanteessa pelimoottori käyttää yhtä monta säiettä kuin on prosessoreita käytettävissä. Mallissa olennaista on, miten hahmot jaetaan säikeille, sillä säikeiden pitäisi olla mahdollisimman tasapainossa, että laskenta jakautuu tasaisesti kaikille prosessoreille. Pitää ottaa huomioon myös, miten eri säikeissä olevien hahmojen kommunikaatio

8 6 Kuva 3: Rinnakkaisen tiedon malli [Mön06]. hoidetaan. Synkronoitu kommunikaatio vähentäisi rinnakkaisuutta, joten suositeltavampaa on käyttää asynkronisen mallin tapaan viimeisimpiä päivityksiä viestinvälityksessä [Mön06]. Säikeiden välistä kommunikaatiota voi myös vähentää sijoittamalla samaan säikeeseen hahmot, jotka todennäköisimmin kommunikoivat keskenään. Koska hahmot useimmiten kommunikoivat naapuriensa kanssa, yksi vaihtoehto olisi ryhmittää hahmot sijainnin mukaan. Rinnakkaisen tiedon malli on erittäin skaalautuva, koska säikeiden määrä voidaan automaattisesti valita sen mukaan, montako prosessoria järjestelmässä on, ja ainoat osat pelisilmukassa, joita ei voi suorittaa rinnakkaisesta, ovat ne, jotka eivät ole suoraan tekemisissä pelin hahmojen kanssa. Funktionaalisen rinnakkaisuuden mallit pystyvät paremmin hyödyntämään prosessoritehoja silloin, kun käytettävissä on korkeintaan muutama prosessori, mutta rinnakkaisen tiedon mallia tarvitaan, jos halutaan kunnolla hyödyntää tulevaisuuden prosessorien kymmeniä ytimiä [Mön06]. Rinnakkaisen tiedon mallin tehokkuus riippuu suoraan siitä, kuinka suuri osa pelimoottorista saadaan rinnakkaiseksi tiedon suhteen. Jos pelimoottori pystyy hyödyntämään rinnakkaisen tiedon mallia suurimmalle osalle pelisilmukasta, on tämä mallin suorituskyky näistä kolmesta mallista paras. Suurin puute on, että tarvitaan komponentteja, jotka tukevat tiedon rinnakkaisuutta. Joillekin komponenteille pitää esimerkiksi pystyä tekemään useita päivityksiä rinnakkaisesti.

9 4 Tehtävien väliset riippuvuudet 7 Ideaalisessa rinnakkaisessa ohjelmassa on toisistaan täysin riippumattomia tehtäviä, jotka voidaan suorittaa kaikki samaan aikaan. Useimmiten osa tehtävistä tarvitsee toisten tehtävien tarjoamaa tietoa, joten niiden täytyy odottaa näiden toisten tehtävien suorituksen päättymistä. Tehtäväriippuvuuskaaviolla voidaan ilmaista tällaisia tehtävien välisiä riippuvuuksia ja niiden suoritusjärjestystä suhteessa toisiinsa. Riippuvuusanalyysillä pyritään löytämään ne tehtävät, joita ei voi suorittaa rinnakkain, ja Bernsteinin ehdoilla puolestaan voidaan tunnistaa sellaiset tehtävät, jotka voidaan suorittaa rinnakkain. 4.1 Rinnakkaisuuden ehtoja Yksi keskeisistä riippuvuuksista on tietoriippuvuus, joka voidaan jakaa viiteen alikategoriaan [REC05]: Kahden tehtävän S1 ja S2 välillä on suoritusriippuvuus, jos niiden välillä on suorituspolku ja vähintään yksi tehtävän S1 tulosteista toimii tehtävän S2 syötteenä Tehtävien S1 ja S2 välillä on antiriippuvuus, jos S2 seuraa suorituksessa tehtävää S1 ja S2:sen tulosteet vaikuttavat tietoon, jota tehtävä S1 käyttää syötteenään Tulosteriippuvuus on silloin, jos tehtävät S1 ja S2 kirjoittavat samaan muistiosoitteeseen. I/O riippuvuus on silloin, jos kaksi tehtävää käyttää samaa tiedostoa. Tuntematon riippuvuus tarkoittaa sitä, että tehtävien suhteet riippuvat tiedosta, johon viitataan epäsuorasti Hallintariippuvuus on oma riippuvuuskategoriansa, joka estää rinnakkaisuuden komentojen välillä. Bernsteinin ehdot ovat kategorialtaan resurssiriippuvuutta, koska ne käsittelevät prosesseja niiden muistiosoitteiden suhteen, joista ne lukevat ja joihin ne kirjoittavat. Ehdot ovat: Prosessin P1 lukemien muistiosoitteiden ja prosessin P2 muokkaamien muistiosoitteiden leikkauksen pitää olla tyhjä

10 8 Prosessin P2 lukemien muistiosoitteiden ja prosessin P1 muokkaamien muistiosoitteiden leikkauksen pitää olla tyhjä Prosessin P1 muokkaamien muistiosoitteiden ja prosessin P2 muokkaamien muistiosoitteiden leikkauksen pitää olla tyhjä Analysoimalla tietoriippuvuutta, hallintariippuvuutta ja resurssiriippuvuutta voidaan tunnistaa rinnakkaisuuden mahdollisuudet. El Rhalibi et al. [REC05] ovat kehittäneet rinnakkaisen peliohjelmoinnin kehyksen (Concurrent Game Programming Framework), jolla voi mallintaa pelejä syklisinä tehtäväriippuvaisina kaavioina ja aikatauluttajan, jolla suorittaa pelien tehtävät skaalattavassa moniydinprosessoriarkkitehtuurissa. Jotta aiemmin täysin peräkkäissuoritettavasta pelisilmukasta voidaan tunnistaa rinnakkaiset osiot, tarvitaan käsiteltyjä rinnakkaisuuden malleja. Kun niiden avulla on määritelty kunkin tehtävän riippuvuussuhteet, voidaan pelin tehtävistä muodostaa syklinen riippuvuuskaavio. Tämän jälkeen he toteuttivat kaavion mukaisesti suoritettavan pelin rinnakkaisen peliohjelmoinnin kehyksessä. He testasivat kehyksen suorituskykyä sekä kaksi- että neliprosessorisella järjestelmällä ja havaitsivat, että riippuvuuskaaviomalli vaatii vähintää kolme prosessoria, ennen kuin siltä voidaan olettaa parempaa suorituskykyä kuin vastaavalta peräkkäissilmukassa suoritettavalta ohjelmalta [REC05]. 5 OpenMP OpenMP (Open Multi-Processing) on ohjelmointirajapinta, joka tukee jaettua muistia käyttävää rinnakkaisohjelmointia useilla eri alustoilla, kuten Windows ja Unix. Se sisältää kääntäjädirektiivejä, kirjastorutiineja ja ympäristomuuttujia, jotka vaikuttavat suoritusaikaiseen käyttäytymiseen. C/C++ tai Fortran-kieliseen ohjelmaan lisätään kommentteja muistuttavia pragmoja eli kääntäjädirektiivejä, jotka ohjaavat työnjakoa säikeiden kesken ja vaikuttavat muuttujien näkyvyyteen. Jos halutaan esimerkiksi jakaa kaikkia hahmoja vuorollaan päivittävän metodin suoritus useille prosessoreille, riittää OpenMP:ssä yhden koodirivin lisääminen for-silmukan eteen, kun muuten jouduttaisiin mahdollisesti tekemään oma for-silmukka jokaiselle prosessorille. #pragma omp parallel for for (int i = 0; i < numparticles; i++) UpdateParticles(particle[i]);

11 9 Kuva 4: Säiejoukon käyttö OpenMP:ssä [Bar] OpenMP:tä tukeva kääntäjä luo koodia, joka automaattisesti jakaa silmukan useiksi rinnakkaisiksi osioiksi, jotka suoritetaan riippumatta toisistaan. Osioiden määrä riippuu prosessorien määrästä ja ohjelmoijan tekemistä määrityksistä. Kun yllä olevaa silmukkaa testattiin käyttämällä olioiden määränä sataatuhatta ja antamalla päivitykselle tietty standardiaika, havaittiin tämän silmukan suorituksen tehostuneen OpenMP:tä käyttämällä lähes kolminkertaiseksi kaksiytimisessä Pentiumissa ja lähes viisinkertaiseksi kolmiyritimisessä Xbox 360:ssa [Ise06]. Suorituskyky kasvoi käytännössä yhtä paljon kuin käyttämällä Windowsin säiekutsuja ja synkronisointimäärityksiä, jotka kuitenkin vaativat yli 60 koodiriviä OpenMP:n yhteen verrattuna. OpenMP:tä voi hyödyntää pelissä esimerkiksi törmäyksentunnistussilmukassa. Koska silmukan suorituksen kesto vaihtelee riippuen siitä, onko hahmo törmäämässä vai ei, voidaan käyttää dynaamista aikataulutusta, jolloin kääntäjä aikatauluttaa säiejoukkion vasta suoritusaikana. OpenMP:tä käyttäen saatiin huomattavaa parannusta suorituskykyyn verrattuna alkuperäiseen sarjallisesti suoritettavaan silmukkaan [Ise06]. OpenMP:n etuna on, että tekniikka on täysin alustariippumatonta, sillä jos kääntäjä ei tue OpenMP:tä, se vain jättää #pragma-alkuisen rivin huomiotta. Jos taas kääntäjä tukee OpenMP:tä, lisää se automaattisesti kohdearkkitehtuurin vaatimat rinnakkaisuuden rakenteet [Ise06]. Jos alustalla ei olekaan useita prosessoreita, jää OpenMP:n aiheuttama lisärasite todennäköisesti hyvin pieneksi [Ise06]. Lisäksi koodi on huomattavasti helppolukuisempaa, kuin normaali monisäikeinen koodi. OpenMP:n idea perustuu säiejoukkoon. Kun ohjelman suoritus tulee rinnakkaiseen osioon, säiejoukko aktivoituu ja suoritettuaan työnsä, jäävät odottamaan seuraavaa rinnakkaista osiota. Koska säikeiden luonti kuluttaa resursseja, luodaan useimmissa OpenMP:n toteutuksissa säikeet ensimmäisellä käyttökerralla, minkä jälkeen niitä uudelleenkäytetään koko ohjelman suorituksen ajan. Kuvassa 4 nähdään, miten pääsäie herättää rinnakkaisen osion alkaessa säiejoukon, joka on aktiivisena vain rinnakkaisen osion ajan.

12 10 Useimmiten OpenMP:llä pyritään saamaan tieto rinnakkaiseksi, kuten silmukkaesimerkissä, mutta sitä voidaan käyttää myös funktionaaliseen rinnakkaisuuteen. Funktioiden jakaminen kahteen säikeeseen onnistuu helposti seuraavalla koodilla: #pragma omp parallel sections { #pragma omp section { Function1(); Function2(); } #pragma omp section { Function3(); Function4(); } } //tässä odotetaan kaikkien säikeiden suorituksen päättymistä Tässä ratkaisussa osioiden määrä kuitenkin rajoittaa luotavien säikeiden määrää, joten kaikkia prosessoreita ei välttämättä päästä hyödyntämään, ja jos prosessoreita on vähemmän kuin osioita, päättää OpenMP:n aikatauluttaja, missä järjestyksessä osiot suoritetaan [And07]. Esimerkiksi Intelin C++-kääntäjä sallii tehtävien laittamisen jonoon säiealtaaseen. Tällöin on helpompi hyödyntää kaikkia järjestelmän prosessoreita. Alla olevassa koodiesimerkissä näkee, miten kukin funktio voidaan asettaa jonoon. Prosessorin vapautuessa pääsee jonossa seuraavana oleva tehtävä suoritukseen. Pitää kuitenkin hyvin miettiä, miten tehtävät jonoon asettaaa, sillä säikeiden määrä ei ole välttämättä ennalta tiedossa. #pragma omp parallel sections { #pragma intel omp task Function1(); #pragma intel omp task Function2(); #pragma intel omp task Function3(); #pragma intel omp task Function4(); } OpenMP:n huonona puolena voi mainita sen, ettei kääntäjä tarkista, toimiiko koodi rinnakkaisena niinkuin pitäisi. Rinnakkaiset osiot voidaan suorittaa missä järjestyk-

13 11 sessä tahansa, joten ohjelmoijan pitää pitää huoli, että OpenMP:tä käytetään vain sellaisille rakenteille, jotka eivät ole riippuvaisia suoritusjärjestyksestä. Tämän lisäksi myös virheidenetsintä saattaa olla erittäin vaikeaa, koska OpenMP:n sisäiseen toimintaan ei suoritusaikana pääse käsiksi [Ise06]. 6 Yhteenveto Koska prosessorien kellotustaajuuden kasvaminen on melko lailla pysähtynyt, täytyy lisätehoja hankkia muilla keinoin. Tämän vuoksi moniydinprosessorit ovat alkaneet yleistyä niin tietokoneissa kuin pelikonsoleissakin. Prosessorien tehoa jää kuitenkin helposti hyödyntämättä, jos ohjelmistokehityksessä ei ole otettu rinnakkaisuutta huomioon. Useista prosessoreista saatava hyöty on riippuvainen siitä, kuinka suuri osa ohjelman tehtävistä voidaan suorittaa rinnakkain. On olemassa kaksi perusmallia jakaa ohjelmistot rinnakkain suoritettaviksi tehtäviksi: funktionaalisen riippuvuuden malli ja riippuvaisen tiedon malli. Funktionaalinen voidaan lisäksi jakaa synkroniseen ja asynkroniseen malliin. Synkronisessa voidaan suorittaa vaikkapa tekoälytehtävää ja fysiikkatehtävää rinnakkain, mutta tässä mallissa pelisilmukka muistuttaa edelleen suurelta osin perinteistä pelisilmukkaa. Asynkronisessa mallissa puolestaan tehtäviä suoritetaan omaa tahtiaan omissa säikeissään ja jos tehtävä tarvitsee tietoa toiselta tehtävältä, käyttää se viimeisintä saatavilla olevaa tietoa. Riippuvaisen tiedon mallissa puolestaan jaetaan pelistä tiettyjen kohteiden, jotka käsittelevät samaa tietoa, suoritus useisiin säikeisiin. Rinnakkaisohjelmoinnissa on olennaista ottaa huomioon tehtävien väliset riippuvuudet. Tällaisia riippuvuuksia on esimerkiksi, että tehtävä tarvitsee toisen tehtävän tuottamaa tietoa tai että kaksi tehtävää tallentaa tietoa samaan muistiosoitteeseen. Bernsteinin ehdot tarkastavat, etteivät tehtävät käsittele samoja muistiosoitteita. OpenMP on helppo ja nopea tapa hyödyntää moniydinprosessoreita. Vain yhdellä koodirivilla saa esimerkiksi muutettua silmukan suoritusta niin, että se jaetaankin useisiin osioihin, jotka suoritetaan rinnakkain toisistaan riippumatta. Huonona puolena mainittakoon, että kääntäjä ei juurikaan tarkasta, toimiiko koodi oikein rinnakkaisena. Peleissä OpenMP:tä voi hyödyntää muun muassa törmäyksen havaitsemisessa, reitinetsinnässä, simulaatioissa ja signaalinkäsittelyssä.

14 Lähteet 12 And07 Bar Dam07 Eld06 Fos95 Andrews, J., Threading basics for games. Tekninen raportti, Intel R Software Network, URL com/articles/eng/2601.htm. [ ]. Barney, B., Openmp tutorial. URL tutorials/openmp/. Damon, W., Multithreaded game programming and hyper-threading technology. Tekninen raportti, Intel R Software Network, URL htm. [ ]. Eldawy, M., Game programming in a multi core world. Tekninen raportti, Academic ADL Co-Lab, URL adlcommunity.net/file.php/ 23/GrooveFiles/Games%20Madison/report%20Multithreading.pdf. Foster, I., Designing and building parallel programs. Addison-Wesley Reading, Mass, GL05 Gabb, H. ja Lake, A., Threading 3d game engine basics, URL 01.shtml. [ ]. HM Ise06 Harvey, M. ja Marshall, C., Scheduling Game Events. Game Programming Gems, 3, sivut Isensee, P., Game Programming Gems, Vol. 6, chapter Utilizing Multicore Processors with OpenMP. Charles River Media. Mön06 Mönkkönen, V., Multithreaded game engine architectures, URL 01.shtml. [ ]. REC05 Rhalibi, A. E., England, D. ja Costa, S., Game engineering for a multiprocessor architecture. Changing Views: Worlds in Play, de Castell Suzanne ja Jennifer, J., toimittajat, Vancouver, June 2005, University of Vancouver, sivu 12, URL html?chid= pdf.

15 13 Sut05 TBN06 Sutter, H., The free lunch is over: A fundamental turn toward concurrency in software. Dr. Dobbś Journal, 30,3(2005), sivut Tulip, J., Bekkema, J. ja Nesbitt, K., Multi-threaded game engine design. IE 06: Procedings of the 3rd Australasian conference on Interactive entertainment, Murdoch University, Australia, Australia, 2006, Murdoch University, sivut 9 14.

Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi

Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi Rinnakkaisuuden hyväksikäyttö peleissä Paula Kemppi 24.4.2008 Esityksen rakenne Johdantoa Rinnakkaisuus Pelimoottorien rinnakkaisuuden mallit Funktionaalisen rinnakkaisuuden malli Rinnakkaisen tiedon malli

Lisätiedot

Rinnakkaistietokoneet luento S

Rinnakkaistietokoneet luento S Rinnakkaistietokoneet luento 5 521475S Silmukalliset ohjelmat Silmukat joissa ei ole riippuvuussyklejä voidaan vektoroida eli suorittaa silmukan vektorointi Jokainen yksittäinen käsky silmukan rungossa

Lisätiedot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi 17.5.2006 1/5 Oppimistavoitteet kurssilla Rinnakkaisohjelmointi Rinnakkaisuus ja rinnakkaisuuden soveltaminen tietojenkäsittelyjärjestelmissä Kurssin Tietokoneen toiminta perusteella ymmärtää, miten ohjelman

Lisätiedot

Intel Threading Building Blocks

Intel Threading Building Blocks Intel Threading Building Blocks Markku Vajaranta Esko Pekkarinen TBB Pähkinänkuoressa C++ luokkamallinen rinnakkaisuus Abstrahoi rinnakkaisuutta korkean tason tehtävät (tasks) ja niiden skedulointi suuri

Lisätiedot

Kontrollilaitteet. Arsenaali

Kontrollilaitteet. Arsenaali Arsenaali Kontrollilaitteet Tietokonepeleissä käytettäviä kontrollilaitteita on valtava määrä Kaikilla alustoilla, joilla pelejä pelataan on jokin vakio kontrolleri PC: Hiiri ja näppäimistö Konsolit: Controller

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

MONISÄIKEISTYS PELIMOOTTOREISSA

MONISÄIKEISTYS PELIMOOTTOREISSA Ville Mönkkönen MONISÄIKEISTYS PELIMOOTTOREISSA Tietojärjestelmätieteen Pro gradu -tutkielma 10.06.2006 Jyväskylän yliopisto Tietojenkäsittelytieteiden laitos Jyväskylä 2 TIIVISTELMÄ Mönkkönen, Ville Samuli

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen, tommi.mikkonen@tut.fi

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen, tommi.mikkonen@tut.fi 5. Luento: Rinnakkaisuus ja reaaliaika Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Perusongelmat Jako prosesseihin Reaaliaika Rinnakkaisuus Rinnakkaisuus tarkoittaa tässä yhteydessä useamman kuin yhden

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Luento

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön? Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön? 2013-2014 Lasse Lensu 2 Systeemiohjelmat ovat tietokoneen laitteistoa lähellä olevia ohjelmia,

Lisätiedot

Peliohjelmointi: Kontrollilaitteet. Teppo Soininen

Peliohjelmointi: Kontrollilaitteet. Teppo Soininen Peliohjelmointi: Kontrollilaitteet Teppo Soininen Lähteet: Core Techniques and Algorithms in Game Programming, MSDN, www.xbox.com, www.playstation.com Arsenaali Tietokonepeleissä käytettäviä kontrollilaitteita

Lisätiedot

Käyttöjärjestelmät: poissulkeminen ja synkronointi

Käyttöjärjestelmät: poissulkeminen ja synkronointi Käyttöjärjestelmät: poissulkeminen ja synkronointi Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi Lähteet Stallings, W. Operating Systems Haikala, Järvinen, Käyttöjärjestelmät Eri Web-lähteet

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

7.4 Sormenjälkitekniikka

7.4 Sormenjälkitekniikka 7.4 Sormenjälkitekniikka Tarkastellaan ensimmäisenä esimerkkinä pitkien merkkijonojen vertailua. Ongelma: Ajatellaan, että kaksi n-bittistä (n 1) tiedostoa x ja y sijaitsee eri tietokoneilla. Halutaan

Lisätiedot

Ohjelmistojen suunnittelu

Ohjelmistojen suunnittelu Ohjelmistojen suunnittelu 581259 Ohjelmistotuotanto 154 Ohjelmistojen suunnittelu Software design is a creative activity in which you identify software components and their relationships, based on a customer

Lisätiedot

Rinnakkaistietokoneet luento S

Rinnakkaistietokoneet luento S Rinnakkaistietokoneet luento 3 521475S Rinnakkaiset Numeeriset Algoritmit Silmukattomat algoritmit Eivät sisällä silmukka lauseita kuten DO,FOR tai WHILE Nopea suorittaa Yleisimmässä muodossa koostuu peräkkäisistä

Lisätiedot

Ohjelmointi 1. Kumppanit

Ohjelmointi 1. Kumppanit Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5

Lisätiedot

CUDA. Moniydinohjelmointi 17.4.2012 Mikko Honkonen

CUDA. Moniydinohjelmointi 17.4.2012 Mikko Honkonen CUDA Moniydinohjelmointi 17.4.2012 Mikko Honkonen Yleisesti Compute Unified Device Architecture Ideana GPGPU eli grafiikkaprosessorin käyttö yleiseen laskentaan. Nvidian täysin suljetusti kehittämä. Vuoden

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Rinnakkaistietokoneet luento S

Rinnakkaistietokoneet luento S Rinnakkaistietokoneet luento 4 521475S Rinnakkaiset ei-numeeriset algoritmit: transitiivisulkeuma (transitive closure) Oletetaan suunnattu graafi G = (V,E) ja halutaan tietää onko olemassa kahta pistettä

Lisätiedot

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 Tietorakenteet ja algoritmit (syksy 2015) 58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Graafisen käyttöliittymän ohjelmointi Syksy 2013 TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Syksy 2013 Luento 10 Rinnakkaisuus käyttöliittymäohjelmoinnissa Juha-Matti Vanhatupa Rinnakkaisuus ja käyttöliittymäohjelmointi

Lisätiedot

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14 Arkkitehtuurikuvaus Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy Ryhmä 14 Muutoshistoria Versio Pvm Päivittäjä Muutos 0.4 1.11.2007 Matti Eerola 0.3 18.10.2007 Matti Eerola 0.2

Lisätiedot

Palvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät

Palvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät Sulautetut järjestelmät Luku 2 Sivu 1 (??) Palvelut Käyttöjärjestelmän tehtävänä on tarjota ohjelmoijalla erilaisia palveluita Tyypillisin palvelu, jota sulautetut käyttöjärjestelmät tarjoavat on prosessien

Lisätiedot

Esimerkkejä vaativuusluokista

Esimerkkejä vaativuusluokista Esimerkkejä vaativuusluokista Seuraaville kalvoille on poimittu joitain esimerkkejä havainnollistamaan algoritmien aikavaativuusluokkia. Esimerkit on valittu melko mielivaltaisesti laitoksella tehtävään

Lisätiedot

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat Linux rakenne Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat Linux ydin Ytimen (kernel) päätehtävä on tarjota rajapinta

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2 TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos TKT-3200 Tietokonetekniikka I Harjoitustyö 4: Cache, osa 2.. 2010 Ryhmä Nimi Op.num. 1 Valmistautuminen Cache-työn toisessa osassa

Lisätiedot

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER Group 16 Ville Laatu Henri Myllyoja - i SISÄLLYSLUETTELO 1. DEBUGGERI YLEISESTI... II 1.1 Debuggerin käyttämien... ii 1.2 Debuggerin käynnistäminen... ii

Lisätiedot

Rinnakkaisohjelmointi.NET-ympäristössä

Rinnakkaisohjelmointi.NET-ympäristössä Rinnakkaisohjelmointi.NET-ympäristössä Aleksi Kontkanen Juho Lappalainen Opinnäytetyö Tieto- ja viestintätekniikka Insinööri (AMK) 2014 LAPIN AMMATTIKORKEAKOULU TEKNIIKKA JA LIIKENNE Tieto- ja viestintätekniikka

Lisätiedot

Yleisen PSCR-menetelmän toteutus ohjelmoitavalla näytönoh

Yleisen PSCR-menetelmän toteutus ohjelmoitavalla näytönoh Yleisen n toteutus ohjelmoitavalla näytönohjaimella Mirko Myllykoski mirko.myllykoski@jyu.fi 15.2.2011 Mitä teen? Tarkoituksena toteuttaa (ja osin jo toteutettukin) stä versio ohjelmoitavalle näytönohjaimelle

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 19: Rinnakkaisuus Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 24. 3. 2011 Sisältö 1 Säikeet 2 Lukot 3 Monitorit 4 Muuta säikeisiin

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2

Lisätiedot

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka Rinnakkaisuus parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa Rinnakkaisuuden etuja: laskennan nopeutuminen (sarjoittuvat operaatiojonot) ilmaisuvoima (ongelman

Lisätiedot

Rinnakkaisuus. Tarkastelemme, miten algoritmien suoritusta voi nopeuttaa käyttämällä useaa laskentayksikköä samanaikaisesti.

Rinnakkaisuus. Tarkastelemme, miten algoritmien suoritusta voi nopeuttaa käyttämällä useaa laskentayksikköä samanaikaisesti. Rinnakkaisuus Tarkastelemme, miten algoritmien suoritusta voi nopeuttaa käyttämällä useaa laskentayksikköä samanaikaisesti. Miksi rinnakkaisuus on tärkeää? Millaisia nopeutuksia rinnakkaistamalla ylipäänsä

Lisätiedot

4. Luento: Prosessit ja säikeets. Tommi Mikkonen, tommi.mikkonen@tut.fi

4. Luento: Prosessit ja säikeets. Tommi Mikkonen, tommi.mikkonen@tut.fi 4. Luento: Prosessit ja säikeets Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Prosessi Säikeet Keskeytykset Keskeytyskäsittely Käyttöjärjestelmäkutsut Prosessielementti Prosessin hallinta Suunnittelunäkökohtia

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 1 TIE-20100 Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 2 Lähteet Luentomoniste pohjautuu vahvasti prof. Antti Valmarin vanhaan luentomonisteeseen

Lisätiedot

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Graafit ja verkot Suuntamaton graafi: eli haaroja Joukko solmuja ja joukko järjestämättömiä solmupareja Suunnattu graafi: Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Haaran päätesolmut:

Lisätiedot

Datatähti 2019 loppu

Datatähti 2019 loppu Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

Joonas Haapala Ohjaaja: DI Heikki Puustinen Valvoja: Prof. Kai Virtanen

Joonas Haapala Ohjaaja: DI Heikki Puustinen Valvoja: Prof. Kai Virtanen Hävittäjälentokoneen reitin suunnittelussa käytettävän dynaamisen ja monitavoitteisen verkko-optimointitehtävän ratkaiseminen A*-algoritmilla (valmiin työn esittely) Joonas Haapala 8.6.2015 Ohjaaja: DI

Lisätiedot

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML AJAX-konsepti AJAX Asynchronous JavaScript And XML Viimeisin muoti-ilmiö web-ohjelmoinissa, termi Ajax tuli käyttöön vuoden 2005 aikana Joukko teknologioita, joiden avulla voidaan toteuttaa uudenlaisen

Lisätiedot

Ohjelmistojen mallintaminen, sekvenssikaaviot

Ohjelmistojen mallintaminen, sekvenssikaaviot 582104 - Ohjelmistojen mallintaminen, sekvenssikaaviot 1 Vuorovaikutussuunnittelu Oliojärjestelmän toiminta perustuu olioiden vuorovaikutukseen ja yhteistyöhön Olioiden yhteistyö toteutuu operaatioiden

Lisätiedot

Turingin koneen laajennuksia

Turingin koneen laajennuksia Turingin koneen laajennuksia Turingin koneen määritelmään voidaan tehdä erilaisia muutoksia siten että edelleen voidaan tunnistaa tasan sama luokka kieliä. Moniuraiset Turingin koneet: nauha jakautuu k

Lisätiedot

Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle,

Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle, Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle, sovellusohjelmille ja käyttäjille? 2012-2013 Lasse Lensu

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu 811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 3, Ratkaisu Harjoituksessa käsitellään algoritmien aikakompleksisuutta. Tehtävä 3.1 Kuvitteelliset algoritmit A ja B lajittelevat syötteenään

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

UML:n yleiskatsaus. UML:n osat:

UML:n yleiskatsaus. UML:n osat: UML:n yleiskatsaus - voidaan hyödyntää hyvin laajasti. - sopii liiketoimintamallinnukseen, ohjelmistomallinnukseen sen jokaiseen vaiheeseen tai minkä tahansa pysyviä ja muuttuvia ominaisuuksia sisältävän

Lisätiedot

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat Sisällys 12. Javan toistorakenteet Ylstä toistorakentsta. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirhtä. Silmukan rajat asetettu kierroksen

Lisätiedot

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi Solidity älysopimus ohjelmointi Sopimus suuntautunut ohjelmointi Merkle puu Kertausta eiliseltä Solidity on korkean tason älysopimus ohjelmointikieli Muistuttaa olio-ohjelmointia Javalla Sopimuskoodi on

Lisätiedot

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto Harri Laine Helsingin yliopisto Suosion syy? Yksinkertaisuus vähän käsitteitä helppo hahmottaa Selkeä matemaattinen perusta ei tulkintaongelmia kuten esim. UML:ssä teoria käytäntö kaavio: R(A 1 :D 1, A

Lisätiedot

Ohjelmiston testaus ja laatu. Testausmenetelmiä

Ohjelmiston testaus ja laatu. Testausmenetelmiä Ohjelmiston testaus ja laatu Testausmenetelmiä Testausmenetelmiä - 1 Testauksen menetelmien päälähestymistapoina ovat black-box testi testaaja ei voi tutkia lähdekoodia testaus perustuu sovellukselle suunnitteluvaiheessa

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 IX Rinnakkainen ohjelmointi Sisältö 1. Yleistä rinnakkaisuudesta 2. Prosesseista ja säikeistä 3. Rinnakkaisen ohjelman oikeellisuudesta 4. Rinnakkaisuuden

Lisätiedot

Antitammirobotti. Antti Meriläinen Martin Pärtel 29. toukokuuta 2009

Antitammirobotti. Antti Meriläinen Martin Pärtel 29. toukokuuta 2009 Antitammirobotti Antti Meriläinen Martin Pärtel 29. toukokuuta 2009 Helsingin yliopisto Tietojenkäsittelytieteen laitos Robottiohjelmoinnin harjoitustyö

Lisätiedot

Verkon värittämistä hajautetuilla algoritmeilla

Verkon värittämistä hajautetuilla algoritmeilla Verkon värittämistä hajautetuilla algoritmeilla 5 12 30 19 72 34 Jukka Suomela 15 77 18 4 9. tammikuuta 2012 19 2 68 Verkko 2 Verkko solmu 3 Verkko solmu kaari 4 Hajautettu järjestelmä solmu (tietokone)

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Ohjelmointi 1 / syksy /20: IDE

Ohjelmointi 1 / syksy /20: IDE Ohjelmointi 1 / syksy 2007 10/20: IDE Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Tämän luennon rakenne

Lisätiedot

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä Tietojenkäsittelyn perusteet 2 Lisää käyttöjärjestelmistä 2011-02-09 Leena Ikonen 1 Systeemiohjelmat Systeemiohjelmiin kuuluvat Kääntäjät ja tulkit (+debuggerit) Käyttöjärjestelmä Linkittäjät Lataajat

Lisätiedot

Tulostimen hallintaohjelmisto MarkVision

Tulostimen hallintaohjelmisto MarkVision Tulostinohjelmisto ja apuohjelmat 1 Tulostimen hallintaohjelmisto MarkVision Windows 95/98/2000-, Windows NT 4.0- ja Macintosh-käyttöjärjestelmien MarkVision toimitetaan tulostimen mukana Drivers, MarkVision

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

Febdok 6.0, Uudet ominaisuudet OHJEISTUS

Febdok 6.0, Uudet ominaisuudet OHJEISTUS Febdok 6.0, Uudet ominaisuudet OHJEISTUS Sisällys 1 YLEISTÄ 1 2 ESIMERKIT 2 2.1 LAITTEISTON TIEDOT 2 2.2 SYÖTÖN VALINTA 3 2.3 PJ-LIITTYMÄ 4 2.4 SJ-LIITTYMÄ 5 2.5 GENERAATTORIJAKELU 8 2.6 SUOJALAITTEET

Lisätiedot

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät

Lisätiedot

TIE Principles of Programming Languages CEYLON

TIE Principles of Programming Languages CEYLON TIE-20306 Principles of Programming Languages CEYLON SISÄLLYSLUETTELO 1. YLEISTIETOA KIELESTÄ JA SEN KEHITTÄMISESTÄ... 1 2. CEYLONIN OMINAISUUKSIA... 2 2.1 Modulaarisuus... 2 2.2 Tyypit... 2 2.3 Muita

Lisätiedot

Erlang. Miika Heinonen ja Lassi Uosukainen (Group 92) TIE Principles of Programming Languages Seminaariessee. Yleistä

Erlang. Miika Heinonen ja Lassi Uosukainen (Group 92) TIE Principles of Programming Languages Seminaariessee. Yleistä Yleistä Erlang Miika Heinonen ja Lassi Uosukainen (Group 92) TIE-20306 Principles of Programming Languages Seminaariessee Erlang on Ericcsonin kehittämä funktionaalinen ohjelmointikieli ja ajoympäristö,

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 6 Sarjojen suppeneminen Kiinnostuksen kohteena on edelleen sarja a k = a + a 2 + a 3 + a 4 +... k= Tämä summa on mahdollisesti äärellisenä olemassa, jolloin sanotaan

Lisätiedot

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

Lisätiedot

Nollasummapelit ja bayesilaiset pelit

Nollasummapelit ja bayesilaiset pelit Nollasummapelit ja bayesilaiset pelit Kristian Ovaska HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Seminaari: Peliteoria Helsinki 18. syyskuuta 2006 Sisältö 1 Johdanto 1 2 Nollasummapelit 1 2.1

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Rinnakkaisuus Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 4. 2012 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2

Lisätiedot

Ohjelmistojen mallintaminen Olioiden yhteistyö. 18.11.2008 Harri Laine 1

Ohjelmistojen mallintaminen Olioiden yhteistyö. 18.11.2008 Harri Laine 1 Ohjelmistojen mallintaminen Olioiden yhteistyö 18.11.2008 Harri Laine 1 Olioiden yhteistyö Oliokeskeisen ohjelmistonäkemyksen mukaan ohjelmiston palvelut tuotetaan olioiden yhteistyön tuloksena. Ohjelmisto

Lisätiedot

Integrointi. Ohjelmistotekniikka kevät 2003

Integrointi. Ohjelmistotekniikka kevät 2003 Integrointi Ohjelmistotekniikka kevät 2003 ERP (Toiminnanohjausjärjestelmä) Myynti Henkilöstö, palkanlaskenta Kirjanpito Myynti Myyjät Extranet Tietovarasto Laskutus, reskontrat Asiakas ERP Asiakasrekisteri

Lisätiedot

Stabiloivat synkronoijat ja nimeäminen

Stabiloivat synkronoijat ja nimeäminen Stabiloivat synkronoijat ja nimeäminen Mikko Ajoviita 2.11.2007 Synkronoija Synkronoija on algoritmi, joka muuntaa synkronoidun algoritmin siten, että se voidaan suorittaa synkronoimattomassa järjestelmässä.

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3 16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut

Lisätiedot

Testaussuunnitelma. PUSU-ryhmä. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testaussuunnitelma. PUSU-ryhmä. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testaussuunnitelma PUSU-ryhmä Helsinki 13.12.2007 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (9 op) Projektiryhmä Jussi Hynninen

Lisätiedot

3. Muuttujat ja operaatiot 3.1

3. Muuttujat ja operaatiot 3.1 3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.

Lisätiedot

Rinnakkaistietokoneet luento S

Rinnakkaistietokoneet luento S Rinnakkaistietokoneet luento 2 521475S Tietokonealgoritmien rinnakkaisuuden analysointi Algoritmi on proseduuri, joka koostuu äärellisestä joukosta yksiselitteisiä sääntöjä jotka muodostavat operaatiosekvenssin,

Lisätiedot

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja Tietokanta Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja mikä tahansa tietokokoelma? --> erityispiirteitä Tietokanta vs. tiedosto 1

Lisätiedot

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä 2016 IX Olioiden välisistä yhteyksistä Sisältö 1. Johdanto 2. Kytkentä 3. Koheesio 4. Näkyvyydestä 2 Johdanto n Ohjelmassa syntyy kytkentöjä olioiden välille Toivottuja ja epätoivottuja n Näkyvyys vaikuttaa

Lisätiedot

Määrittelydokumentti

Määrittelydokumentti Määrittelydokumentti Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (alkukesä) Sami Korhonen 014021868 sami.korhonen@helsinki. Tietojenkäsittelytieteen laitos Helsingin yliopisto 23. kesäkuuta

Lisätiedot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia? Muilla kielillä: English Suomi Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia? Kun kaksi fysiikkaoliota törmää toisiinsa, syntyy törmäystapahtuma. Nämä tapahtumat voidaan ottaa kiinni

Lisätiedot

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ylläpitodokumentti Boa Open Access Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari

Lisätiedot

Koodausteoria, Kesä 2014

Koodausteoria, Kesä 2014 Koodausteoria, Kesä 2014 Topi Törmä Matemaattisten tieteiden laitos 6. Ryöppyvirheitä korjaavat koodit Topi Törmä Matemaattisten tieteiden laitos 2 / 34 6.1 Peruskäsitteitä Aiemmin on implisiittisesti

Lisätiedot

Ohjelmistotekniikan menetelmät, kevät 2008

Ohjelmistotekniikan menetelmät, kevät 2008 582101 - Ohjelmistotekniikan menetelmät, kevät 2008 1 Ohjelmistotekniikan menetelmät Methods for Software Engineering Perusopintojen pakollinen opintojakso, 4 op Esitietoina edellytetään oliokäsitteistön

Lisätiedot