Supertietokoneiden tehoa janotaan: miten saada enemmän tehoa irti?

Koko: px
Aloita esitys sivulta:

Download "Supertietokoneiden tehoa janotaan: miten saada enemmän tehoa irti?"

Transkriptio

1 Tietoenkäsittelytiede Heinäkuu 2 sivut 2 2 Toimittaa: Ari Korhonen c kiroittaa(t) Supertietokoneiden tehoa anotaan: miten saada enemmän tehoa irti? Jan Westerholm, Mats Aspnäs & Artur Signell Åbo Akademi Informaatioteknologian laitos {awester,mats,asignell}@abo.fi Tausta Supertietokoneiden ilmoitetut laskentatehot ovat vuosi vuodelta kasvaneet. Top 5 -listan [] kärkikoneet ovat parinsadantuhannen laskentaytimen koneita, otka teoreettisesti pystyvät tekemään yli 5 liukulukulaskutoimitusta sekunnissa eli petaflopsea. Gordon Mooren havainnon mukaan transistorien lukumäärä kaupallisissa mikropiireissä kaksinkertaistuu oka toinen vuosi. Näistä transistoreista on ennen rakennettu yhä kehittyneempiä tietokonearkkitehtuurea, mutta viime vuosina niitä on käytetty varsinkin prosessoreiden laskentaytimien lukumäärän kasvattamiseen. Vaativien laskentatehtävien suorittamiselle näyttäisi siis olevan vuosi vuodelta yhä tehokkaampia koneita käytettävissä, a laskentakapasiteetille on atkuvasti kasvava kysyntä. Supertietokoneiden tehoa anotaan a sitä näyttäisi olevan palon, mutta saavatko ohelmat kaiken tehon irti? Tietokoneohelmien rinnakkaistuksella käyttää on pyrkinyt sekä saamaan käyttöönsä suurempia muistimääriä, että lyhentämään pitkiä aoaikoa. Lyhentyneiden aoaikoen ansiosta ohelmia voidaan käytännössä aaa useammin, olloin ohelman toiminta, mahdolliset raoitteet, herkkyys alkuparametreille a ohelman tulokset ymmärretään paremmin. Tässä mielessä voi sanoa, että tieteellisten tulosten laatu paranee rinnakkaistumisen myötä. Jos sama laskenta voidaan aaa samoilla resursseilla nopeammin koodin optimoinnin ansiosta, säästyy energiaa a työaikaa, a laskentaresurssea voidaan hyödyntää paremmin palvelemalla useampia käyttäiä. Artikkelin kiroittaat kuuluvat suurteholaskennan ryhmään, oka viime vuosina on osallistunut useaan supertietokoneohelmien tehokkuutta a skaalautuvuutta parantavaan tutkimusproektiin [2, ]. Yhteistyökumppanit olivat supertietokoneille ohelmiaan tekevistä tutkimusorganisaatioista, mutta myös avointa lähdekoodia kehittävistä organisaatioista esimerkiksi bioinformatiikassa. Mukana oli muun muassa ydinfuusiofyysikoita, oille annetaan satoa tuhansia cpu-tuntea yhteiseurooppalaisissa suurteholaskentakeskuksissa. Kysymys, ohon etsimme vastausta, on seuraava: Miten supertietokoneissa aettavat ohelmat voivat paremmin hyödyntää käytettävissä olevat tehoresurssit? Tekemämme empiiriset havainnot suurtehokoneissa pyörivistä ohelmista perustuvat erityisesti ohelman rinnakkaistukseen, välimuistin käytön optimointiin, sekä vektorilaskentaan. Tarkasteltavat ohelmat olivat osana kolmea tutkimus- OHJE KIRJAPAINOLLE: B5-arkin vasen- a yläreuna kohdistetaan A4-arkin vasempaan a yläreunaan. Näin pitäisi marginaaliksi tulla taitteen puolella noin mm a muualla noin 22 mm.

2 22 Supertietokoneiden tehoa anotaan kokonaisuutta. Ensimmäisessä tutkittiin oukko kansallisen supertietokeskuksen CSC:n supertietokoneissa aettavia eri tutkimusryhmien kiroittamia ohelmia, sekä yleisessä käytössä olevaa avointa lähdekoodia. Toisessa proektissa saimme EU-yhteistyön kautta käyttöömme eurooppalaisten ydinfuusioryhmien kiroittamia lähdekoodea, a kolmanteen ryhmään laitamme tässä muiden yhteydenottoen kautta tulleita ohelmia. Ohelmointikieliä oli useampia: Fortran, C, C++, Python/C, sekä OCaml/C. Käyttöärestelmiä hallitsi Linux muutaman Windowsohelman lisäksi, a mikroprosessoriarkkitehtuurit olivat x86 a PowerPC. Sovellusalueita olivat pääasiassa fysiikan simulaatiot, kuten ydinfuusioplasmat, virtausmekaniikka, ydinkaskadit eli hiukkassuihkun simulointi mm. kudoksen läpi a konfokaalimikroskopia, sekä bioinformatiikan ohelmistot. Ohelmat olivat kiroittaneet fyysikot, kemistit sekä tietoenkäsitteliät ympäri Suomea, Eurooppaa a USA:ta. Ehkä pienenä yllätyksenä tuli havainto, että oitakin koodea oli kehitelty hyvinkin pitkään, opa 2 vuotta, mikä näkyikin selvästi vanhimmista osista lähdekoodia. Näin vanhoen koodien atkuva kehitys on varmaan ollut haasteellista, varsinkin kun rinnakkaiskoneet yleistyivät vasta noin 5 vuotta sitten. 2 Tavoitteet Alusta asti oli selvää, ettemme oman resurssipulamme takia voineet lähteä rinnakkaistamaan meille lähetettyä sekventiaalisia koodea. Sen siaan keskityimme o kertaalleen rinnakkaistettuen ohelmien parantamiseen a tehostamiseen. Tämän lisäksi suoritimme sekä sekventiaalisten että rinnakkaistettuen koodien optimointia. Jälkimmäisessä tapauksessa tavoitteena on saada sama numeerinen tulos kuin ennen optimointia, mutta nopeammin hyödyntämällä välimuistin käyttöä sekä vektorilaskentaa. Joissakin tapauksissa koodin optimointiin saattaa sisältyä tehtävien laskutoimitusten uudelleenärestelyä, olloin mikroprosessorien äärellisen liukulukulaskentatarkkuuden eiassosiatiivisuudesta seuraa, ettei 5 numeron tarkkuudella välttämättä saada samoa tuloksia kuin ennen. Joillekin koodinomistaille tämä aiheutti onkun verran hermostuneisuutta, koska oli totuttu saamaan tietynnäköisiä numeerisia tuloksia. Meidän mielestämme ei ole syytä huoleen: os lasketaan eri ärestyksessä saadaan usein eri tulos, mutta mikään ei viitannut siihen että alkuperäinen laskuärestys olisi ollut numeerisesti tarkempi tai stabiilimpi. Emme puuttuneet ongelmanasetteluun, eli emme kysyneet miksi tietyt laskut haluttiin suorittaa. Emme myöskään puuttuneet valittuun numeeriseen algoritmiin, ellei kyse ollut tarkasti modularisoidun numeerisen algoritmin korvaamisesta toisella implementaatiolla, tyypillisesti avoimen lähdekoodin kirastorutiinilla. Tässä mielessä voi sanoa että tekemämme koodin optimointi oli lähinnä o tehtyen virheiden paikkaamista: laskettavat suureet a algoritmit oli o valittu a pyrimme pelkästään virtaviivaistamaan laskuen suoritusta olemassa olevalle mikroprosessoriarkkitehtuurille. Metodologia Saatuamme uuden koodin sovelsimme siihen oukon perustyökalua, oiden avulla pyrittiin hahmottamaan potentiaaliset optimointikohteet koodissa. Tämän lisäksi osoittautui hyödylliseksi tarkistaa mahdollisia muistivuotoa, oissa ohelma ohelmointivirheen seurauksena kiroittaa varaamattomalle muistialueelle. Yllättävää oli, että moni käyttää voi elää sen kanssa, että ohelma saattaa muistivuodon takia kaatua epäsäännöllisin väliaoin.

