Rinnakkaisalgoritmit ja rinnakkaistietokoneet
|
|
- Ritva Elstelä
- 9 vuotta sitten
- Katselukertoja:
Transkriptio
1 Tietojenkäsittelytiede 26 Heinäkuu 2007 sivut 9 21 Toimittaja: Antti Valmari c kirjoittaja(t) Rinnakkaisalgoritmit ja rinnakkaistietokoneet Martti Penttonen Kuopion yliopisto Tietojenkäsittelytieteen laitos martti.penttonen@cs.uku.fi Tiivistelmä Tässä kirjoituksessa tarkastellaan, miten tietokoneella suoritettava tehtävä voidaan jakaa rinnakkain suoritettaviin osiin, ja millä ehdoilla se voidaan suorittaa tehokkaasti. Rinnakkaisalgoritmiikan tutkimuksen ansiosta tiedämme, että useimmista tehtävistä löytyy runsaasti rinnakkaisuutta, jota voidaan käyttää suorituksen nopeuttamiseen riippumatta siitä, kuinka paljon suorittimia on käytettävissä. Jotta rinnakkaisohjelman suoritus olisi tehokasta laiteresurssien käytön suhteen, täytyy konearkkitehtuurin täyttää tietyt vaatimukset, joista keskeisin on prosessorien välisen tietoliikenteen kaistanleveys. 1 Johdanto Tietokoneen toimintaperiaatteita kuvattaessa käytetään usein lisänimeä von Neumannin tietokone. Tällöin tehdään kunniaa von Neumannin ja Turingin kaltaisille tutkijoille, jotka loivat tietokoneen ja ohjelmoinnin teoreettisen perustan ja selittivät, mitä tietokoneella on mahdollista tehdä [4]. Von Neumannin ansioksi mainitaan erityisesti se, että tietokoneen toiminnan määräävä ohjelma on datana tietokoneen muistissa ja siten ohjelmaa vaihtamalla tietokone saadaan suorittamaan eri tehtävää. Von Neumann on saanut nimensä myös käsitteeseen von Neumannin pullonkaula. Tällä tarkoitetaan sitä, että tietokoneessa olevan tiedon käsittely tapahtuu yhdessä prosessorissa. Kun tietoa haetaan tietokoneen muistista prosessoriin käsiteltäväksi lähes joka käskyllä, tulee ainoasta prosessorista tietokoneen nopeutta rajoittava pullonkaula. Tehontarpeen alati kasvaessa, on von neumannilainen tietokonearkkitehtuuri joutunut kriittisen tarkastelun kohteeksi ja kehitys on johtanut kohti moniprosessorisia tietokoneita, rinnakkaistietokoneita. Ei ole kuitenkaan itsestään selvää, että n prosessoria suoriutuu tehtävästä n kertaa niin nopeasti kuin yksi prosessori. Sata metriä pitkän ojan kaivaminen on helppo jakaa sadalle työntekijälle, mutta miten jaetaan sata metriä syvän kaivon kaivaminen sadalle työntekijälle? Rinnakkaisalgoritmien löytymisen vaikeuteen voi olla monenlaisia syitä: Artikkeli on alunperin kirjoitettu vuonna 2001 Tietojenkäsittelytieteen seuran toteutumatta jäänyttä 20- vuotisjuhlakirjaa varten. OHJE KIRJAPAINOLLE: B5-arkin vasen- ja yläreuna kohdistetaan A4-arkin vasempaan ja yläreunaan. Näin pitäisi marginaaliksi tulla taitteen puolella noin 33 mm ja muualla noin 22 mm.
2 10 Rinnakkaisalgoritmit ja rinnakkaistietokoneet Ei ole olemassakaan algoritmia, joka suoriutuu tehtävästä n prosessorilla n kertaa niin nopeasti kuin yhdellä prosessorilla (suurella n:n arvolla). Ei vielä tunneta algoritmia, joka suoriutuu n prosessorilla n- kertaisella nopeudella. Vaikka tehokas algoritmi onkin olemassa, n-prosessorinen rinnakkaistietokone ei selviydy tehtävästä n- kertaisella nopeudella arkkitehtonisten rajoitteiden vuoksi. Edelläkerrotusta seuraa, että peräkkäisohjelmien rinnakkaistuminen ei ole itsestäänselvyys, koska se ei ole aina edes mahdollista. Toisaalta tunnetaan myös muun muassa tulos [9], jonka mukaan tietyin oletuksin ajassa T(n) peräkkäistietokoneella suoritettava n-kokoinen tehtävä voidaan suorittaa lukuun T(n)logT(n) verrannollisessa ajassa n-prosessorisella rinnakkaistietokoneella. Kuitenkin, vaikka rinnakkaisalgoritmi tunnettaisiinkin, tehoa ei aina saada irti koneesta, koska esimerkiksi tiedon siirtelyyn prosessorien välillä tuhlautuu liian paljon aikaa. Tämän kirjoituksen tarkoituksena on esitellä rinnakkaisalgoritmien ja rinnakkaistietokoneiden suunnitteluperiaatteita sekä hahmotella tietokonearkkitehtuureja, joilla rinnakkaisalgoritmeja voitaisiin ohjelmoijaystävällisesti ja tehokkaasti suorittaa. 2 Rinnakkaisalgoritmit Von Neumannin arkkitehtuurin mukaista tietokonetta voidaan mallittaa kuvan 1 mukaisella kaaviolla. Siinä neliönmuotoinen laatikko tarkoittaa prosessoria, joka suorittaa ohjelmaa, ja pitkulainen laatikko tarkoittaa muistipaikkojen jonoa. Tässä pelkistetyssä mallissa ei tehdä eroa erityyppisten muistien välillä vaan muistiavaruuden oletetaan olevan yhtenäinen. Ohjelmaa suorittaessaan prosessori hakee muistipaikoista dataa (lukuja) viipeettä ja tallentaa käsittelyn tuloksia muistipaikkoihin. Koneen toiminnan määrää ohjelma, joka koostuu aritmeettisista operaatioista, muistioperaatioista ja haarautumisoperaatioista. Lukemisen helpottamiseksi esitämme ohjelmat rakenteisella korkean tason ohjelmointikielellä. Kuvan 2 ohjelma lajittelee lukujonon L = L[1..n] luvut kasvavaan järjestykseen. Siinä satunnainen(x) tarkoittaa jonon X satunnaista alkiota ja partitio(r, X) jakaa jonon X kolmeen osaan, jotka sisältävät rajalukua r pienemmät, sen kanssa yhtäsuuret, ja sitä suuremmat luvut. Siten algoritmin suoritusajan suuruusluokan määrää palautuskaava T(n) = 2T(n/2)+n, jota toistaen nähdään, että T(n) on luokkaa n log n. Palautuskaavassa 2T(n/2) viittaa kahden puolta pienemmän lajittelutehtävän rekursiiviseen suoritusaikaan ja n partition suoritusaikaan. (Tarkka analyysi ei ole aivan näin yksinkertainen, sillä satunnaisuus ei jaa n-kokoista tehtävää kahdeksi n/2-kokoiseksi tehtäväksi. Kuitenkin algoritmi toimii suurella todennäköisyydellä näin nopeasti.) Yhteistä muistia käyttävää rinnakkaistietokonetta voidaan mallittaa kuvan 3 mukaisella kaaviolla. Olennainen ero kuvan 1 peräkkäistietokoneeseen on se, että nyt prosessoreita on useita. Oletamme, että kaikki prosessorit suorittavat samaa ohjelmaa, ei kuitenkaan joka hetki samaa kohtaa ohjelmassa. Ainoa olennainen lisäys peräkkäiskoneen käskykantaan on käsky, jolla prosessori saa tietoonsa (aivan kuin muistihaulla) oman tunnuksensa tällainen käsky tarvitaan prosessorien työnjaossa, jotta prosessori tun-
3 Penttonen 11 P Kuva 1: Peräkkäistietokoneen malli. proc pikalajittelu(l) if L 1 then return L else r := satunnainen(l) L <,L =,L > := partitio(r, L) for i { <, > } do L i := pikalajittelu(l i ) return L < L = L > Kuva 2: Lajittelu peräkkäisalgoritmilla. tarkoittaa jonojen liittämistä peräkkäin. nistaisi omat työnsä. Korkean tason ohjelmointikielessä ainoa lisäys on rinnakkain suoritettava pardo-silmukkarakenne. Kuvan 2 ohjelma muutetaan rinnakkaisohjelmaksi 4 muuttamalla do-silmukan peräkkäin suoritettavat rekursiiviset kutsut pardo-silmukalla rinnakkain suoritettaviksi. (Aliohjelma partitio(r, X) rinnakkaistetaan kuvan 6 ohjelmassa.) Rinnakkaisalgoritmin pardo-silmukan jokainen indeksi (esimerkissämme < ja > ) aloittaa uuden rinnakkain suoritettavan prosessin. Koska satunnaisuuden ansiosta raja r jakaa jonon L todennäköisesti suunnilleen keskeltä, n alkion lajittelutehtävä tuottaa kaksi rinnakkain suoritettavaa suunnilleen n/2 alkion lajittelutehtävää, ne kumpikin kaksi n/4 P1... P... i P n Kuva 3: Yhteistä muistia käyttävän rinnakkaistietokoneen malli.
4 12 Rinnakkaisalgoritmit ja rinnakkaistietokoneet proc pikalajittelu(l) if L 1 then return L else r := satunnainen(l) L <,L =,L > := partitio(r, L) for i { <, > } pardo L i := pikalajittelu(l i ) return L < L = L > Kuva 4: Lajittelu rinnakkaisalgoritmilla. alkion tehtävää ja niin edelleen. Noin log n vaiheen jälkeen alkuperäinen tehtävä on jakautunut (lähes) n rinnakkain suoritettavaan lajittelutehtävään, joiden suorituksen ja yhdistämisen jälkeen koko tehtäväkin on suoritettu. Koska partitio voidaan muodostaa suunnilleen ajassa log n, rinnakkaisen pikalajittelun suoritusajaksi voidaan arvioida T(n) = T(n/2) + logn, jota toistaen voidaan T(n):n arvioida olevan suuruusluokkaa log 2 n, suurella todennäköisyydellä. (Partition vaatima suoritusaika log n arvioidaan myöhemmin.) Toisena esimerkkinä tarkastelemme kuvan 5 ohjelmaa, joka laskee lukujonon L = L[1..n] alkusummat, toisin sanoen tuottaa jonon, jonka i:s jäsen on summa L[1]+L[2]+ +L[i]. Alkusumma-algoritmin suoritusaika on do-silmukan suorituskertojen määrä log n, sillä sisemmän pardo-silmukan suorittamiseen riittää vakioaika. Alkusumma-algoritmilla on rinnakkaisalgoritmiikassa paljon käyttöä. Sen avulla voidaan esimerkiksi kuvan 6 tavalla muodostaa pikalajittelualgoritmissa tarvittava partitio. Viimeisenä esimerkkinä tarkastelemme tehtävää, joka ensiksi tuntuu vaikeasti rinnakkaistuvalta. Äärellinen automaatti on matemaattinen kone, jonka avulla mallitetaan tilaa muuttavia järjestelmiä. Äärellisen automaatin määrittelee tilanmuutosfunktio, joka kertoo, miten eri syötteet muuttavat automaatin tilaa. Esimerkiksi kuvassa 7 annettu funktio määrittelee erään äärellisen automaatin. Jos automaatti on aluksi tilassa 0, se siirtyy syötteellä abaaba tilojen 1,4,5,2,3 kautta tilaan 5. Aina, kun luetun tekstin kolme viimeistä merkkiä ovat aab, automaatti on tilassa 3, ja aina, kun luetun tekstin kolme viimeistä merkkiä ovat aba, automaatti on tilassa 5. Koska äärellisen automaatin toiminta on luonteeltaan peräkkäistä uusi tila riippuu edellisistä, tuntuu aluksi vaikealta keksiä rinnakkaisohjelma, joka suorittaisi automaatin laskun. Tehtävä ratkeaa, kun yhdestä tilasta alkavan tilajonon asemesta tarkastellaan merkkijonoon liittyvää tilanmuutosfunktiota. Merkitköön f w (p) sitä tilaa q, johon syötejono w vie automaatin tilasta p lähtien. Tyhjälle merkkijonolle ε funktio on f ε = Id eli identiteettifunktio, jolle Id(p) = p. Määritelmän mukaisesti taulukon 7 ylempi rivi määrittelee f a :n ja alempi rivi määrittelee f b :n. Soveltamalla tilafunktiota kaksi kertaa peräkkäin nähdään, että f a f b = f ab = (4,3,3,4,4,3), missä tarkoittaa funktioiden yhdistämistä. Merkkijono abaaba vie automaatin tilasta 0 tilaan
5 Penttonen 13 5 eli f abaaba (0) = 5. Kuvan 8 ohjelma laskee funktion f w. Algoritmin suoritusaika, joka on luokkaa log n, johdetaan palautuskaavasta T(n) = T(n/2)+1. Esimerkkimme osoittavat, että rinnakkaisohjelmoinnin ei tarvitse olla monimutkaisempaa kuin peräkkäisohjelmoinnin. Itse asiassa se voi jopa olla helpompaakin, sillä rinnakkaisohjelmoijan ei tarvitse pohtia, tuleeko L < lajitella ennen kuin L > rinnakkaisen ilmiön koodaaminen peräkkäiseksi voi olla joskus hankalaa. Koska ohjelmointi, ja varsinkin oikein toimivien ohjelmien tekeminen, on joka tapauksessa vaikeaa, ohjelmointikieli ja ympäristö eivät saisi tuottaa ylimääräisiä vaikeuksia ohjelmointiin. Siksi olisi toivottavaa, että peräkkäislaskennan ja rinnakkaislaskennan ero olisi vain pardosilmukan lisääminen. Algoritmitutkimuksen ansiosta käytettävissämme on runsas rinnakkaisalgoritmikirjallisuus (katso esimerkiksi [7, 11]). Tutkijoiden motiivina on ollut, paitsi käytännön tarve, sen selvittäminen, kuinka paljon tietojenkäsittelytehtävissä on yleensä rinnakkaisuutta. Yleisen käsityksen mukaan kaikki kiinnostavat tehtävät, jotka voidaan suorittaa peräkkäiskoneella polynomiaalisessa ajassa, voidaan suorittaa rinnakkaiskoneella polylog ajassa, toisin sanoen ajassa joka on verrannollinen tehtävän koon logaritmin potenssiin. 3 Hajautetun muistin malli Yhteisen muistin konemallin vaivattomuus ohjelmoijalle perustuu juuri yhteiseen muistiin, joka on välittömästi kaikkien prosessorien käytettävissä. Pahaksi onneksi sellaisen muistin toteuttaminen on käytännössä ollut vaikeaa ja kallista. Erilaisin kytkentäratkaisuin ja niin kutsutuin vektoriprosessorein toteutettuja yhteistä muistia käyttäviä supertietokoneita on ollut ja on [13], mutta ne ovat kalliita ja vaikeasti laajennettavissa. Markkinakehityksen johdosta tietokonevalmistajien mielenkiinto on viime aikoina kohdistunut peräkkäistietokoneiden ja erityisesti henkilökohtaisten työasemien kehittämiseen. Työasemista saakin laskentatehoa halvimmalla. Tarvittaessa paljon laskentatehoa tulee houkuttelevaksi kuvan 9 kaltainen laskentamalli, jossa joukko erillisiä tietokoneita yhdistetään rinnakkaistietokoneeksi tietoliikenneverkon avulla. Koska prosessorien välisen kommunikoinnin tulee olla nopeampaa kuin Internetissä suoritettavien peräkkäissovellusten tiedonsiirto, hajautetun muistin rinnakkaiskoneen tai työasemaklusterin verkko perustuu yleensä johonkin rakenteeltaan säännölliseen tiheään kytkentään. Kuvassa 10 on esitetty kuusi tapaa kytkeä prosessorit toisiinsa. Täydellisessä verkossa, hyperkuutiossa ja perhosessa etäisyydet ovat lyhyitä, mutta ristikkoproc alkusumma(l) for i {1,..., log(n) } do for j {2 i 1 + 1,...,n} pardo L[ j] := L[ j 2 i 1 ]+L[ j] return L Kuva 5: Alkusummien laskeminen.
6 14 Rinnakkaisalgoritmit ja rinnakkaistietokoneet proc partitio(r, L) for i {1,...,n} pardo P[i] := (L[i] < r) P := alkusumma(p) p := P[n] % montako pientä oli for i {1,...,n} pardo S[i] := (L[i] > r) S := alkusumma(s) s := S[n] % montako suurta oli m := n p s % näin monesti r for i {1,...,m} pardo L = [i] := r for i {1,...,n} pardo if L[i] < r then L < [P[i]] := L[i] elsif L[i] > r then L > [S[i]] := L[i] return L <,L =,L > % 1= tosi, 0= epätosi Kuva 6: Partition muodostaminen. rakenne mahtuu paremmin kolmiulotteiseen maailmaan. Erilaisia verkkoratkaisuja on esitelty muun muassa lähteissä [1, 13]. Beowulf [2] ja Grid [5] tuovat hajautetun muistin rinnakkaislaskennan jokamiehen ulottuville. Tietokoneteollisuus on myös alkanut kehittää standardeja, jotka helpottaisivat ja tehostaisivat prosessorien välistä kommunikointia [6]. Jos tällaisella n-prosessorisella hajautetun muistin koneella suoritetaan n toisistaan riippumatonta tehtävää, koneesta saadaan luonnollisesti n-kertainen teho verrattuna yhteen koneeseen. Mutta rinnakkaiskonetta tarvitaan yhden tehtävän nopeaan suorittamiseen. Tällöin tulee ratkaistavaksi: 1. Miten laskenta levitetään prosessoreille niin, että kuormitus on tasainen? 2. Miten data levitetään muistiin niin, että se on tehokkaasti käytettävissä? 3. Miten ratkaistaan tiedonsiirto niin, että aikaa ei kulu turhaan odottamiseen? 4. Miten hajautetun muistin konetta ohjelmoidaan? Tavoitetilanne olisi se, että ohjelmoijan ei tarvitsisi tietää mitään prosessorien ja muistin määrästä ja sijainnista ja kuitenkin kone suorittaisi tehokkaasti (yhteenlaskettua prosessoritehoa vastaavasti) hänen ohjelmaansa. Hajautetun muistin rinnakkaistietokoneita ohjelmoidaan yleisesti niin kutsutun viestinvälitysmallin mukaisesti. Tässä mallissa ohjelmaan kirjoitetaan käskyjä, jotka lähettävät viestejä prosessorien kesken. Viesteissä siirretään dataa tai alitehf a b Kuva 7: Äärellinen automaatti.
7 Penttonen 15 proc automaatti( f a, f b, w) if w = 1 then return f w else Olkoon w = u 1 u 2, missä u 1 = w /2 ja u 2 = w /2 for i {1,2} pardo f ui := automaatti( f a, f b, u i ) return f u1 f u2 Kuva 8: Äärellinen automaatti rinnakkaisohjelmana. täviä toisessa prosessorissa suoritettavaksi. Ylläolevan luettelon tehtävistä 1, 2 ja 4 jäävät ohjelmoijan vastuulle, 3 riippuu koneesta. Yleisimmin käytetty viestinvälitysmallin toteutus on MPI-ohjelmakirjasto (Message Passing Interface), jota voidaan käyttää monien ohjelmointikielten kanssa rinnakkaislaskentaan. MPI:n laaja käyttö todistaa, että se on käyttökelpoinen ratkaisu moneen laskentatehoa vaativaan tehtävään. Se ei kuitenkaan sovellu hienorakeisen rinnakkaisuuden toteutukseen, jossa prosessorit hyvin usein (lähes joka käskyllä) tarvitsevat yhteistä tietoa. MPI-ohjelmointi myös vaatii ohjelmoijalta peräkkäisohjelmointiin verrattuna ylimääräistä päänvaivaa ja resurssien hallinta voi käydä ylivoimaiseksi, ellei tehtävä ole riittävän säännöllinen rakenteeltaan. Siksi MPI tai viestinvälitykseen perustuva ohjelmointi ei saisi olla lopullinen ratkaisu korkean tason ohjelmointimalliksi. Kuvassa 11 on yksinkertainen esimerkki MPI-kirjaston käytöstä. Ohjelmassa esiintyy neljä MPI:n kuudesta yleisimmästä käskystä, mutta siitä puuttuvat MPI_Send- ja MPI_Receive-käskyt. 4 Yhteisen muistin malli hajautetun muistin koneessa Yhteisen muistin malli on epäilemättä ohjelmoijalle helpompi, koska se vapauttaa ohjelmoijan tietokoneen resurssien hallinnasta. Kuitenkin suuren, nopean, suurelle prosessorimäärälle yhteisen ja halvan yhteisen muistin suora rakentaminen saattaa olla mahdotonta. Hajautetun muistin koneista sen sijaan saa tehoa halvalla. Kun myös tietoliikennetekniikassa kehitys on huimaa, on järkevää kysyä, voitaisiinko hajautetun muistin koneita käyttää yhteisen muistin mallin mukaiseen laskentaan. Tässä luvussa tutkitaan sitä, millä edellytyksillä yhteisen muistin mallin mukainen rinnakkaisohjelmointi voitaisiin tehokkaasti toteuttaa hajautetun muistin koneessa, vertaa kuva 12. Jos haluamme yleiskäyttöistä rinnakkaislaskentaa, meidän on hyväksyttävä seuraavat vaatimukset, jotka saattavat olla vaikeita toteuttaa: 1. Kaikki muistipaikat ovat kaikkien prosessorien saatavilla. 2. Mikä tahansa konekäsky voi sisältää viittauksen muistiin. Kohdasta 1 seuraa, että yhteinen muisti on hajautettava prosessori/muisti =mo-
8 16 Rinnakkaisalgoritmit ja rinnakkaistietokoneet verkko P 1... P i... P n M 1 M i M n Kuva 9: Hajautetun muistin malli. duuleille jonkin säännön mukaisesti. Jos tämä hajautus tehdään huonosti, jotkin moduulit voivat kuormittua pahoin ja kone jumiutuu. Hajautus voidaan tehdä hyvin käyttäen satunnaistettua hajautusta. Sen sijaan mikään deterministinen hajautusfunktio ei toimi hyvin, sillä viipeen alaraja on vähintään luokkaa log 2 p/loglog p vakioasteisessa verkossa, jossa on p prosessoria [8]. Vakioasteisuusoletus on luonnollinen, sillä tilarajoitusten vuoksi ei ole realistista olettaa, että prosessorin voisi kytkeä mielivaltaisen moneen naapuriin. Hajautuksen käyttö voi tuntua hullulta, koska olisi luonnollista sijoittaa yhteenkuuluva data lähekkäin. Muistin hallinnoinnin siirtäminen ohjelmoijan vastuulle on kuitenkin kohtuuttoman vaikeaa ja monimutkaisessa laskennassa johtaa suurella todennäköisyydellä ruuhkautumiseen. Satunnaistuksen etu on siinä, että se takaa muistin saatavuuden ruuhkitta suurella todennäköisyydellä. Kohdasta 2 seuraa, että muistiviittauksia on paljon ja että laskun eteneminen riippuu datan saannista. Muistiviittausten määrä on kohtalokas, ellei verkko vedä tarpeeksi hyvin. Muistioperaation hitaus hidastaa laskentaa, ellei prosessorilla ole muuta tekemistä. Kumpikin ongelma on ratkaistavissa. Viime vuosikymmeninä niin prosessorien, muistien kuin tietoliikenteenkin nopeus on kasvanut huimasti, ei kuitenkaan samalla tavalla. Tietoliikenteen nopeutuminen on ollut kaikkein huiminta rinnakkaislaskennan kannalta tosin kytkentänopeuksissa on toivomisen varaa. Muistien nopeutuminen on ollut paljon hitaampaa kuin prosessorien. Kun keskusmuistin saantiajat ovat monikymmenkertaisia käskyn suoritukseen kuluvaan aikaan verrattuna, muistin hitautta on korvattu käyttämällä nopeita rekistereitä ja välimuisteja. Välimuistien käyttöön liittyy kuiten-
9 Penttonen 17 Kuva 10: Verkkotopologioita: Täydellinen verkko, väylä, perhonen, hyperkuutio, ristikko ja väyläristikko.
10 18 Rinnakkaisalgoritmit ja rinnakkaistietokoneet #include mpi.h #include <stdio.h> int main(argc, argv) int argc; char **argv; { int rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf( Terve! Olen prosessori %d / %d \n, rank, size); MPI_Finalize(); return 0; } Kuva 11: Terve! rinnakkaisesti MPI:llä. kin se ongelma, että tieto on päivitettävä varsinaiseen muistiin ennen kuin toinen muistiviittaus hakee sieltä vanhentunutta tietoa. Rinnakkaislaskennan tapauksessa välimuistien käyttö olisi vielä ongelmallisempaa, koska samaan muistiin viittaavia prosessoreja on paljon. Onneksi välimuisti voidaan korvata rinnakkaisuudella. Jos rinnakkaisalgoritmi tuottaa enemmän rinnakkain suoritettavia prosesseja kuin tietokoneessa on prosessoreja, yhdelle prosessorille tulee samanaikaisesti suoritettavaksi useita prosesseja, sanokaamme s kpl. Näitä ei voida tietenkään suorittaa samaan aikaan vaan vuorotellen ajan s kuluessa. Näin ollen muistioperaation suorittamiseen on käytettävissä s yksikköä aikaa, eikä välimuistia tarvita. Kutsumme tätä ylimääräisen rinnakkaisuuden periaatteeksi (englanniksi slackness) [12]. Oletetaan, että muistimoduulit ovat verkossa, jonka halkaisija on φ, toisin sanoen muistisaannin aikana prosessori ehtii suorittaa 2φ käskyä. Jotta muistisaannin viipeen aikana prosessorin aika ei kuluisi hukkaan, sillä on oltava s 2φ toisistaan riippumatonta käskyä suoritettavanaan. Ajattelemme, että hakupyyntö on viesti, joka välisolmulta toiselle edetessään käyttää ajan φ ja paluumatkallaan data mukanaan toisen kerran ajan φ. Kun kaikki s käskyä on suoritettu, ensimmäinen niistä on jo saanut pyytämänsä tiedon muistista ja suoritus voi jatkua. Jotta tämä toimisi sujuvasti, täytyy jokaisen n prosessorin kaikkien viestien mahtua verkkoon samanaikaisesti. Toisin sanoen verkon kaistanleveyden on oltava vähintään luokkaa 2φn. Tämä toteutuu esimerkiksi (2- tai 3-ulotteisessa) ristikkoverkossa, jossa prosessorit ovat lävistäjällä ja muut solmut ovat reitittimiä, jotka vain välittävät dataa, katso kuvaa 13. Verkko voisi myös olla väylä, joka toimii prosessoreihin verrattuna n-kertaisella nopeudella. Muistimoduulien välisen tietoliikenteen toteuttamiseen tarvitaan vielä reititysalgoritmi, joka ohjaa datapaketit kohteisiinsa ruuhkitta. Reitityksessä on erityisesti varottava lukkiumatilanteita, joissa paketit estävät toistensa etenemisen. Yleispätevä keino lukkiuman murtamiseen on lisätä paketin lähettämiseen sen
11 Penttonen 19 korkean tason ohjelmointikieli pardo käännös hajautus matalan tason ohjelmointikieli viestinvälitys verkko P P P P P P P P yhteinen muisti M M M M Kuva 12: Yhteisen muistin ohjelman suorittaminen hajautetulla muistilla. verran satunnaisuutta, että lähetystilanne ei toistu askeleesta seuraavaan samanlaisena. Yhteinen muisti voidaan siis toteuttaa hajautetuilla muistimoduuleilla seuraavien periaatteiden mukaisesti: Yhteinen muisti hajautetaan muistimoduuleille satunnaistetulla hajautuksella. Muistisaannin viive korvataan käyttämällä hyväksi algoritmin tarjoamaa ylimääräistä rinnakkaisuutta. Tietoliikenneverkon kaistanleveyden tulee olla prosessorien lukumäärän ja verkon halkaisijan tulon suuruusluokkaa. Reititysalgoritmin tulee välittää paketit maaleihinsa ajassa, joka on verkon lävistäjän suuruusluokkaa. Näillä periaatteilla yhteisen muistimallin ohjelmia voidaan suorittaa hajautetun muistin koneessa. Suurimpana pullonkaulana tällä hetkellä on nopeiden kytkinten puuttuminen, sillä ilman niitä suuria tiedonsiirtonopeuksia ei pystytä käyttämään hyväksi prosessorin kellotaajuudella tehtävissä muistioperaatioissa. Koska kytkintenkin kehitys on nopeaa, on toiveita, että yleiskäyttöinen, halpa rinnakkaislaskenta tulisi mahdolliseksi muutaman vuoden sisällä. Onkin mielenkiintoista havaita, että supertietokoneiden valmistaja Cray myy rinnakkain perinteisiä yhteisen muistin vektoriprosessorikoneita (X1E), hajautetun muistin koneita (XT4), sekä ylimääräistä rinnaisuutta hyödyntävää monisäiekonetta (XMT) [3]. Näiden roolit ovat kallis teholaskentakone, edullinen massalaskentakone ja tulevaisuuden rinnakkaistietokone. 5 Yhteenveto Uskomattoman nopeasta ja pitkään jatkuneesta kehityksestä huolimatta peräkkäislaskennan tehon kasvulla on rajansa. Vaik-
12 20 Rinnakkaisalgoritmit ja rinnakkaistietokoneet Kuva 13: Harva torus, prosessorit lävistäjällä. ka prosessorien nopeudet ovat kasvaneet, muistien nopeutuminen on ollut hitaampaa. Myös valon nopeus asettaa rajoituksia: 1 GHz kellosyklin aikana valo etenee tyhjiössä vain 30 cm nopeiden peräkkäistietokoneiden pitäisi olla pieniä! Rinnakkaislaskenta tarjoaa taloudellisen tavan hankkia lisätehoa laskentaan. Viime aikoina kehitys on kulkenut hajautettujen tietokoneklusterien suuntaan, joissa laskennan hajautus prosessoreille jää ohjelmoijan vastuulle ja maksimiteho koneesta saadaan vain, jos rinnakkaisuus on suurirakeista. On kuitenkin lupa toivoa, että ennen pitkää yhteisen muistin mallille suunniteltujen algoritmien tehokas suorittaminen hajautetun muistin koneissa tulee mahdolliseksi. Tämä voi merkitä rinnakkaislaskennan nopeaa läpimurtoa. Vaikka näin ei kävisikään, rinnakkaislaskenta tulee joka tapauksessa laajenemaan, joskin hitaammin ja huomaamattomammin, sillä lisää laskentatehoa saadaan halvimmalla rinnakkaistaen. Tätä kehityslinjaa edustavat niin kutsutut moniydinprosessorit, joissa prosessorin sisällä on lisääntyvästi alettu käyttää rinnakkaisprosessoinnin periaatteita [10]. Viitteet [1] G. S. Almasi, A. Gottlieb: Highly Parallel Computing. The Benjamin/Cummings Publishing Company, [2] [ ] [3] [ ] [4] M. Davis. The Universal Computer. Norton & Company, 2000.
13 Penttonen 21 [5] [ ] [6] [ ] [7] J. Jájá: An Introduction to Parallel Algorithms. Addison Wesley [8] A. Karlin, E. Upfal. Parallel hashing an efficient implementation of shared memory. Journal of the ACM 35: (1988). [9] L. Mak. Parallelism always helps. SIAM J. Comput. 26: (1997). [10] [ ] [11] M. Penttonen. Johdatus algoritmien suunnitteluun ja analysointiin. Otatieto [12] L. G. Valiant. General purpose parallel architectures. In J. van Leeuwen, editor, Handbook of Theoretical Computer Science, Vol. A, Elsevier, [13] A. J. van der Steen, J. J. Dongarra. Overview of recent supercomputers. [ ]
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
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
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
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
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 =
Algoritmit 2. Luento 8 To Timo Männikkö
Algoritmit 2 Luento 8 To 4.4.2019 Timo Männikkö Luento 8 Algoritmien analysointi Algoritmien suunnittelu Rekursio Osittaminen Rekursioyhtälöt Rekursioyhtälön ratkaiseminen Master-lause Algoritmit 2 Kevät
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
Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007
Jaetun muistin muuntaminen viestin välitykseksi Otto Räsänen 15. lokakuuta 2007 1 Motivaatio 2 Valtuuden välitys Peruskäsitteitä 3 Kolme algoritmia Valtuuden välitys käyttäen laskuria ilman ylärajaa Valtuuden
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
Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?
Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin? 2013-2014 Lasse Lensu 2 Algoritmit ovat deterministisiä toimintaohjeita
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...
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
Algoritmit 2. Luento 14 Ke Timo Männikkö
Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan
Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari
Konsensusongelma hajautetuissa järjestelmissä Niko Välimäki 30.11.2007 Hajautetut algoritmit -seminaari Konsensusongelma Päätöksen muodostaminen hajautetussa järjestelmässä Prosessien välinen viestintä
811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta
811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden
Algoritmit 2. Luento 13 Ti Timo Männikkö
Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019
Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään
Ohjelmointi Ohjelmoinnissa koneelle annetaan tarkkoja käskyjä siitä, mitä koneen tulisi tehdä. Ohjelmointikieliä on olemassa useita satoja. Ohjelmoinnissa on oleellista asioiden hyvä suunnittelu etukäteen.
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ä
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
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,
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
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
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
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
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:
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
Algoritmit 1. Luento 12 Ti Timo Männikkö
Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit
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
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
Tietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
4.3. Matemaattinen induktio
4.3. Matemaattinen induktio Matemaattinen induktio: Deduktion laji Soveltuu, kun ominaisuus on osoitettava olevan voimassa luonnollisilla luvuilla. Suppea muoto P(n) : Ominaisuus, joka joka riippuu luvusta
Algoritmit 1. Luento 12 Ke Timo Männikkö
Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu
811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta
811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta kurssin alkuosasta II Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen
Algoritmit 1. Luento 11 Ti Timo Männikkö
Algoritmit 1 Luento 11 Ti 14.2.2017 Timo Männikkö Luento 11 Algoritminen ongelmanratkaisu Osittaminen Lomituslajittelu Lomituslajittelun vaativuus Rekursioyhtälöt Pikalajittelu Algoritmit 1 Kevät 2017
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.
Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla
Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan
Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö
Algoritmit 1 Luento 13 Ti 23.2.2016 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin
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
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
Tarkastelemme ensin konkreettista esimerkkiä ja johdamme sitten yleisen säännön, joilla voidaan tietyissä tapauksissa todeta kielen ei-säännöllisyys.
Ei-säännöllisiä kieliä [Sipser luku 1.4] Osoitamme, että joitain kieliä ei voi tunnistaa äärellisellä automaatilla. Tulos ei sinänsä ole erityisen yllättävä, koska äärellinen automaatti on äärimmäisen
811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
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
ICS-C2000 Tietojenkäsittelyteoria Kevät 2016
ICS-C2000 Tietojenkäsittelyteoria Kevät 206 Kierros 0, 2. 24. maaliskuuta Huom! Perjantaina 25. maaliskuuta ei ole laskareita (pitkäperjantai), käykää vapaasti valitsemassanne ryhmässä aiemmin viikolla.
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
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
9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko
9.5. Turingin kone Turingin kone on järjestetty seitsikko TM = (S, I, Γ, O, B, s 0, H), missä S on tilojen joukko, I on syöttöaakkosto, Γ on nauha-aakkosto, I Γ, O on äärellinen ohjeiden joukko, O S Γ
1 Aritmeettiset ja geometriset jonot
1 Aritmeettiset ja geometriset jonot Johdatus Johdatteleva esimerkki 1 Kasvutulille talletetaan vuoden jokaisen kuukauden alussa tammikuusta alkaen 100 euroa. Tilin nettokorkokanta on 6%. Korko lisätään
811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2016-2017 ari.vesanen (at) oulu.fi 5. Rekursio ja induktio Rekursio tarkoittaa jonkin asian määrittelyä itseensä viittaamalla Tietojenkäsittelyssä algoritmin määrittely niin,
4 Tehokkuus ja algoritmien suunnittelu
TIE-20100 Tietorakenteet ja algoritmit 52 4 Tehokkuus ja algoritmien suunnittelu Tässä luvussa pohditaan tehokkuuden käsitettä ja esitellään kurssilla käytetty kertaluokkanotaatio, jolla kuvataan algoritmin
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
Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Satunnaisalgoritmit Topi Paavilainen Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Helsinki, 23. helmikuuta 2014 1 Johdanto Satunnaisalgoritmit ovat algoritmeja, joiden
Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.
Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,
1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:
Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return
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
TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?
Miksi moniprosessorijärjestelmä? Laskentaa voidaan hajauttaa useammille prosessoreille nopeuden, modulaarisuuden ja luotettavuuden vaatimuksesta tai hajauttaminen voi helpottaa ohjelmointia. Voi olla järkevää
Nopea kertolasku, Karatsuban algoritmi
Nopea kertolasku, Karatsuban algoritmi Mikko Männikkö 16.8.2004 Lähde: ((Gathen and Gerhard 1999) luku II.8) Esityksen kulku Algoritmien analysointia (1), (2), (3), (4) Klassinen kertolasku Parempi tapa
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
3. Laskennan vaativuusteoriaa
3. Laskennan vaativuusteoriaa tähän asti puhuttu siitä, mitä on mahdollista laskea äärellisessä ajassa siirrytään tarkastelemaan laskemista kohtuullisessa ajassa vaihtoehtoisesti voidaan laskenta-ajan
Algoritmit 2. Luento 13 Ti Timo Männikkö
Algoritmit 2 Luento 13 Ti 2.5.2017 Timo Männikkö Luento 13 Merkkijonon sovitus Horspoolin algoritmi Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys
Algoritmit 2. Luento 2 Ke Timo Männikkö
Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento
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
Ohjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 21.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2015 1 / 25 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
Rinnakkaistietokoneet luento S
Rinnakkaistietokoneet luento 2 521475S Tietokonealgoritmien rinnakkaisuuden analysointi Algoritmi on proseduuri, joka koostuu äärellisestä joukosta yksiselitteisiä sääntöjä jotka muodostavat operaatiosekvenssin,
Tietorakenteet, laskuharjoitus 7, ratkaisuja
Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9
Itsestabilointi: perusmääritelmiä ja klassisia tuloksia
Itsestabilointi: perusmääritelmiä ja klassisia tuloksia Jukka Suomela Hajautettujen algoritmien seminaari 12.10.2007 Hajautetut järjestelmät Ei enää voida lähteä oletuksesta, että kaikki toimii ja mikään
Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.
Vaihto-ominaisuudella on seuraava intuition kannalta keskeinen seuraus: Olkoot A I ja B I samankokoisia riippumattomia joukkoja: A = B = m jollain m > 0. Olkoon vielä n = m A B, jolloin A B = B A = n.
ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012
ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,
Algoritmit 2. Luento 2 To Timo Männikkö
Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento
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ä
Esimerkkejä polynomisista ja ei-polynomisista ongelmista
Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia
Esimerkkejä vaativuusluokista
Esimerkkejä vaativuusluokista Seuraaville kalvoille on poimittu joitain esimerkkejä havainnollistamaan algoritmien aikavaativuusluokkia. Esimerkit on valittu melko mielivaltaisesti laitoksella tehtävään
Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.
Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta
Ohjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CS-A1111 26.9.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 26.9.2018 1 / 21 Oppimistavoitteet: tämän luennon jälkeen Osaat kirjoittaa for-käskyn avulla ohjelman, joka toistaa haluttua
815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen
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
Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,
Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, että se pystyy suorittamaan kaikki mahdolliset algoritmit?
Algoritmit 2. Luento 4 To Timo Männikkö
Algoritmit 2 Luento 4 To 21.3.2019 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2019 Luento 4
Vuonohjaus: ikkunamekanismi
J. Virtamo 38.3141 Teleliikenneteoria / Ikkunointiin perustuva vuonohjaus 1 Vuonohjaus: ikkunamekanismi Kuittaamattomina liikkeellä olevien segmenttien (data unit) lkm W (ikkuna) Lähetyslupien kokonaismäärä
etunimi, sukunimi ja opiskelijanumero ja näillä
Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
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
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)
TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011
TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti
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
Säännöllisten kielten sulkeumaominaisuudet
Säännöllisten kielten sulkeumaominaisuudet Osoitamme nyt, että säännöllisten kielten joukko on suljettu yhdisteen, konkatenaation ja tähtioperaation suhteen. Toisin sanoen jos A ja B ovat säännöllisiä,
Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja
582206 Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja 1. Seuraavissa laskennoissa tilat on numeroitu sarakkeittain ylhäältä alas jättäen kuitenkin hyväksyvä tila välistä. Turingin koneen laskenta
isomeerejä yhteensä yhdeksän kappaletta.
Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua
Tarkennamme geneeristä painamiskorotusalgoritmia
Korotus-eteen-algoritmi (relabel-to-front) Tarkennamme geneeristä painamiskorotusalgoritmia kiinnittämällä tarkasti, missä järjestyksessä Push- ja Raise-operaatioita suoritetaan. Algoritmin peruskomponentiksi
58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut
58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 1. Palautetaan vielä mieleen O-notaation määritelmä. Olkoon f ja g funktioita luonnollisilta luvuilta positiivisille
Osoitin ja viittaus C++:ssa
Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja
Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö
Johdatus diskreettiin matematiikkaan Harjoitus 5, 14.10.2015 1. Ratkaise rekursioyhtälö x n+4 2x n+2 + x n 16( 1) n, n N, alkuarvoilla x 1 2, x 2 14, x 3 18 ja x 4 42. Ratkaisu. Vastaavan homogeenisen
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 25.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 25.1.2010 1 / 41 Valintakäsky if Tähänastiset ohjelmat ovat toimineen aina samalla tavalla. Usein ohjelman pitäisi
Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)
Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,
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
1. Logiikan ja joukko-opin alkeet
1. Logiikan ja joukko-opin alkeet 1.1. Logiikkaa 1. Osoita totuusarvotauluja käyttäen, että implikaatio p q voidaan kirjoittaa muotoon p q, ts. että propositio (p q) ( p q) on identtisesti tosi. 2. Todista
1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.
Algoritmien DP ja MF vertaileminen tapahtuu suoraviivaisesti kirjoittamalla kummankin leskimääräinen kustannus eksplisiittisesti todennäköisyyksien avulla. Lause T MF ave = 1 + 2 1 i
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
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ä