3 Westerholm, Aspnäs, Signell 2. Koodin katselmus Hyvin monelle tutkimukseemme osallistuneelle koodille oli ominaista, että ohelma aettiin omassa ympäristössä, eikä koskaan ollut ilmennyt tarvetta lähettää koodia ulkopuoliselle taholle. Tilanne oli siis uusi kun pyysimme saada lähdekoodin sekä sopivia lähtöparametrea pienehköä aoa varten, ota käytettäisiin vertailupisteenä koodinoptimoinnin antaman nopeutuksen mittaamiseksi. Se, että ohelmaa nyt käytettäisiin uudessa ympäristössä ilman koodinkehittäien valvovaa silmää, aiheutti todennäköisesti pienen paineen saattaa koodi sellaiseen kuntoon, että se toimisi uudessa paikassa. Yksi merkki tästä oli usein esiintynyt ilmoitus kooditoimituksen viivästymisestä, koska oli ilmennyt ennen esiintymättömiä ongelmia. Saatuamme koodin loimme yleensä pikaisen katseen lähdekoodiin a sen yleiseen rakenteeseen. Tästä ilmeisen yksinkertaisesta toimenpiteestä oli usein hyötyä, sillä uudet silmäparit erottavat koodista toisia asioita kuin kehittäien silmät. Meidän tehtävämme oli keksiä ns. tyhmiä kysymyksiä ohelman rakenteesta a oskus yksityiskohdistakin, a tällä tavalla löysimme usein koodia, oka oli syntaktisesti oikein mutta toiminnallisesti väärin..2 Profilointi Ennen kuin lähdettiin optimoimaan koodea pyrittiin paikallistamaan ne kohdat tai metodit otka potentiaalisesti kannattaisi optimoida. Jos lähtee optimoimaan kaikkea, on aina olemassa riski, että optimointitulos on hyvä metodin suoritusaika lyhenee mutta sillä ei ole uurikaan vaikutusta kokonaissuoritusaikaan. Syynä tähän on yleensä se, että metodia kutsutaan vain muutama kerta suorituksen aikana a/tai kyseisen metodin suorittamiseen menee erittäin pieni osa kokonaissuoritusaasta. Parhaiten optimoinnit purevat kun ne kohdistetaan sellaisiin metodeihin, oihin suuri osa kokonaisaasta uppoaa. Muutamassa tapauksessa koodinomistailla oli näppituntuma mitkä kohdat voisivat olla hyödyllisiä optimoida, kun taas toisissa ei ollut lainkaan tietoa mihin osiin kannattaisi keskittyä. Profilointityökalut, kuten gprof, Crayn craypat sekä Intelin VTune, eivät ota mielipiteitä tai näppituntumia huomioon, vaan antavat raakaa dataa ohelman suoritusaasta a muistinkäytöstä. Perusprofilointiohelma kertoo miten palon aikaa kuluu okaiseen metodiin a miten monta kertaa kyseistä metodia kutsutaan. Kehittyneemmät profilointityökalut osaavat myös kertoa miten hyvä välimuistinkäyttö oli, miten tehokkaasti laskuoperaatioita tehtiin (flops) a rinnakkaisohelmissa miten palon aikaa käytetään kommunikaatioon, odotteluun sekä varsinaiseen laskentaan. Monesta ohelmasta löytyi yksi tai muutama metodi, ossa merkittävä osa kokonaissuoritusaasta vietettiin. Yleensä kyse oli suhteellisen lyhyistä a ytimekkäistä metodeista, oita kutsuttiin ohelmissa erittäin monta kertaa. Jos tällaisesta metodista saa % tai opa 5% suoritusaasta pois, näkyy tämän vaikutus selvästi kokonaissuoritusaassa. Yleensä eniten kiinnostava profilointia optimointikohde on suoritusaika: tuloksia halutaan nopeammin. Muistinkäyttö tulee tyypillisesti kuvioon vasta kun tämä muodostuu ongelmaksi: muisti loppuu kesken tai ohelma kaatuu muistivuodon tai puskuriylivuodon takia. Muistivuodot a puskuriylivuodot löytyvät yleensä muistinkäyttöanalysointityökalulla, kuten Valgrind [8], kunhan oppii tulkitsemaan sen tuloksia. Kokemus kertoo, että muistiongelmat kannattaa korata saman tien kun ne ilmenevät, vaikka ne eivät haittaisikaan ohelman suoritusta. Näin säästytään ongelmilta myöhemmin. Muistivuo-

4 24 Supertietokoneiden tehoa anotaan toen koraaminen vähentää myös ohelman muistinkäyttöä a voi sallia suurempien ongelmien simulointia. Rinnakkaistetun ohelman muistinkäyttö voidaan kiroittaa yksittäisen prosessorin kannalta muotoon M = S + D, missä M on yhden prosessorin muistinkäyttö, S prosessorin muistinkäyttö, oka ei riipu kokonaisprosessorimäärästä, a D muistinkäyttö, oka on riippuvainen prosessorimäärästä. Jotta ohelmaa voidaan aaa suuremmalla prosessorimäärällä, täytyy muistinkäytön kannalta olla voimassa D >> S. Ideaalitilanteessa S =, olloin muistinkäyttö prosessorissa voidaan puolittaa tuplaamalla käytettyen prosessoreiden määrä. Profilointityökalut kertovat M:n, mutta S:n a D:n suhde selviää vasta kun ohelma profiloidaan eri prosessorimäärillä a/tai parametreilla. Tarkasteltavista ohelmista yksi näytti profiloinnissa, että S D. Tästä ohtuen M oli lähes vakio a melkein riippumaton prosessorimäärästä, eikä rinnakkaistetulla ohelmalla voitu simuloida monimutkaisempaa ongelmaa kuin yhdellä prosessorilla, koska muisti loppui kesken. Syykin selvisi kooditutkiskelun älkeen: käytettiin tiheää matriisia arvoen väliaikaistallennukseen a matriisin koko oli valittu suoraan verrannolliseksi käytettyyn simulaatioavaruuden hilan kokoon. Vaihtamalla matriisi dynaamiseen tietorakenteeseen muistinkäyttö muuttui täysin siten, että D S a hilaa oli mahdollista kasvattaa kunhan käytössä oli tarpeeksi prosessoreita. 4 Rinnakkaistaminen Monen tieteellisen ohelman kehitys on aloitettu yli 5 vuotta sitten, tyypillisesti Fortran77-kielellä. Nykyaikaiset rinnakkaisohelmointikirastot tukevat kyllä Fortran77:ä, mutta ohelmat on alunperin suunniteltu a implementoitu täysin sekventiaalisiksi aikakaudella, olloin rinnakkaiskoneita ei vielä ollut yleisessä käytössä. Vuosien varrella ohelmia on muutettu osittain rinnakkaisiksi pienin askelin rinnakkaistamalla keskeisiä silmukkarakenteita a akamalla simuloitava hila useammalle prosessorille koskematta oleellisesti muihin sekventiaalisiin osiin. Rinnakkaisohelmointiparadigmaa ei siten seurattu, vaan koodia on rinnakkaistettu vain osin. Yleinen ohe rinnakkaisohelmien kiroittaille on suunnitella sekä algoritmit että tietorakenteet (vektorit, matriisit, struktuurit, ne.) siten, että tiedot voidaan luontevalla tavalla akaa pienempiin yksikköihin, otka ovat suureksi osaksi toisistaan riippumattomia. Riippumattomuus tarkoittaa, että kukin prosessori voi ainakin pääsääntöisesti tehdä laskentaa muiden prosessorien datasta riippumatta, kuitenkin siten, että välillä saatetaan lähettää suhteellisen pieniä datamääriä muutamalle toiselle prosessille. Ohelman osittaisenkin rinnakkaistamisen potentiaalinen hyöty on ilmeinen: suurempi laskentatyö aetaan yhä useammalle prosessorille, oten os rinnakkaislaskennassa tehtävä työ on verrannollinen hilapisteiden lukumäärään a rinnakkaistaminen onnistuu hyvin (esim. hilapisteessä tehtävä laskutoimitus tarvitsee vain lähinaapuripisteiden arvoa) voimme arvioida, että rinnakkaislaskenta-aika pysyy liki vakiona mikäli ongelmakoon a prosessorilukumäärän kaksinkertaistaminen tehdään samanaikaisesti. Tässä on oletettu hieman yksinkertaistaen, että kommunikaatio prosessorien välillä ei muodostu pullonkaulaksi. Yksi rinnakkaistamisella periaatteessa saavutettava hyöty on se, että tietty ohelma voidaan nopeuttaa, eli tietyn kokoinen simulointi voidaan laskea nopeammin. Rinnakkaistamisen tuoma nopeutustekiä SpeedUp prosessori-

5 Westerholm, Aspnäs, Signell 25 määrän funktiona lasketaan kaavasta SpeedU p(n) = RunTime()/RunTime(N) ossa RunTime(N) on ohelman aoaika N:llä prosessorilla. Käytännössä harvaa ohelmaa kuitenkaan aetaan suuremmalla prosessorimäärällä kuin on tarpeen. Jonkinlaista minimaalista aatusmallia edustaa havaitsemamme käytäntö, onka mukaan simuloinnin tarvitsema muistimäärä kiinnittää käytettävien prosessorien lukumäärän. Oletetaan, että meillä on simulointiohelma, onka kokonaisaasta tietty osuus on sekventiaalista, kun aetaan "pientä" ongelmaa ehkä 8 prosessorilla. Halutaan arvioida aoaika, kun ongelman koko kasvaa a prosessorien lukumäärä lisääntyy esimerkiks8:aan ta56:een. Keskeinen kysymys ohelman ns. skaalautuvuuden kannalta on nyt: miten käy sekventiaaliselle osalle kun simulaation koko suurenee? Jos ohelma suunnitellaan alusta asti rinnakkaiseksi, on ainakin periaatteessa mahdollista, että sekventiaalisen osuuden aoaika pysyy vakiona. Harva kohtaamamme ohelma on onnistunut tässä. Sen siaan olemme usein todenneet, että sekventiaalisen aoaan osuus on kasvanut prosessorilukumäärän suhteessa. Tarkempi analyysi kertoo, että tiedostoihin kiroittaminen on usein implementoitu sekventiaalisesti yhden tietyn prosessin kautta: kaikki prosessit lähettävät tuloksensa tälle prosessille, oka kokoaa tiedot oikeaan ärestykseen a kiroittaa välituloksia, diagnostisia arvoa, keskeytyneen ohelmasuorituksen uudelleenkäynnistyksen tietoa tai lopputuloksia kovalevyille. Sekventiaalisen osuuden aoaika kasvaakin suhteessa ongelman kokoon a sitä kautta prosessien lukumäärään. Tästä seuraa, että suuremman prosessorilukumäärän tapauksessa ohelma ei nopeudu vaan hidastuu, koska sekventiaalinen osuus kasvaa prosessorilukumäärän kasvaessa. 4. Triviaalisti rinnakkaistuvat On olemassa laskutehtäviä, oiden rinnakkaistaminen on suoraviivasta a yksinkertaista, a niissä rinnakkaistus on onnistunut hyvin. Näihin tapauksiin kuuluvat yhteen laskentaytimeen mahtuvat ohelmat, otka aetaan monta kertaa eri lähtöparametreilla suorittaen siten parametripyyhkäisyn, tai Monte Carlo -tyyppiset simuloinnit oissa sama ohelma aetaan monta kertaa eri satunnaislukualustuksella statistisen arvion laskemiseksi. Käytännössä yksi prosessi kerää N :n ohelman tulokset a suorittaa älkiprosessoinnin. Ammattislangi kutsuu näitä ohelmia "triviaalisti rinnakkaistuviksi" mikä saattaa kuulostaa hieman halventavalta, mutta meidän mielestämme ne edustavat hyvin tärkeää luokkaa rinnakkaisohelmia, oille on ominaista, että ne voidaan aaa ongelmitta erittäin suurilla prosessorimäärillä. 4.2 Prosessien välinen kommunikaatio Rinnakkaisohelmoinnissa pyritään aina akamaan laskennat eri prosessorien kesken siten, ettei kaikkien prosessien tarvitse simulointiaskelten välillä vaihtaa dataa kaikkien muiden prosessien kanssa. Tällöin nimittäin N prosessia saa aikaan N(N )/2 kommunikaatiota, olloin N:n kasvaessa yhä suurempi osuus kokonaisaasta kuluu kommunikaatioon. Kaikki tähän asti kohtaamamme ohelmat ovat onneksi(?) olleet rakenteeltaan hilaakoon a lähinaapurivuorovaikutukseen perustuvia. Simulointitehtävä on tällöin formuloitu tapahtuvaksi esimerkiksi kolmidimensioisella hilalla, oka on aettu säännöllisesti pienempiin kuutiotyyppisiin osiin, a okainen prosessi laskee oman kuutionsa hilapisteet vaihtaen aina simulointiaskelten välillä dataa lähimpien naapuripro-

6 26 Supertietokoneiden tehoa anotaan Kuva : Fuusiosimulaatiokoodin skaalautuvuus Cray XT4/5 koneessa sessorien kanssa reuna-alueeseen verrannollisen määrän. Kolmessa dimensiossa lähinaapuriprosessea on vakiomäärä, 26 kappaletta, a kahdessa dimensiossa vain 8. Tästä seuraa että ohelman kommunikaatiossa vaihdettava kokonaistietomäärä kasvaa suhteessa prosessorien lukumäärään eli kommunikaatio skaalautuu, olloin on odotettavissa ettei ohelma huku kommunikaatioon suuremmillakaan prosessorimäärillä (katso kuva ). Erikoisena piirteenä havaitsimme, että kommunikaation suunnittelussa on usein noudatettu ehkä hieman liioiteltuakin varovaisuutta a suunnitelmallisuutta. Periaatteena käytettiin kuviota, ossa prosessori ensin pyyhkäisee oman hilansa yli, onka älkeen se lähettää tiedot laskemistaan reunapisteiden uusista arvoista ensimmäiselle naapurilleen, odottaa kuittausta vastaanottaalta eli sen lähettämää dataa a etenee sen älkeen seuraavalle naapurille. Varmuuden vuoksi ohelmaan liitetään lopuksi globaali puomi (eng. barrier), oka pakottaa kaikki prosessorit odottamaan kunnes okainen prosessori on saavuttanut saman kohdan ohelman suorituksessa. Nykyiset rinnakkaisohelmointikirastot tukevat asynkronista kommunikaatiota, ossa prosessori ei tarvitse naapureilta kuittausta, vaan prosessori pyyhkäisee ensin reunapisteidensä yli, lähettää nämä tiedot naapureilleen odottamatta kuittausta, pyyhkäisee tämän älkeen kaikkien muiden pisteidensä yli a vasta sen älkeen tarkistaa ovatko naapuriprosessien reunapisteet saapuneet. Kaikkien uusien reuna-arvoen saavuttua prosessori voi edetä seuraavalle simulaatioaskeleelle ilman globaalia puomia. 4. Kuormantasaus Tutkimissamme ohelmissa simuloidaan usein aassa eteenpäin siten, että kehitetään kaava, oka mallittaa miten systeemi kehittyy aassa, onka älkeen edetään aanhetkestä t = pienin askelin t eteenpäin. Mikäli prosessorien simulaatio-osuus kokonaistyöstä perustuu edellä kuvattuun hilaakoon, on hilan ta-

7 Westerholm, Aspnäs, Signell 27 saaolla varmistettu, että okainen prosessi tekee saman verran laskentaa, eikä synny tilannetta, ossa kaikki muut prosessorit odottavat eniten työtä tekevän prosessorin valmistumista. Mikäli simulaatio sisältää stokastisia piirteitä, esimerkiksi os hilapisteiden välissä liikkuu hiukkasia, otka voivat tilapäisesti kasaantua oihinkin hilan osiin a toisaalta harventua muilta osin, on mahdollista että työnako muuttuu epätasaiseksi a useimmat prosessorit outuvat olemaan outilaina odottaessaan työllistettyen prosessoreiden valmistumista. Havaintomme mukaan tällaisia työnaon osalta epätasaisia ohelmia esiintyy melko usein a niiden kohdalla voi olla mielekästä toteuttaa työn uudelleenako tietyin aikavälein. Eräässä tapauksessa nopein prosessori suoriutui työstään sekunnissa hitaimman pyöriessä sekuntia, olloin kokonaisaoaika määräytyi hitaimman prosessin mukaan. Työn uudelleenaon älkeen, sisältäen akoon liittyvän lisätyön, kaikkien prosessoreiden aoaika ol sekuntia. Uudelleenaosta aiheutuva lisälaskenta oli siis pieni verrattuna kokonaisaan pienenemiseen. 4.4 Rinnakkaistiedostot Suurten rinnakkaisaoen käsittelemät tietomäärät on helppo arvioida kertomalla prosessorien lukumäärä prosessorin muistimäärällä. Mikäli käytössä on esimerkiksi 24 prosessoria a okaisella on GB keskusmuistia on lopputulos TB (teratavu). Simuloinnin valmistuttua halutaan mahdollisesti tallettaa tulokset, a oskus on mielekästä esimerkiksi simuloinnin edistymisen valvomiseksi tai simulointivideota varten tallettaa myös välituloksia, esimerkiksi okaista simuloinnin aika-askelta kohden. Sanonnalle "Teraflopsit tuottavat teratavua" löytyy tänään katetta eritoten plasmafuusion simuloinneissa a tilanne mutkistuu tulevaisuudessa yhä suurempien simulointien ollessa mahdollisia. Empiirisesti havaitsimme rinnakkaisohelmien kohdalla, että tiedostosta lukeminen a siihen kiroittaminen usein toteutetaan keräämällä tieto pieninä osina yhteen prosessiin, oka kiroittaa tiedot tiedostoon kovalevylle. Tässä on oiva esimerkki siitä miten rinnakkasiohelmaa ei ole suunniteltu loppuun asti rinnakkaiseksi, vaan siihen on äänyt sekventiaalinen osuus, oka käytännössä määrää aoaan. Eräässä tapauksessa saimme ohelman, ossa itse simulointilaskenta 24 prosessorilla kest sekuntia, mutta (väli)tuloksen kiroittaminen kovalevylle 8 sekuntia, olloin 2 prosessoria oli outilaana 9 % aoaasta. Standardirinnakkaiskirastoissa on o pitkään tuettu tiedostoen rinnakkaislukemista a -kiroittamista, a nämä ovatkin suositeltavia mikäli vain supertietokoneeseen tai laskentaklusteriin on rakennettu rinnakkainen tiedostoärestelmä. Lisäksi on olemassa näiden rutiinien päälle rakennettua kirastoa, kuten esimerkiksi HDF5 (Hierarchical Data Format [9]), otka vielä entisestään yksinkertaistavat rinnakkaista tiedostonkäsittelyä tehden sen melkein normaaliin tiedostonkäsittelyyn verrattavaksi. Esimerkkitapauksessa tiedostoon kiroittaminen lyheni sekuntiin. 4.5 Kirastorutiinien hyödyntäminen Ohelmien rinnakkaistuksen perusrakenteen lisäksi pyrimme myös selvittämään mahdollisuuksia käyttää rinnakkaisohelmointikirastoen taroamaa tukea. Rinnakkaisohelmointistandardi Message Passing Interface MPI [] perustuu laskentanoodien väliseen viestinvälitykseen, ossa tavua lähetetään a vastaanotetaan sovitun kaavan mukaisesti. MPI-kirastoen kehittyessä niihin on rakennettu yhä enemmän toiminnallisuutta erityyppisille rinnakkaisohelmissa usein

8 28 Supertietokoneiden tehoa anotaan esiintyville algoritmeille, oita on siis turha lähteä rakentamaan itse. Yksi esimerkki on ns. all-reduce operaatio, ossa okaisesta prosessorista kootaan tietty määrä dataa yhteen prosessoriin, a tämä prosessori suorittaa datalle onkun operaation, esimerkiksi ynnää kaikki arvot yhteen, a lopputulos kommunikoidaan takaisin kaikille prosesseille. Sen siaan, että lähdemme rakentamaan rutiinia, ossa kommunikoidaan rinnakkaiskiraston lähetys- a vastaanottokutsuilla, voimme käyttää hyväksi yksinkertaista MPI_All_reduce-tyyppistä kutsua, oka hoitaa kommunikaation mitattavasti tehokkaammin kuin omat rutiinit. Toinen esimerkki liittyy tilanteeseen, ossa esimerkiksi kolmidimensioista hilaakoa halutaan kuvata prosesseille: voimme tietysti itse päätellä miten kannattaa akaa alihilat eri prosesseille, mutta MPI:stä löytyy tukea oka helpottaa tätä työtä. 5 Koodin optimointi Varsinaiset tekniikat oiden avulla pyrittiin nopeuttamaan ohelmia olivat välimuistin tehokas hyödyntäminen sekä SSE-vektorointi. 5. Välimuistin optimointi Välimuistin tarkoitus on luoda prosessorille mielikuva, onka mukaan tietokoneen keskusmuisti on nopea. Jos ohelma tarvitsee tavua, otka voidaan lukea välimuistista, on hakuaika noin kellonaksoa, kun taas keskusmuistista haku kestää pyöreästi kellonaksoa. Tämä mielikuva saadaan aikaiseksi siten, että uusia arvoa ladataan keskusmuistista välimuistiin sillä aikaa kun prosessori tekee laskentaa edellisellä kerralla välimuistiin luettuen arvoen kanssa. Välimuistiin kiroitetaan a sieltä luetaan peräkkäisiä tavua välimuistirivin verran, tyypillisesti 64 tavua eli kahdeksan kaksoistarkkuuden liukuluvun verran. Välimuistin käytön optimointi voidaan nyt tiivistää lauseeseen "Käytä tehokkaasti hyväksesi o välimuistiin luettua arvoa äläkä hyppää mielivaltaisella tavalla ympäri keskusmuistia lukien yksittäisiä arvoa sieltä täältä". Jos kuitenkin tarvittavat tavut ovat kaukana toisistaan skaalalla 64 tavua kannattaa yrittää ärestää tietorakenteet uudelleen siten, että tarvittavat arvot ovat peräkkäin muistissa. Tätä periaatetta käyttäen ryhmämme onnistui nopeuttamaan yleisesti käytössä olevaa proteiinisekvensointiohelmaa PSI-BLAST [4]. Proteiini koostuu pitkästä nauhasta aminohappoa, oita löytyy 2 eri tyyppiä. Sekvensoinnissa pyritään asettamaan kaksi proteiinia rinnakkain siten, että niillä on mahdollisimman monta osumaa eli kaksi samaa tai melkein samaa aminohappoa vierekkäin. PSI-BLAST-ohelmassa proteiinin okaista aminohappoa varten käytettiin 2 tavun kokoista tietuetta, ossa on ensimmäisenä äsenenä yhden tavun pituinen aminohapon tyyppiä edustava kirain letter, toisena äsenenä kahdeksan tavua pitkä aminohapon satunnainen osumatodennäköisyys e_value, ne. Tietueet oli ärestetty muistiin taulukkoon. Kuitenkin suurin osa ohelman aoaasta kului peräkkäisten aminohappotietueiden läpikäymiseen etsien aminohapon tyyppiä. Käytännössä siis välimuistiin luettiin okaisella lukukerralla 64 tavua, mutta niistä käytettiin vain oka 2:s, eli noin tavua, ennen kuin seuraava välimuistirivi piti lukea. Järestimme tietorakenteet uudelleen siten, että tietuetaulukon siaan meillä oli yksi taulukko okaista alkuperäisen tietueen äsentä kohden (katso kuva 2). Lukemalla nyt pelkästään tyyppitietue välimuistiin voidaan käyttää hyväksi okaista luettua tavua, a koko ohelmaa voidaan nopeuttaa opa tekiällä kolme [5].

9 Westerholm, Aspnäs, Signell 29 Kuva 2: Alkuperäinen (vasen) a optimoitu (oikea) PSIBlast-ohelman tietue. 5.2 Tietorakenteet Välimuistin optimointi on käytännössä sellaisten tietorakenteiden käyttöä, otka ovat sopusoinnussa välimuistin toiminnan kanssa. Tyypilliset ohelmissa esiintyvät tietorakenteet ovat vektori a matriisi, mutta oskus ohelmissa käytetään yksinkertaisia tietueita tai linkitettyä listoa. Suoraviivaisesta rakenteestaan huolimatta matriisit voidaan tietoteknisesti esittää eri tavoin. Esimerkkinä mainittakoon usein vastaan tullut tilanne, ossa kolmidimensioista hilaa (sivun pituus N) on esitetty oikeaoppisesti kolmidimensioisena matriisina, mutta laskennan ossakin vaiheessa muodostetaan hilapisteiden perusteella lineaarinen matriisiyhtälöryhmä, onka matriisi on erittäin harva a kokoa N. Tällöin kannattaa ilman muuta siirtyä käyttämään harvaa matriisia a valita harvaa matriisia hyödyntävä ratkaisualgoritmi. Harvan matriisin esitystapoa on useita, oten esitystavan valinnassa täytyy suunnitella koko laskentaketu etukäteen, otta se menee kivuitta läpi. Toinen maininnan arvoinen tietorakenne liittyy listoihin, oista halutaan etsiä arvoa tietyin ehdoin, esimerkiksi löytyykö annettu arvo listasta tai mikä on lähinnä pienempi arvo. Mikäli lista on hieman pitempi, enemmän kuin kymmeniä elementteä, kannattaa esimerkiksi ärestää listan arvot suuruusärestykseen a käyttää binäärihakua arvoen etsimiseen, tai ryhmitellä listan arvot hash-tyyppisillä avaimilla. 5. Vektorointi Moderneista prosessoreista on o pitkään löytynyt ns. vektoroitua multimediakäskyä, Streaming SIMD Extensions SSE, (SIMD = Single Instruction Multiple Data), oissa käytetään normaalia pitempiä tyypillisest8-bittisiä rekistereitä. Näihin rekistereihin voidaan tuoda kaksi 64-bittistä kaksoistarkkuuden liukulukua tai vaihtoehtoisesti nelä 2-bittistä yksinkertaisen tarkkuuden liukulukua. Laskennallinen etu on saavutettavissa siten, että suoritetaan aritmeettisia toimintoa näiden rekistereiden kesken tätä varten olevilla SSE-käskyillä, olloin yhden käskyn suorittaminen saa aikaan kahden (tai yksinkertaisen tarkkuuden tapauksessa nelän) samanaikaisen liukulukulaskutoimituksen suorittamisen. Teoreettisesti laskien kaksoistarkkuuden aritmetiikka voidaan nopeuttaa tekiällä 2 (katso kuva ). Vastaanottamiemme ohelmien oukossa ei ollut yhtäkään, ossa x86- arkkitehtuurin SSE-multimediarekistereitä olisi käytetty tehokkaasti hyväksi! Ohelmien tehokkuuden kannalta vektorilaskenta SSE-rekistereillä oli täysin käyttämätön resurssi. Lähdekoodeissa esiintyi monesti useampikin silmukka, oi-

10 Supertietokoneiden tehoa anotaan Kuva : Nelän yksinkertaisen tarkkuuden liukuluvun samanaikainen kertolasku SSEvektoroinnilla. den olisi pitänyt pystyä hyödyntämään SSE-vektorointia, mutta ostakin syystä kääntäät eivät tuottaneet vektoroitua koodia. Myös kääntään tekemän periaatteessa suoraviivaisesti vektoroitavissa olevan silmukan tekemän konekielen läpikäynti osoitti, ettei kääntää tehnyt vektorikäskyä ollenkaan. Tilanteen ymmärtämiseksi kiroitimme plasmasimuloinneissa usein esiintyvälle ns. Arakawamenetelmälle [6] konekieliversion, ossa eksplisiittisesti käytimme pelkästään vektorikäskyä koko SSE-rekisterille. Jo 96-luvulla huomattiin, että virtausmekaniikan simuloinneissa esiintyy numeerista epästabiilisuutta, onka seurauksena pyörteiden kineettinen energia kasvaa raattomasti. Keskeinen laskettava suure on kahden virtauskentän ζ a ψ 2- dimensioinen Jakobiaani J(ζ,ψ) = ζ ψ x y ζ y ψ x () Arakawa osoitti, että ensimmäisen kertaluvun osittaisderivaattoen suoraviivaisessa nelän pisteen diskretoinnissa (lähinaapurit x- a y-suunnassa) systeemin kokonaisenergia ei säily. Sen siaan hän ohti Jakobiaanin diskretoinnille kokonaisenergian säilyttävän muodon, ossa on mukana yhdeksän pistettä kummastakin virtauskentästä muodostaen x matriisin laskettavan Jakobiaanin elementin ympärille. Kuvissa 4 a 5 on esitetty miten paikka-avaruus on diskretoitu a Arakawan menetelmällä pyyhitään virtauskentän 2-dimensioisen matriisin yli, kuvassa 4 ilman SSE-vektorointia a kuvassa 5 SSE-vektoroinnilla. Koodin optimoinnin tulos oli odotettu: ohelma nopeutui tekiällä,8. Mistä syystä sitten kääntää ei suostu vektoroimaan Arakawa-koodia? Tälle on itse asiassa olemassa hyvä syy. Aatellaan tapausta ossa Arakawa-rutiini toteutetaan aliohelmakutsulla, onka lähtöarvoina on kaksi matriisia (ζ i, a ψ i, ) sekä tulosmatriisina Jakobiaani J i, (ζ,ψ). Jos alirutiini kutsutaan siten, että toinen lähtömatriiseista a tulosmatriisi ovatkin sama matriisi(!), tulokset tulevat olemaan aivan erilaiset riippuen siitä onko aliohelma vektoroitu tai ei, olloin kääntää tekee päätöksen olla vektoroimatta aliohelmaa. Jos kuitenkin käyttää ilmoittaa eksplisiittisesti että erinimiset osoittimet, kuten matriisit tai vektorit, varmasti osoittavat eri muistipaikkoihin, onnistuu vektorointi hyvin. Esimerkkinä käyköön Intelin icc-kääntää [7], olle ilmoitetaan

11 Westerholm, Aspnäs, Signell i= = i= =2 i= = i= =4 i=2 = i=2 =2 i=2 = i=2 =4 Kuva 4: Iterointi 6x4-kokoisen gridin yli käyttäen Arakawan x matriisia. i= = i= = i=2 = i=2 = Kuva 5: Arakawan menetelmän iterointi 6x4-kokoisen gridin yli käyttäen SSE-vektorointia. Yhtenäinen viiva a katkoviiva edustavat kaksoistarkkuuden lukua, otka sioittuvat SSE-rekisterin vasemmalle a oikealle puolelle.

12 2 Supertietokoneiden tehoa anotaan oko komentoriviltä icc -fno-alias tai restrict avainsanalla parametreille aliohelmakutsussa, että tarkoitamme nimenomaan eri matriisea, olloin kääntää osaa riittävän selkeissä tapauksissa generoida erittäin käyttökelpoista vektoroitua koodia. Muut C-kääntäät, kuten GNU [], Pathscale [2] a Portlandin PGI [], pystyät tuottmaaan yhtä tehokasta vektoroitua koodia vain hyvin yksinkertasille lausekkeille. Lähitulevaisuudessa vektorirekisterien pituus kaksinkertaistuu 256 bittiin, olloin yhteen rekisteriin mahtuu kerralla nelä kaksoistarkkuuden liukulukua avaten siten mahdollisuuden yhä suuremmille nopeutuksille. 6 Tuloksia Mitkä olivat havaintomme rinnakkaisohelmista a sekventiaalisista ohelmista oita aetaan supertietokoneissa ympäri Eurooppaa a myös maailmanlaauisesti nimenomaan rinnakkaisohelmoinnin sekä koodin optimoinnin kannalta? Yleistoteamus on positiivinen: vielä voi parantaa ohelmia käyttämään paremmin hyväksi prosessorien tehoa. Usein sekventiaalinen ohelma voidaan rinnakkaistaa a tällä tavoin ohelma voidaan nopeuttaa tekiällä -. Jo rinnakkaistettuen ohelmien uudelleensuunnittelu merkitsi usein, että ohelmat, otka ennen pyörivät korkeintaan 6 tai 2 prosessorilla, voidaan tarkemmin suunnitellun rinnakkaistamisen älkeen aaa opa 24 ta48 prosessorilla. Rinnakkainen tiedostonkäsittely on mielestämme se osa, ossa voi suhteellisen ärkevällä ohelmointipanostuksella saavuttaa merkittävimmät nopeutukset tapauksissa, oissa ohelma tuottaa palon dataa kovalevylle. Jos ohelmassa on keskeisiä rutiinea, otka voidaan vektorisoida SSE-tyyppisillä käskyillä, voidaan hyöty usein saada irti pienellä muutoksella lähdekoodiin tai kääntään asetuksilla olettaen, että erinimiset tietorakenteet todella ovat eri paikoissa muistissa. Koodin optimointi yleensäkin nopeuttaa aoaat noin tekiällä 2, parhaassa tapauksessa, a mikäli aoaika alunperin on ollut tuntea tai päiviä voi nopeutus tekiällä kaksi olla hyvinkin kouriintuntuva parannus. Viitteet pdfs/finhpc.pdf/download. Pär Strand, Bernard Guillerminet, Frederic Imbeaux, Rui Coelho, David Coster, Lars-Göran Eriksson, Francesco Iannone, Gabriele Manduchi, Isabel Campos, Matthieu Haefele, Eric Sonnedrücker, Adrian Jackson, Jan Westerholm, Marcin Plociennik a Michal Owsiak: A European Infrastructure for Fusion Simulations, toim. Marco Danelutto, Julien Bourgeois and Tom Gross: PDP 2 Proceedings of the 8th Euromicro Conference on Parallel, Distributed and Network-Based Processing, Pisa, helmikuuta, 2, s Mats Aspnäs, Kimmo Mattila, Kristoffer Osowski a Jan Westerholm, Code Optimization of the Subroutine to Remove Near Identical Matches in the Sequence Database Homology Search Tool PSI- BLAST, Journal of Computational Biology, vol. 7, s. -5, A. Arakawa, Computational design for long-term numerical integration of the equations of fluid motion: twodimensional incompressible flow. Part I, Journal of Computational Physics, Vol., s. 9-4,

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

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

Gaussinen vaikutuskaavio Tommi Gustafsson 45434f Tfy IV

Gaussinen vaikutuskaavio Tommi Gustafsson 45434f Tfy IV Mat-.4 Optimointiopin seminaari, syksy 999 Referaatti 7.0.999 Gaussinen vaikutuskaavio Tommi Gustafsson 45434f Tfy IV JOHDATO Ross D. Shachter a C. Robert Kenley (989) esittelevät artikkelissaan Gaussian

Lisätiedot

Tietokoneet täh++eteessä

Tietokoneet täh++eteessä Tietokoneet täh++eteessä Peter Johansson Fysiikan laitos, Helsingin yliopisto PC- käy:äjät ry kevätkokous 2014 Helsinki 23.3.2014 1. Miksi +etokoneita tarvitaan täh++eteessä ja mikä on niiden rooli modernissa

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

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

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Matematiikka ja teknologia, kevät 2011

Matematiikka ja teknologia, kevät 2011 Matematiikka ja teknologia, kevät 2011 Peter Hästö 3. helmikuuta 2011 Matemaattisten tieteiden laitos Sisältö Kurssi koostuu kuudesta (seitsemästä) toisistaan riippumattomasta luennosta. Aihepiirit ovat:

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

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

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

Numeeriset menetelmät

Numeeriset menetelmät Numeeriset menetelmät Luento 5 Ti 20.9.2011 Timo Männikkö Numeeriset menetelmät Syksy 2011 Luento 5 Ti 20.9.2011 p. 1/40 p. 1/40 Choleskyn menetelmä Positiivisesti definiiteillä matriiseilla kolmiohajotelma

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

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

LASKENNALLISEN TIETEEN OHJELMATYÖ: Diffuusion Monte Carlo -simulointi yksiulotteisessa systeemissä

LASKENNALLISEN TIETEEN OHJELMATYÖ: Diffuusion Monte Carlo -simulointi yksiulotteisessa systeemissä LASKENNALLISEN TIETEEN OHJELMATYÖ: Diffuusion Monte Carlo -simulointi yksiulotteisessa systeemissä. Diffuusio yksiulotteisessa epäjärjestäytyneessä hilassa E J ii, J ii, + 0 E b, i E i i i i+ x Kuva.:

Lisätiedot

Numeeriset menetelmät

Numeeriset menetelmät Numeeriset menetelmät Luento 2 To 8.9.2011 Timo Männikkö Numeeriset menetelmät Syksy 2011 Luento 2 To 8.9.2011 p. 1/33 p. 1/33 Lukujen tallennus Kiintoluvut (integer) tarkka esitys aritmeettiset operaatiot

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

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

Moderneissa grafiikkakorteissa hyödynnetään myös samanlaista toimintamallia

Moderneissa grafiikkakorteissa hyödynnetään myös samanlaista toimintamallia 1 Datan rinnakkaistamisessa siis eri prosessointiyksiköt suorittavat saman operaation annetulle datalle, joka pilkotaan prosessointiyksikköjen kesken. Pointti on siis se, että kyseessä ei ole tehtävien

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

Prosessin reaalisaatioiden tuottaminen

Prosessin reaalisaatioiden tuottaminen Teoria Johdanto simulointiin Simuloinnin kulku -- prosessin realisaatioiden tuottaminen Satunnaismuuttujan arvonta annetusta jakaumasta Tulosten keruu ja analyysi Varianssinreduktiotekniikoista 20/09/2004

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

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

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

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

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

S-114.2720 Havaitseminen ja toiminta

S-114.2720 Havaitseminen ja toiminta S-114.2720 Havaitseminen ja toiminta Heikki Hyyti 60451P Harjoitustyö 2 visuaalinen prosessointi Treismanin FIT Kuva 1. Kuvassa on Treismanin kokeen ensimmäinen osio, jossa piti etsiä vihreätä T kirjainta.

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

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Tietorakenteet, laskuharjoitus 3, ratkaisuja Tietorakenteet, laskuharjoitus 3, ratkaisuja 1. (a) Toistolauseen runko-osassa tehdään yksi laskuoperaatio, runko on siis vakioaikainen. Jos syöte on n, suoritetaan runko n kertaa, eli aikavaativuus kokonaisuudessaan

Lisätiedot

Integrointialgoritmit molekyylidynamiikassa

Integrointialgoritmit molekyylidynamiikassa Integrointialgoritmit molekyylidynamiikassa Markus Ovaska 28.11.2008 Esitelmän kulku MD-simulaatiot yleisesti Integrointialgoritmit: mitä integroidaan ja miten? Esimerkkejä eri algoritmeista Hyvän algoritmin

Lisätiedot

3 = Lisäksi z(4, 9) = = 21, joten kysytty lineaarinen approksimaatio on. L(x,y) =

3 = Lisäksi z(4, 9) = = 21, joten kysytty lineaarinen approksimaatio on. L(x,y) = BM20A5810 Differentiaalilaskenta ja sovellukset Harjoitus 6, Syksy 2016 1. (a) Olkoon z = z(x,y) = yx 1/2 + y 1/2. Muodosta z:lle lineaarinen approksimaatio L(x,y) siten että approksimaation ja z:n arvot

Lisätiedot

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö Algoritmit 1 Luento 10 Ke 11.2.2015 Timo Männikkö Luento 10 Algoritminen ongelman ratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu

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

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

Parinmuodostuksesta tietojenkäsittelytieteen silmin. Petteri Kaski Tietojenkäsittelytieteen laitos Aalto-yliopisto

Parinmuodostuksesta tietojenkäsittelytieteen silmin. Petteri Kaski Tietojenkäsittelytieteen laitos Aalto-yliopisto Parinmuodostuksesta tietojenkäsittelytieteen silmin Petteri Kaski Tietojenkäsittelytieteen laitos Aalto-yliopisto Suomalainen Tiedeakatemia Nuorten Akatemiaklubi 18.10.2010 Sisältö Mitä tietojenkäsittelytieteessä

Lisätiedot

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja. IsoInt Tietokoneiden muisti koostuu yksittäisistä muistisanoista, jotka nykyaikaisissa koneissa ovat 64 bitin pituisia. Muistisanan koko asettaa teknisen rajoituksen sille, kuinka suuria lukuja tietokone

Lisätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

1. OHJAAMATON OPPIMINEN JA KLUSTEROINTI

1. OHJAAMATON OPPIMINEN JA KLUSTEROINTI 1. OHJAAMATON OPPIMINEN JA KLUSTEROINTI 1 1.1 Funktion optimointiin perustuvat klusterointialgoritmit Klusteroinnin onnistumista mittaavan funktion J optimointiin perustuvissa klusterointialgoritmeissä

Lisätiedot

2 Konekieli, aliohjelmat, keskeytykset

2 Konekieli, aliohjelmat, keskeytykset ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä

Lisätiedot

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto 811312A Tietorakenteet ja algoritmit 2015-2016 I Johdanto Sisältö 1. Algoritmeista ja tietorakenteista 2. Algoritmien analyysistä 811312A TRA, Johdanto 2 I.1. Algoritmeista ja tietorakenteista I.1.1. Algoritmien

Lisätiedot

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

Lisätiedot

Tehtävä 2: Tietoliikenneprotokolla

Tehtävä 2: Tietoliikenneprotokolla Tehtävä 2: Tietoliikenneprotokolla Johdanto Tarkastellaan tilannetta, jossa tietokone A lähettää datapaketteja tietokoneelle tiedonsiirtovirheille alttiin kanavan kautta. Datapaketit ovat biteistä eli

Lisätiedot

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen) 58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen) 1. Avaimet 1, 2, 3 ja 4 mahtuvat samaan lehtisolmuun. Tässä tapauksessa puussa on vain yksi solmu, joka on samaan aikaan juurisolmu

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

Simulointi. Varianssinhallintaa Esimerkki

Simulointi. Varianssinhallintaa Esimerkki Simulointi Varianssinhallintaa Esimerkki M C Esimerkki Tarkastellaan lasersäteen sirontaa partikkelikerroksesta Jukka Räbinän pro gradu 2005 Tavoitteena simuloida sirontakuvion tunnuslukuja Monte Carlo

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot 3. Muuttujat ja operaatiot Sisällys Muuttujat. Nimi ja arvo. Algoritmin tila. Muuttujan nimeäminen. Muuttujan tyyppi. Muuttuja ja tietokone. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeetiikka.

Lisätiedot

Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan?

Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan? Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan? 2012-2013 Lasse Lensu 2 Ihmisen, eläinten ja kasvien hyvinvoinnin kannalta nykyaikaiset mittaus-,

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

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

Lisätiedot

jens 1 matti Etäisyydet 1: 1.1 2: 1.4 3: 1.8 4: 2.0 5: 3.0 6: 3.6 7: 4.0 zetor

jens 1 matti Etäisyydet 1: 1.1 2: 1.4 3: 1.8 4: 2.0 5: 3.0 6: 3.6 7: 4.0 zetor T-1.81 Luonnollisten kielten tilastollinen käsittely Vastaukset 11, ti 8.4., 1:1-18: Klusterointi, Konekääntäminen. Versio 1. 1. Kuvaan 1 on piirretty klusteroinnit käyttäen annettuja algoritmeja. Sanojen

Lisätiedot

Osakesalkun optimointi

Osakesalkun optimointi Osakesalkun optimointi Anni Halkola Epäsileä optimointi Turun yliopisto Huhtikuu 2016 Sisältö 1 Johdanto 1 2 Taustatietoja 2 3 Laskumetodit 3 3.1 Optimointiongelmat........................ 4 4 Epäsileän

Lisätiedot

Ei välttämättä, se voi olla esimerkiksi Reuleaux n kolmio:

Ei välttämättä, se voi olla esimerkiksi Reuleaux n kolmio: Inversio-ongelmista Craig, Brown: Inverse problems in astronomy, Adam Hilger 1986. Havaitaan oppositiossa olevaa asteroidia. Pyörimisestä huolimatta sen kirkkaus ei muutu. Projisoitu pinta-ala pysyy ilmeisesti

Lisätiedot

1. OHJAAMATON OPPIMINEN JA KLUSTEROINTI

1. OHJAAMATON OPPIMINEN JA KLUSTEROINTI 1. OHJAAMATON OPPIMINEN JA KLUSTEROINTI 1 1.1 Funktion optimointiin perustuvat klusterointialgoritmit Klusteroinnin onnistumista mittaavan funktion J optimointiin perustuvissa klusterointialgoritmeissä

Lisätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö Algoritmit 2 Luento 3 Ti 21.3.2017 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2017 Luento 3 Ti 21.3.2017

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

Harjoitus 6: Simulink - Säätöteoria. Syksy 2006. Mat-2.2107 Sovelletun matematiikan tietokonetyöt 1

Harjoitus 6: Simulink - Säätöteoria. Syksy 2006. Mat-2.2107 Sovelletun matematiikan tietokonetyöt 1 Harjoitus 6: Simulink - Säätöteoria Mat-2.2107 Sovelletun matematiikan tietokonetyöt Syksy 2006 Mat-2.2107 Sovelletun matematiikan tietokonetyöt 1 Harjoituksen aiheita Tutustuminen säätötekniikkaan Takaisinkytkennän

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Numeriikan kirjastoja

Numeriikan kirjastoja Numeriikan kirjastoja + Säästää aikaa, hikeä ja kyyneleitä + Aliohjelmat testattuja ja luotettavia + Tehokkuus optimoitu - Ei aina sovellu kovin hyvin omaan tehtävään - Kaupallisista kirjastoista ei saa

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 25.-26.1.2017 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka laskee kahden kokonaisluvun välisen jakojäännöksen käyttämättä lainkaan jakolaskuja Jaettava m, jakaja n Vähennetään luku

Lisätiedot

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

Tiedosto Muuttuja Kuvaus Havaintoväli Aikasarjan pituus. Intelin osakekurssi. (Pörssi-) päivä n = 20 Intel_Volume. Auringonpilkkujen määrä

Tiedosto Muuttuja Kuvaus Havaintoväli Aikasarjan pituus. Intelin osakekurssi. (Pörssi-) päivä n = 20 Intel_Volume. Auringonpilkkujen määrä MS-C2128 Ennustaminen ja aikasarja-analyysi 4. harjoitukset / Tehtävät Kotitehtävät: 3, 5 Aihe: ARMA-mallit Tehtävä 4.1. Tutustu seuraaviin aikasarjoihin: Tiedosto Muuttuja Kuvaus Havaintoväli Aikasarjan

Lisätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö Algoritmit 2 Luento 3 Ti 20.3.2018 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2018 Luento 3 Ti 20.3.2018

Lisätiedot

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n)) Määritelmä: on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia

Lisätiedot

Säätötekniikan matematiikan verkkokurssi, Matlab tehtäviä ja vastauksia 29.7.2002

Säätötekniikan matematiikan verkkokurssi, Matlab tehtäviä ja vastauksia 29.7.2002 Matlab tehtäviä 1. Muodosta seuraavasta differentiaaliyhtälöstä siirtofuntio. Tämä differentiaaliyhtälö saattaisi kuvata esimerkiksi yksinkertaista vaimennettua jousi-massa systeemiä, johon on liitetty

Lisätiedot

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö Algoritmit 2 Luento 1 Ti 14.3.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin valinta Algoritmin analysointi Algoritmin suoritusaika Peruskertaluokkia Kertaluokkamerkinnät Kertaluokkien ominaisuuksia

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

Lisätiedot

T Luonnollisten kielten tilastollinen käsittely

T Luonnollisten kielten tilastollinen käsittely T-61.281 Luonnollisten kielten tilastollinen käsittely Vastaukset 3, ti 11.2.2003, 16:15-18:00 Kollokaatiot, Versio 1.1 1. Lasketaan ensin tulokset sanaparille valkoinen, talo käsin: Frekvenssimenetelmä:

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

Markov-prosessit (Jatkuva-aikaiset Markov-ketjut)

Markov-prosessit (Jatkuva-aikaiset Markov-ketjut) J. Virtamo 38.3143 Jonoteoria / Markov-prosessit 1 Markov-prosessit (Jatkuva-aikaiset Markov-ketut) Tarkastellaan (stationaarisia) Markov-prosessea, oiden parametriavaruus on atkuva (yleensä aika). Siirtymät

Lisätiedot

Ohjelmassa on käytettävä funktiota laskeparkkimaksu laskemaan kunkin asiakkaan maksu. Funktio floor pyöristää luvun lähimmäksi kokonaisluvuksi.

Ohjelmassa on käytettävä funktiota laskeparkkimaksu laskemaan kunkin asiakkaan maksu. Funktio floor pyöristää luvun lähimmäksi kokonaisluvuksi. Tehtävä 24. Kallioparkki veloittaa 2 euroa kolmelta ensimmäiseltä pysäköintitunnilta. Yli kolmen tunnin pysäköinnistä veloitetaan lisäksi 0.5 euroa jokaiselta yli menevältä tunnilta. Kuitenkin maksimiveloitus

Lisätiedot

Numeeriset menetelmät TIEA381. Luento 12. Kirsi Valjus. Jyväskylän yliopisto. Luento 12 () Numeeriset menetelmät / 33

Numeeriset menetelmät TIEA381. Luento 12. Kirsi Valjus. Jyväskylän yliopisto. Luento 12 () Numeeriset menetelmät / 33 Numeeriset menetelmät TIEA381 Luento 12 Kirsi Valjus Jyväskylän yliopisto Luento 12 () Numeeriset menetelmät 25.4.2013 1 / 33 Luennon 2 sisältö Tavallisten differentiaaliyhtälöiden numeriikasta Rungen

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Dynaamisten systeemien teoriaa. Systeemianalyysilaboratorio II

Dynaamisten systeemien teoriaa. Systeemianalyysilaboratorio II Dynaamisten systeemien teoriaa Systeemianalyysilaboratorio II 15.11.2017 Vakiot, sisäänmenot, ulostulot ja häiriöt Mallin vakiot Systeemiparametrit annettuja vakioita, joita ei muuteta; esim. painovoiman

Lisätiedot

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne. Proseduurit Proseduuri voi olla 1) Funktio, joka palauttaa jonkin arvon: real function sinc(x) real x sinc = sin(x)/x... y = sinc(1.5) 2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5. 1. Toteuta Pythonilla seuraava ohjelma:

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5. 1. Toteuta Pythonilla seuraava ohjelma: Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 2 1. Toteuta Pythonilla seuraava ohjelma: 2. Tulosta Pythonilla seuraavat luvut allekkain a. 0 10 (eli, näyttää tältä: 0 1 2 3 4 5 6 7 8 9 10 b. 0 100 c. 50 100 3.

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita

Lisätiedot

Testiraportti Android virtuaalikone vs. natiivikoodi Ville Laine, Delta 23

Testiraportti Android virtuaalikone vs. natiivikoodi Ville Laine, Delta 23 Testiraportti Android virtuaalikone vs. natiivikoodi Ville Laine, Delta 23 1 Sisällys 1. Johdanto...3 2. Testiohjelma...3 2.1. Testi 1: Raaka funktiokutsu...3 2.2. Testi 2: Yhteenlaskutesti...3 2.3. Testi

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

Kurssin loppuosassa tutustutaan matriiseihin ja niiden käyttöön yhtälöryhmien ratkaisemisessa.

Kurssin loppuosassa tutustutaan matriiseihin ja niiden käyttöön yhtälöryhmien ratkaisemisessa. 7 Matriisilaskenta Kurssin loppuosassa tutustutaan matriiseihin ja niiden käyttöön yhtälöryhmien ratkaisemisessa. 7.1 Lineaariset yhtälöryhmät Yhtälöryhmät liittyvät tilanteisiin, joissa on monta tuntematonta

Lisätiedot

Enigmail-opas. Asennus. Avainten hallinta. Avainparin luominen

Enigmail-opas. Asennus. Avainten hallinta. Avainparin luominen Enigmail-opas Enigmail on Mozilla Thunderbird ja Mozilla Seamonkey -ohjelmille tehty liitännäinen GPG-salausohjelmiston käyttöä varten. Sitä käytetään etenkin Thunderbirdin kanssa sähköpostin salaamiseen

Lisätiedot

Algebralliset menetelmät virheenkorjauskoodin tunnistamisessa

Algebralliset menetelmät virheenkorjauskoodin tunnistamisessa Algebralliset menetelmät virheenkorjauskoodin tunnistamisessa Jyrki Lahtonen, Anni Hakanen, Taneli Lehtilä, Toni Hotanen, Teemu Pirttimäki, Antti Peltola Turun yliopisto MATINE-tutkimusseminaari, 16.11.2017

Lisätiedot

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä 3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä Lineaarinen m:n yhtälön yhtälöryhmä, jossa on n tuntematonta x 1,, x n on joukko yhtälöitä, jotka ovat muotoa a 11 x 1 + + a 1n x n = b 1 a 21

Lisätiedot

Mat Lineaarinen ohjelmointi

Mat Lineaarinen ohjelmointi Mat-2.34 Lineaarinen ohjelmointi..27 Luento 5 Simplexin implementaatioita (kirja 3.2-3.5) Lineaarinen ohjelmointi - Syksy 27 / Luentorunko (/2) Simplexin implementaatiot Naiivi Revised Full tableau Syklisyys

Lisätiedot

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5. 2. MS-A4/A6 Matriisilaskenta 2. Nuutti Hyvönen, c Riikka Kangaslampi Matematiikan ja systeemianalyysin laitos Aalto-yliopisto 5.9.25 Tarkastellaan esimerkkinä lineaarista yhtälöparia { 2x x 2 = x + x 2

Lisätiedot

Matematiikka ja teknologia, kevät 2011

Matematiikka ja teknologia, kevät 2011 Matematiikka ja teknologia, kevät 2011 Peter Hästö 13. tammikuuta 2011 Matemaattisten tieteiden laitos Tarkoitus Kurssin tarkoituksena on tutustuttaa ja käydä läpi eräisiin teknologisiin sovelluksiin liittyvää

Lisätiedot

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen) TKT0001 Tietorakenteet ja algoritmit Erilliskoe 5.1.01, malliratkaisut (Jyrki Kivinen) 1. [1 pistettä] (a) Esitä algoritmi, joka poistaa kahteen suuntaan linkitetystä järjestämättömästä tunnussolmullisesta

Lisätiedot

Käyttöjärjestelmien historia. Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen

Käyttöjärjestelmien historia. Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen Käyttöjärjestelmien historia Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen Käyttöjärjestelmien jaottelu Voidaan jaotella erilaisin menetelmin Aikajana (määrä,

Lisätiedot

Rinnakkaistietokoneet luento 1 521475S

Rinnakkaistietokoneet luento 1 521475S 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

Lisätiedot

Lauseen erikoistapaus on ollut kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa seuraavassa muodossa:

Lauseen erikoistapaus on ollut kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa seuraavassa muodossa: Simo K. Kivelä, 13.7.004 Frégier'n lause Toisen asteen käyrillä ellipseillä, paraabeleilla, hyperbeleillä ja niiden erikoistapauksilla on melkoinen määrä yksinkertaisia säännöllisyysominaisuuksia. Eräs

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot