Moniydinsuorittimien rinnakkaisohjelmointi

Koko: px
Aloita esitys sivulta:

Download "Moniydinsuorittimien rinnakkaisohjelmointi"

Transkriptio

1 Moniydinsuorittimien rinnakkaisohjelmointi Turun yliopisto Informaatioteknologian laitos Tietojenkäsittelytiede Pro gradu -tutkielma Jari-Matti Mäkelä Maaliskuu 2011

2 TURUN YLIOPISTO Informaatioteknologian laitos / Matemaattis-luonnontieteellinen tiedekunta MÄKELÄ, JARI-MATTI: Moniydinsuorittimien rinnakkaisohjelmointi Pro gradu -tutkielma, 115 s. Tietojenkäsittelytiede Maaliskuu 2011 Tietokoneiden nopeuskehitys on aina viime vuosiin asti ollut eksponentiaalista ja perustunut peräkkäismuotoisen käskyvirran suorituksen nopeuttamiseen kellotaajuutta nostamalla ja yksittäisen käskyn suoritusaikaa kutistamalla (käskytason rinnakkaisuus, ILP). Kehitys on seurausta valmistustekniikan paranemisesta sekä ns. Mooren laista, jonka mukaan piirille integroitujen transistorien määrä kaksinkertaistuu säännöllisin välein. Nopeuden kasvu näin on kuitenkin lähes pysähtynyt, koska ILP ei ole parantunut enää ratkaisevasti, transistorien lukumäärän kasvaessa tehonkulutus on karannut hallitsemattomaksi ja suorittimen toiminnallisten yksiköiden välisen viestinvälityksen viiveet ovat muuttuneet erityisen ongelmallisiksi. Peräkkäismuotoisen ohjelmoinnin seuraajaksi on nyt toistamiseen kaavailtu rinnakkaisarkkitehtuureja, jotka perustuvat tehon lisäämiseen suorittimien määrää kasvattamalla. Aiemmin rinnakkaisohjelmointi nähtiin lähinnä vaihtoehdoksi monen suorittimen ja tietokoneen laskentaryppäissä, joissa yksittäinen suoritin toimi lähes täysin peräkkäisesti tai paljon moniydinsuorittimia suppeammin keinoin, esimerkiksi vektorikäskyin. Koska Mooren laki pätee yhä transistorien lukumäärän kasvun osalta, uutena ideana on integroitu useita, tehonkulutuksen laskemiseksi mahdollisesti aiempaa hitaampia, suoritinytimiä yksittäisen suorittimen sisään. Työssä on otettu tarkasteluun neljä merkittävää moniydinarkkitehtuuria (Intel x86, Cell BE, Nvidia Fermi ja XMT) ja pyritty identifioimaan ja analysoimaan arkkitehtuurin tasolla merkittävimmät parametrit ja ominaisuudet rinnakkaisuuden kannalta. Tarkastelu on tämän jälkeen laajennettu laskenta- ja ohjelmointimalleihin, joiden rooli on määrittää tehokas, helppokäyttöinen, virheitä estävä ja yleinen tapa kuvata rinnakkaisalgoritmeja. Alustoista on otettu esimerkeiksi OpenMP, MPI, tapahtumaperustainen muisti sekä lyhyesti joukko muita relevantteja ja tunnettuja teknologioita. Malleista on vastaavasti poimittu yleisiä analysoitavia piirteitä, minkä jälkeen niiden oikeellisuutta, monikäyttöisyyttä ja suorituskykyä on arvioitu valittujen arkkitehtuurien käyttöönotossa. Asiasanat: moniydinsuoritin, rinnakkaisohjelmointi, rinnakkaisarkkitehtuuri

3 UNIVERSITY OF TURKU Department of Information Technology MÄKELÄ, JARI-MATTI: Parallel programming on multi-core architectures Master s thesis, 115 p. Computer science March 2011 Until to date, the performance improvements in computers have followed an exponential trend. The main accelerators of this phase have been ever increasing operating frequencies and shortening of instruction execution time via instruction level parallelism (ILP), which have been made possible by the advancements in chip processing technology and the so-called Moore s law. The law states that the number of transistors doubles periodically. Unfortunately this pace has almost grinded to a halt, due to the diminishing returns of ILP, an uncontrollable increase in heat production, and the growing latencies between on-chip operational units. Parallel architectures have been proposed as a successor to this sequental computing. Parallel programming enables higher throughput via utilizing more computational cores. Previously this opportunity was seen as a realistic option only in clusters and other high performance computing, where each CPU operated sequentially or supported only a limited form of parallelism, e.g. vector processing. Since Moore s law still applies, we can now cram several, possibly slower low-power processing cores on a single chip multiprocessor (CMP). In this thesis four major multicore architectures (Intel x86, Cell BE, Nvidia Fermi, and XMT) are examined. First, we identify a set of parameters and properties for analysing the parallelism in various designs. After the architectural analysis we continue with a similar set of characteristic features for computational models of parallel programming. The task of these models is to provide an efficient, productive, easy to use, safe, and general way of expressing parallel algorithms. OpenMP, MPI, software transactional memory, and a set of other contemporary technologies are analysed both as computational and programming models and as an enabling technology for the physical architectures analysed earlier in the thesis. Special emphasis is laid upon the analysis of correctness, versatility, and performance of these hardware/software combinations. Keywords: multicore processor, parallel programming, parallel architecture

4 Sisältö 1 Johdanto Laskennan mallit Von Neumann -arkkitehtuuri Rinnakkaisarkkitehtuurit Moniydinarkkitehtuurien käsitteitä Arkkitehtuurin perusosat Laskentayksikkö Muistiyksikkö Verkko Termejä Rinnakkaisuuden mallintaminen Abstraktiotasot Flynnin taksonomia Säikeiden hallinta laitteistossa Moniydinarkkitehtuureja Valintaperusteet Intel x Kommunikaatioverkko Muistihierarkia Laskentayksiköt MMX/SSE-käskykanta Cell Broadband Engine Kommunikaatioverkko Muistihierarkia Laskentayksiköt Muita käyttökohteita NVIDIA Fermi

5 3.4.1 Kommunikaatioverkko Laskentayksiköt Muistihierarkia PRAM-arkkitehtuurit ECLIPSE MOTH XMT Kommunikaatioverkko Muistihierarkia Laskentayksiköt Yhteenveto Laskentateho Muisti Kommunikointi Tehokas käyttö Laskenta- ja ohjelmointimallit Karakterisoivia piirteitä Työn esittäminen Työn ratkaisumenetelmä Kielelliset abstraktiot Esitysmuodon aiheuttamat ongelmatilanteet Jaettu muisti PRAM Tapahtumaperustainen muisti OpenMP Viestinvälitys MPI Katsaus muihin malleihin Tietovirtaohjelmointi Implisiittinen rinnakkaisuus Deklaratiivinen ohjelmointi

6 5 Moniydinarkkitehtuurien ohjelmointi Oikeellisuus Monikäyttöisyys Suorituskyky Johtopäätökset Arkkitehtuuri Laskenta- ja ohjelmointimallit Arkkitehtuurien ohjelmointi Tutkimuksen jatkaminen Viitteet 105

7 Kuvat 1 Von Neumann -arkkitehtuurimalli Suorittimen ja muistin suhteellinen nopeuskehitys Suorittimien keskeisten tehosuureiden kehitys Grafiikka- ja x86-suorittimien nopeuskehitys Erilaisia laitteiston arkkitehtuuriratkaisuja Eri tapoja täyttää superskalaari liukuhihna Symmetric multiprocessing (SMP) -tyylinen väylä QuickPath Interconnect -verkon abstrakti rakenne Core i7:n muistimalli ja verkko Core i7 -arkkitehtuuri Cell-arkkitehtuuri Cell BE:n muistimalli ja verkko Fermi-grafiikkasuorittimen rakenne Tietovirtasuorittimen rakenne Liikkuvien säikeiden arkkitehtuurin hahmotelma XMT:n lohkokaavio Rypäsyksikön lohkokaavio Fork/join-ohjelmointimalli Joukkomuotoisen kommunikoinnin tekniikat MPI:ssä

8 Taulukot 1 Bittitason rinnakkaisuus kertolaskussa Flynnin taksonomia Arkkitehtuurien teoreettinen laskentateho Arkkitehtuurien teoreettinen muistikaista ja viiveet

9 1 Johdanto 1.1 Laskennan mallit Tietojenkäsittelyssä laskennallisen ongelman algoritmista mallintamista ja analysointia varten voidaan poimia kolme keskeistä abstraktiota, jotka ovat tietokoneen arkkitehtuuri-, ohjelmointi- ja laskentamalli. Nämä kolme mallia karakterisoivat tarkasti koneen luoman toimintaympäristön, jossa algoritmi suoritetaan. Mallit määrittävät sen, mikä algoritmi soveltuu ongelmanratkaisuun parhaiten. Mallien avulla voidaan määrittää algoritmin perusominaisuuksia, esimerkiksi sen ajan- ja tilankäyttö, mutta niitä voidaan myös käyttää hyödyksi esimerkiksi algoritmin oikeaksi todistamisessa. [MMT95]. Laskenta- ja ohjelmointimalli ovat abstrakteja korkean tason malleja. Laskentamalli kuvaa abstraktin laskentalaitteen, jolla algoritmi voidaan suorittaa. Se määrittää rajapinnan datan käsittelyn semantiikalle algoritmin peräkkäisissä ja samanaikaisuutta vaativissa osissa. Ohjelmointimalli määrittelee algoritmin esittämistä varten laskentamallia noudattavan ja mahdollisesti laskentamallin ja laitteiston rajapintoja seuraavan joukon ohjelmointikielen rakenteita ja käsitteitä. [MMT95]. Arkkitehtuurimalli on matalan tason malli, joka määrittää yksityiskohtaisesti menetelmät ohjelmointikielellä laaditun ohjelman kääntämiseksi (tehokkaasti) konekielelle sekä laskutoimitusten kustannukset käytetyllä laitteistolla. Algoritmin rakentaminen laskenta- ja ohjelmointimallia vasten antaa alustavan kuvan sen algoritmisista ominaisuuksista sekä asymptoottisesta suorituskyvystä, mutta vasta arkkitehtuurimalli mukaan huomioituna nämä ominaisuudet voidaan laskea tarkasti. [MMT95]. Vastaavasti pelkkää arkkitehtuurimallia käyttäen on usein vaikea todentaa erilaisia algoritmisia ominaisuuksia. 1.2 Von Neumann -arkkitehtuuri Historiallisesti merkittävä ja nykyisten tietokoneiden rakennetta merkittävästi motivoinut tietokonearkkitehtuuri oli ns. von Neumann -tyyppinen hajasaantikone, 1

10 joka on käytännöllisesti katsoen Turing-täydellinen 1 laskentamalli. Hajasaantikone muodostuu ohjelman ja datan kesken jaetusta keskusmuistista sekä ohjaus- ja aritmeettis-loogisten yksiköiden muodostamasta suorittimesta (kuva 1). Sen käskykanta kattaa suorituksen ohjauksen, laskutoimitukset sekä keskusmuistin lukemisen ja kirjoittamisen vapaassa järjestyksessä. Ohjelman suoritus etenee peräkkäismuotoisena siten, että aina edellisen käskyn jälkeinen lopputila toimii alkutilana seuraavalle. [Neu45]. Control Unit Arithmetic Logic Unit Input/Output Memory Kuva 1: Von Neumann -arkkitehtuurimalli [Neu45] luvun taitteessa muisti- (luku 2.1.2) ja laskentayksiköt (luku 2.1.1) kyettiin valmistamaan yhtä nopeiksi, mutta laskentayksiköiden nopeus on kasvanut vuosittain vuodesta 1987 asti noin 55% ja DRAM-tyyppisen [HPGA03] keskusmuistin vain noin 7% (kuva 2). Tämä epätasapaino on kannustanut toteuttamaan ratkaisuja muistin viipeen kompensoimiseksi, jotta laskennan suorituksen ei tarvitsisi pysähtyä aina muistioperaatioiden ajaksi. Lähes kaikki nykyaikaiset arkkitehtuurit hyödyntävät näitä tekniikoita. [HPGA03], eivätkä siis ole enää olekaan puhtaasti von Neumann -mallin mukaisia. Niitä on siitä huolimatta kritisoitu mm. tästä von Neumann -mallille tyypillisestä muistikaistan rajoittavasta vaikutuksesta suoritinten laskentanopeuden kasvaessa. Käytännössä suorittimiin on aina integroitu hyvin nopeaa paikallista muistia (rekisterit ja vastaavat loogiset komponentit), joka on tarkoitettu lähinnä laskennan 1 Turing-täydellisyys edellyttäisi ääretöntä muistiresurssia, mikä on käytännössä mahdottomuus. 2

11 Kuva 2: Suorittimen ja muistin suhteellinen nopeuskehitys [HPGA03]. välituloksia varten. Tämä usein SRAM-tyyppinen [HPGA03] muisti on kertaluokkaa fyysisesti kookkaampaa ja kalliimpaa kuin keskusmuisti, mikä rajoittaa sen käyttöä merkittävästi. Suuren nopeuden vuoksi sitä käytetään myös ns. muistihierarkioissa välimuistina; käytännön arkkitehtuureissa muistihierarkia koostuu 1 4 eri tasosta, jotka eroavat toisistaan kapasiteetin ja viipeen osalta siten, että muistiyksikön viive on usein lähes kääntäen verrannollinen sen kapasiteettiin nähden. [HPGA03]. Välimuistin tehtävä on tarjota suorittimelle keskusmuistin muistiavaruus niin, että muistioperaatiot suoritetaan välimuistissa, mikäli data on saatavilla niissä paikallisesti. Toiminta perustuu muistin käytön säännöllisyyteen; heuristiikkana on esimerkiksi osoitteiden paikallinen ja ajallinen läheisyys; lähekkäiset osoitteet tallennetaan välimuistiin riveiksi kutsutuissa lohkoissa, kun taas laitteiston käyttämä rivien korvaamispolitiikka määrittää ajallisen läheisyyden. [HPGA03]. Välimuisti aiheuttaa datan kopioitumista useaan paikkaan, ja tätä myötä se edellyttää datan synkronointia keskusmuistin kanssa, mikäli samaa dataa käyttää jokin ulkopuolinen taho muistihierarkian ohitse. Synkronoinnin viive pyritään kätkemään suorittimelta niin, että kokonaisuutena datan nopeampi saatavuus laskee muistin käytön keskimääräistä viivettä. [HPGA03]. Välimuistin ensimmäiset tasot 3

12 on nykyään tyypillisesti integroitu suoritinpiirille tehokkuussyistä. Tämä tarkoittaa, että välimuistit kilpailevat samoista teho- ja transistoriresursseista laskentayksiköiden kanssa. [Pol99]. Käytännössä monien laskettavien ongelmien kullakin lyhyellä aikavälillä käyttämä työmuisti (working set [Tan07]) on verrattain pieni, joten kapasiteetin lisääminen muistihierarkian välimuisteihin tuo tietyn pisteen jälkeen vain pieniä nopeusparannuksia. Suuremman muistimäärän käyttö saattaa pakottaa käyttämään myös hitaampaa muistityyppiä transistorien säästämiseksi, joten nykyisin käytettyjen välimuistimäärien voi nähdä olevan mm. näiden parametrien välisen optimoinnin tulos. Muistioperaatioiden ja laskennan huomattavan nopeuseron lisäksi toinen von Neumann -vaikutteisten arkkitehtuurien rajoite näkyy peräkkäisten laskentaoperaatioiden nopeuskehityksessä valmistustekniikan kehittyessä; viimeisen puolen vuosikymmenen ajan tämä nopeus ei ole kasvanut enää merkittävästi. Syitä tähän ovat kellotaajuuden kasvattamiseen liittyvät fyysiset sekä suorittimen loogisessa rakenteessa ns. käskytason rinnakkaisuuden (luku 2.3.1) ongelmat. [HPGA03, Pol99]. Kellotaajuuden kasvattamisen ongelma liittyy puolijohdetekniikan tehonkulutukseen. Transistorin tehonkulutus (P ) määräytyy kaavasta: P = α C V 2 f missä α kuvaa komponentin aktiivisuutta (kuinka suuren osan ajasta virta on kytkettynä), C kapasitanssia, V jännitettä ja f kellotaajuutta [HPGA03]. Kun yhtäältä ns. Mooren laki [Gor65] 2 on mahdollistanut piirille integroitujen transistorien määrän tuplaamisen aina noin 18 kuukauden välein ja toisaalta laskentatehoa on tuotu lisää kellotaajuutta nostamalla, tehonkulutus on kasvanut valtavasti. [Pol99]. Ongelmia eivät ole pelkästään sähkönkulutuksen aiheuttamat käyttökustannukset suurteholaskennassa sekä vaikutukset esim. kannettavissa laitteissa akun käyttö- 2 Tutkielmassa Mooren lailla viitataan suurpiirteiseen nykynäkemykseen. Sekä intervalli (12-24 kk) että kasvun merkitys (transistorien määrä, laskentatehon määrä, laskentatehon määrä samalla ostohinnalla) vaihtelevat tulkinnan mukaan. 4

13 aikaan, vaan suoraviivainen lämpöenergian siirto pois mikropiiriltä ja sen läheisyydestä on muuttunut haasteelliseksi. [Pol99]. Ilmiötä havainnollistaa valtavirtakielien käyttäjille suunnatun H. Sutterin artikkelin [Sut05] yhteydessä esitetty kuva 3. Tehonkulutuksen hallinta onkin nykyisin relevantti ongelma joka sovellusalueella: keskuskoneissa, palvelimissa, työpöytäkoneissa että mobiililaitteissa. Kuva 3: Suorittimien keskeisten tehosuureiden kehitys [Sut05]. Esitetty tehonkulutusyhtälö antaa kuitenkin myös toivoa. Paremman valmistustekniikan ansiosta tehonkulutusta saadaan laskettua sekä käyttöjännitettä että virran kytkennän muita kustannuksia laskemalla. Jännite ja kellotaajuus ovat kyt- 5

14 köksissä niin, että taajuuden pienentyessä myös toimintajännitteen stabiili alue laajenee alaspäin. [HPGA03]. Tämä tarkoittaa käytännössä sitä, että tehonkulutuksen pysyessä vakiona on laskentatehoa mahdollista kasvattaa lisäämällä transistoreja enemmän kuin mitä kellotaajuutta tarvitsee laskea. Tämä toimii myös johdatuksena seuraavaksi esitettävään ideaan. 1.3 Rinnakkaisarkkitehtuurit Muistin ja suorittimen suorituskyvyn kasvun taantumisen seurauksena alettiin etsiä vaihtoehtoisia suoritusmalleja. Luonnollinen tapa jatkaa kehitystä oli monistaa mainittuja yksiköitä, jonka seurauksena laskentaa voitiin tehdä rinnakkain. [Sut05, DvdS96]. Yksiköiden monistaminen on toiminut yllättävän hyvin grafiikkasuoritinteknologiassa; näiden laskentakyky on viime vuosina kasvanut huomattavasti tietokoneiden keskussuorittimia nopeammin (kuva 4). Kuva 4: Grafiikka- ja x86-suorittimien nopeuskehitys [OLG + 05]. Rinnakkaislaskennalla on jo pitkä, 1950-luvulta [BBH + 81] alkanut historia ns. supertietokoneiden yhteydessä, mutta tutkielman kannalta olennainen kehitysaskel otettiin, kun kehittyneemmän valmistusprosessin ansiosta syntyi mahdollisuus koota aiempi erillisistä yksiköistä ( ytimistä ) koostuva järjestelmä yksittäisen mikropiirin sisään (chip multiprocessor, CMP). Nykyään nämä moniydinarkkitehtuurit 6

15 muodostavat yhden seuratuimmista laitteiston kehityssuunnista. Moniydintekniikka on viime aikoina yleistynyt räjähdysmäisesti eri käyttökohteissa, mistä syystä moniytimisiä suorittimia käytetään jo älypuhelinten [vb09] kokoisista laitteista alkaen erilaisessa elektroniikassa. Rinnakkaislaskenta tuo kuitenkin haasteita sekä laitteiston että algoritmien suunnitteluun. Arkkitehtuurin käyttämät komponentit voidaan valita ja organisoida eri tavoin mikropiirille. Molemmat seikat vaativat huomiointia laskentakuorman tasaamisessa sekä komponenttien välisen kommunikoinnin reitittämisessä. Luku 2 käsittelee lähemmin ongelmaa arkkitehtuurin kannalta ja perustelee myös, miksi jatkokehitettykin von Neumann -tyylinen ratkaisu näyttäisi tulleen tiensä päähän. Luku 3 jatkaa arkkitehtuurien tarkastelua tunnetuilla konkreettisilla arkkitehtuurityypeillä. Esimerkeiksi otetaan Intel x86, Cell BE, grafiikkasuoritinteknologiat sekä PRAM-mallia [FW78] soveltavat arkkitehtuurit. Niin sanottu Amdahlin laki lausuu, miten tehtävästä rinnakkaisuudella (parallelism) saavutettava laskentakyky on riippuvainen viime kädessä siitä, miten suuri osa siitä voidaan rinnakkaistaa. Esimerkiksi jos suoritusajallisesti 90% algoritmista rinnakkaistuu äärettömän monelle suorittimelle, mutta 10% vaatii peräkkäisen suorituksen, kokonaisuudessaan rinnakkaisuus voi lisätä tehtävän tehokkuuden vain kymmenkertaiseksi. Laitteisto voi toki suorittaa vapaaksi jääneillä resursseilla mahdollisesti myös muita samanaikaisia tehtäviä. Amdahlin laki määrittää algoritmin suoritusnopeudelle teoreettisen ylärajan, joten se on syytä ottaa huomioon tarpeettomien rajoitteiden välttämiseksi jokaisella kolmella esitellyllä abstraktiotasolla. Samanaikainen suoritus (concurrency), joko rinnakkain tai peräkkäin esim. säikeiden (thread) vuorottelulla on ollut ja on yhä monesti veret seisauttava ohjelmointikokemus. Arkkitehtuurit ovat yhä uusien optimointimahdollisuuksien toivossa sekoittaneet muistin eheysmalleja (consistency model) eli muistiresurssin semantiikan säännöstöjä niin, että oikein toimivan monisäikeisen ohjelman kirjoittaminen on muuttunut huomattavasti peräkkäismuotoista vastinetta vaikeammaksi. Ohjelmointikielten tekijät ovat pahentaneet tilannetta jättämällä abstrahoimatta vastaavan muistimallin joko kokonaan tai osittain, tai tehneet määrittelystä niin 7

16 monimutkaisen, ettei se ole verifioitavissa tai juuri avuksi tavanomaisissa ohjelmointitilanteissa. [AB10]. Samanaikaisen suorituksen ongelmat liittyvät ohjelman koordinointiin siten, että algoritmin ei haluta päätyvän virhetilanteeseen, josta järjestelmä ei automaattisesti kykene toipumaan. Tyypilliset ongelmat ovat suorituksen jumiutuminen resurssien virheellisen varausjärjestyksen takia eli lukkiuma (deadlock) sekä kilpailutilanne (race condition). Kilpatilanteessa ohjelman suoritukseen liittyvä epädeterministisyys voi vaikuttaa suorituksen välituloksiin tai lopputulokseen. Koska kilpatilanteeseen ei ole kehitetty mitään käyttökelpoista suoritusmallia, tila on järkevintä pyrkiä välttämään kokonaaan. On kuitenkin syytä huomata, että rinnakkaisuus ei automaattisesti johda samanaikaisuuden ongelmiin, varsinkaan huolellisesti rajattuja laskentamalleja käytettäessä. [AB10]. Moniydinarkkitehtuurien muodossa valtavirtaan uuden paluun tehnyt rinnakkaisohjelmointi sisältää kuitenkin aineksia tutkimuskysymyksille siitä, miten näitä arkkitehtuureja tulisi ohjelmoida tehokkaasti ja tuottavasti. Perinteisen rinnakkaisohjelmoinnin ansiosta saatavilla on joukko rinnakkaisohjelmoinnin työkaluympäristöjä ja teorioita [KR90], mutta näiden soveltuvuus uusille alustoille ei ole automaattisesti selvää. Selvä esimerkki moniydinjärjestelmien erosta perinteisiin laskentaryppäisiin on laskenta- ja muistiresurssien kertaluokkia suurempi fyysinen läheisyys, mikä mahdollistaa nopeamman kommunikoinnin ja datan jakamisen. Työn päätavoite onkin selvittää joukolla moderneja arkkitehtuureja sekä laskentaja ohjelmointimalleja keinoja nähdä, mitkä piirteet ovat relevantteja moniydinjärjestelmien ohjelmoinnissa ja miten mallit soveltuvat tehtäväänsä. Luku 4 havainnollistaa rinnakkaisongelmien ohjelmointia ottamalla esimerkinomaisesti käsittelyyn erilaisia luvun 3 arkkitehtuurien ohjelmointiin soveltuvia tunnettuja laskenta- ja ohjelmointimalleja sekä niiden toteutuksia. Huomio kiinnitetään myös ohjelmointimallien suureen saatavuuteen, joka on paljolti seurausta aihepiirin aktiivisesti kehittymisestä. Aihepiirin analysoinnin päättää luku 5, jossa pohditaan laskenta- ja ohjelmointimallien ominaisuuksia valittujen moniydinarkkitehtuurien hyödyntämisessä, saatavilla olevia resursseja tehokkaasti hyödyntäen, mutta toisaalta samalla ohjelmoitavuutta arvioiden. Lopuksi työn loppupäätelmissä (luku 8

17 6) kootaan yhteen tulokset käsitellyiltä abstraktiotasoilta ja pohditaan järkeviä suuntia jatkaa moniydinjärjestelmien ohjelmointiin liittyvää tutkimusta. 9

18 2 Moniydinarkkitehtuurien käsitteitä Tämä luku luo pohjan moniydinohjelmoinnin myöhemmälle analysoinnille tarkastelemalla monen suoritinytimen rinnakkaisarkkitehtuureja laitteiston näkökulmasta. Luku esittelee ensin arkkitehtuurin muodostavat osat (luku 2.1). Luku 2.2 määrittelee ne termit, joilla tässä tutkielmassa viitataan eri arkkitehtuurit muodostaviin perusosiin. Lopuksi luku 2.3 tarkastelee joukon rinnakkaisuuden toteutuksen mallintamiseen käytettyjä menetelmiä. Käytettyjä lähestymistapoja sovelletaan myöhemmin luvussa 3, jossa tarkastelu laajenee konkreettisiin arkkitehtuureihin sekä lyhyeen yhteenvetoon niiden välillä. 2.1 Arkkitehtuurin perusosat Kaupalliset suoritin- ja tietokonearkkitehtuurit ovat hyvin monimutkaisia kokonaisuuksia. Tyypillisesti mikään yksittäinen ominaisuus ei karakterisoi niiden suorituskykyä käytännöllisissä tilanteissa, sillä laskentateho muodostuu useiden eri toteutustekniikoiden yhteisvaikutuksesta. Mikäli arkkitehtuurien kuvauksesta abstrahoidaan pois kaikki laskennan kannalta toissijaiset komponentit, esimerkiksi syöttö- ja tulostuslaitteet, eri arkkitehtuureissa on kuitenkin nähtävissä kolme osaa, jotka määrittävät merkittävästi niiden suorituskykyä. Nämä tutkielman kannalta olennaiset osat ovat i) laskentayksiköt, ii) muistiyksiköt sekä näiden väliset iii) kommunikaatiokanavat tai verkot. Kuvassa 5 on esimerkinomaisesti kuvattu kaksi mahdollista tapaa kytkeä mainitut kolme osatyyppiä toisiinsa (rengasverkon reititys on katsottu kuvassa sisältyvän laskentayksiköihin). Router CPU CPU CPU CPU CPU node Memory Memory Memory Memory (a) Rengasverkko, hajautettu muisti. (b) Harva 2D-hilaverkko. Kuva 5: Erilaisia laitteiston arkkitehtuuriratkaisuja. Seuraavaksi käsitellään tarkemmin kuvan 5 esittelemät kolme yksikköä. 10

19 2.1.1 Laskentayksikkö Laskentayksiköksi (computational unit) määritellään tässä sellainen suorittimen (luku 2.2) osa, joka pystyy itsenäisesti suorittamaan joukon käskykannan käskyjä, toisin sanoen viemään ohjelman suoritusta askeleen eteenpäin. Esimerkiksi esitetystä Von Neumann -mallissa (kuva 1) laskentayksikön määritelmä kattaa kontrolli- ja aritmeettis loogiset yksiköt, joiden suoritettavaksi säikeen (luku 2.2) seuraava käsky voidaan antaa. Edelliseen on kuitenkin poikkeuksia, esimerkiksi liukuhihnat, jaetut laskentayksiköt sekä rinnakkaiset ja identtiset saman ohjelmalaskurin jakavat laskentayksiköt. Liukuhihnat suorittavat joka askelella vain osan käskyä, mutta samanaikaisesti osia eri käskyistä; liukuhihnan leveys määrittää suorituksesta valmistuvien käskyjen maksimimäärän aikayksikköä kohti. Jaetut laskentayksiköt saavat eri ohjelmalaskuria käyttäviltä kontrolliyksiköiltä käskyjä esimerkiksi jonotusperiaatteella, minkä tarkoituksena on fyysisen tilantarpeen pienentäminen vähän käytettyjä yksiköitä jakamalla. Tekniikka ei laske suorituskykyä merkittävästi, mikäli jaettu yksikkö ei ruuhkaudu samanaikaisten suorituspyyntöjen vuoksi Muistiyksikkö Muistiyksiköt sisältävät ohjelman sekä sen käyttämän datan, joko samassa tai erillisissä muistiavaruuksissa. Ohjelman ja datan jaon lisäksi muistiavaruus on tyypillisesti joko jaettu kaikkien laskentayksiköiden kesken (= jaettu muisti) tai hajautettu, jolloin laskentayksiköillä on omat yksityiset muistialueensa (= hajautettu muisti). Kolmas mahdollisuus on hajautettu jaettu muisti, joka on esimerkiksi fyysisesti hajautettu, mutta käsitteellisesti jaettu yksittäinen muistiavaruus. [HPGA03]. Jaettu muisti jaetaan tyypillisesti yhä edelleen UMA- (uniform memory architecture) ja NUMA-tyyppeihin (non-uniform memory architecture) käyttökustannuksensa mukaan. Tyypin eroavat siten, että UMA-muistin koko muistiavaruudella on 11

20 homogeeninen käyttökustannus, kun taas NUMA-muistissa osa muistiavaruudesta on lähempänä, ja näin edullisempaa käyttää. [HPGA03]. Yksittäinen muistiyksikkö voi sisäisesti olla jaettu aliyksiköihin, esimerkiksi suorituskyvyn parantamiseksi, limittäisiksi muistipankeiksi ja/tai muistihierarkiaksi. Muita olennaisia muistin parametreja ovat muistiväylän leveys, joka määrittää yhden muistikomennon kerralla siirtämän datan määrän sekä eri muistin toimintojen (esim. luku, kirjoitus) viipeet. Nykyisissä arkkitehtuureissa keskusmuistina käytettyjen DRAM-tyyppisten muistiyksiköiden suorituskyky on huomattavasti suoritinyksiköiden vastaavaa heikompi. Tämä näkyy siinä, että muistioperaatiot tarvitsevat 1-2 kertaluokkaa aritmetiikan suoritusta suuremman viiveen, jonka aikana muistiyksikkö ei kykene suorittamaan muita muistioperaatioita. Muistin rakenteen suunnittelu onkin keskittynyt pääasiassa parantamaan suorituskykyä tätä rajoitetta kiertäen. [HPGA03]. Muistien spesifikaatioiden analyysin selventämiseksi tässä esitetään esimerkkinä yleisen DDR-muistityypin (double data rate) laskelmia. DDR-muisti siirtää kaksi bittiä per kellojakso per väylän datalinja, josta sen nimi. DDR-ominaisuuden vuoksi esim. kaupallinen 2133 MHz:n DDR muisti on kellotaajuudeltaan 1066 MHz. Muistiväylän kapasiteetti on 64 bittiä, joten sen teoreettinen suurin kaistanleveys on esim MHz:llä = GB/s. Käytännössä nopeuteen vaikuttaa koko muistihierarkian toiminta viiveineen sekä käskykanta, jolla muistia käsitellään. Teoreettisen muistikaistan merkitys ohjelman suoritusnopeuteen on kiistanalainen. Esimerkiksi Anandtech on saanut ristiriitaisia tuloksia [SK08]. Muistin lomitus on keino pienentää muistiyksiköiden keskimääräistä viivettä. Tekniikan idea on monistaa muistiyksikkö rinnakkaisiksi aliyksiköiksi (pankeiksi) ja käsitellä tätä kokonaisuutta kuten yksittäistä muistiyksikköä. Muistioperaatio varaa yksittäisen pankin tämän käyttöviiveen ajaksi, mutta operaatiota voidaan tasapainottaa pankkien kesken hajauttamalla muistiavaruus niin, että samanaikaiset pyynnöt jaetaan jouten odottaville pankeille. [HPGA03]. Muistiavaruus voidaan lomittaa aliyksiköiden kesken esimerkiksi yksinkertaisella 12

21 jakojäännöskaavalla osoite mod n, missä n on rinnakkaisten pankkien lukumäärä. Hajautus on tyypillisesti määritetty staattisesti laitteiston rakenteessa. Mikäli hajautus johtaa samanaikaisiin operaatioihin jossakin pankissa, on kyse pankkikonfliktista. Konflikti voidaan ratkaista esimerkiksi suorittamalla konfliktin synnyttäneet operaatiot peräkkäisesti. [HPGA03]. Hajautus voidaan saada joissakin tilanteissa saada optimaalisen tehokkaaksi mitoittamalla algoritmi käytetylle laitteistolle. Työ voidaan automatisoida jossain määrin myös kääntäjälle. Käytännössä konfliktit ovat muissa tapauksissa aina mahdollisia. Konfliktista aiheutunut lisäviive tulee huomioida myös arkkitehtuurin rakenteessa, sillä se muuttaa vakiokokoisenkin muistin viipeen vaihtelevaksi, ja voi jopa huonontaa suorituskykyä käyttötapauksessa, jossa peräkkäiset konfliktit johtavat operaatiot samaan muistipankkiin. Lomituksen vaikutus muistin viipeeseen riippuu suoritettavasta algoritmista, mutta jos muisti on jaettu n identtiseen pankkiin, yksittäisen muistioperaation keskimääräiselle viiveelle voidaan laskea paras (t best ) ja huonoin (t worst ) arvo seuraavasti (t bank on yksittäisen pankin viive): t best = t bank n t worst = t bank Lomitus mahdollistaa myös muistiväylän leventämisen siten, että yksittäinen muistioperaatio käsittelee tietoa samanaikaisesti useasta eri pankista. Mikäli operaatiot käyttävät pankkeja hallitusti yhdessä, vältetään konfliktien riski. [HPGA03]. Tekniikka tosin edellyttää tukea ohjelmoijalta, esimerkiksi laajempien vektoritietotyyppien tai iterointisilmukoiden avaamisen muodossa, jolloin peräkkäiset viittaukset saadaan hallitusti hajautettua. Muistihierarkia Johdantoluvussa kuvattiin lyhyesti syyt ja periaate, miten arkkitehtuureissa tavanomaisesti käytetään monitasoista muistihierarkiaa; muistiteknologioissa muistin käytön viive on karkeasti kääntäen verrannollinen muistin hin- 13

22 taan ja fyysiseen kokoon [HPGA03]. Käytännön sovellukset asettavat myös rajoja vaaditun muistin määrälle, laitteen fyysiselle koolle ja hinnalle, joten suhteellisesti hitaammasta DRAM-muistista ei voida kokonaan luopua. Muistien koon kasvun myötä uusimmat välimuistihierarkiat ovat laajentuneet jo kolmitasoisiksi, kuten Alpha 21264:ssa [HPGA03] ja nykyisin Intelin Nehalemarkkitehtuurissa [Int11b]. Rinnakkaisuuden parantamiseksi (suorittimesta katsoen) ensimmäisen tason välimuisti on usein lisäksi jaettu käsky- ja dataosiin. [HPGA03]. Välimuistin toiminta on tavallisesti automaattista ja johonkin heuristiikkaan perustuvaa, mutta käsiteltävistä arkkitehtuureista Cell BE (luku 3.3) antaa poikkeuksellisesti kokonaan ja Fermi (luku 3.4) osittain välimuistin hallinnan ohjelmoijan tehtäväksi. Välimuistia voi käyttää näin eräänlaisena paikallisena käyttömuistina. Välimuistin suorituskyvyn mittaamiseen on useita menetelmiä, mutta [HPGA03] katsoo yksinkertaisesti keskimääräisen muistin hakuajan t avg olevan vertailukelpoisin. Hakuaika lasketaan kaavalla: t avg = t hit + f miss t miss Tässä t hit kuvaa arvon välimuistista hakemisen viivettä, f miss frekvenssiä, jolla arvon luku välimuistista epäonnistuu ja t miss viivettä, joka syntyy arvon hakemisesta alempaa muistihierarkiasta. f miss riippuu välimuistin koosta, toimintaperiaatteesta ja laskennallisesta ongelmasta, ja myös jossain määrin esimerkiksi käyttöjärjestelmän toimintaperiaatteesta sekä muusta samanaikaisesta laskennallisesta kuormasta. Kaava voidaan yleistää useampitasoiselle muistihierarkialle ketjuttamalla viiveen arvo t miss alemman muistihierarkian kustannukseen: t avg = t hitl1 + f missl1 t missl1 t missl1 = t hitl2 + f missl2 t missl

23 Muistihierarkia tuo myös uuden viiveen optimointimahdollisuuden; data voidaan esihakea nopeampaan muistiin, jolloin sen käyttö ei aiheuta käytön yhteydessä uutta hakua hitaammasta muistista, ja pienentää näin keskusmuistin aiheuttaman viiveen vaikutusta. Esihaku voidaan tehdä joko eksplisiittisesti osana suoritettavaa koodia tai automaattisesti osana muistiarkkitehtuuria. Automaattinen haku edellyttää jotain heuristiikkaa, esimerkiksi ajallista tai viittauksen sijainnin paikallisuutta; mikäli muistiviittaukset ovat vierekkäin, haku voi noutaa ne kaikki ja mikäli muistiviittauksen viime käyttökerrasta on vähän aikaa, se saattaa yhä sijaita myös välimuistissa. [HPGA03]. Vaikka edellä esitetty kaava ei asiaa suoraan kerro, on syytä huomata, että välimuisti toimii tyypillisesti lohkoissa, ei yksittäinen muistihaku kerrallaan. Lohkojen ideana on nimenomaan tasoittaa hakemisen kustannusta silloin, kun käsitellään vierekkäisiä muistiviittauksia lyhyen ajan sisällä. Edellä mainittu esihaku voidaan heuristisesti ajoittaa niin, että esimerkiksi seuraavan välimuistin lohko noudetaan jo kun edellisen käyttö on loppumassa. Muistihierarkia hajauttaa ja replikoi käsiteltävän datan tilaa eri välimuistitasoille. Muistin toiminnan tehostamiseksi hierarkia saattaa käyttää kevennettyä eheysmallia, jossa keskusmuisti ei ole jatkuvasti ajantasaisessa tilassa, vaan tieto välitetään erilaisin tekniikoin viivästetysti eteenpäin seuraaville muistin tasoille, esimerkiksi eri tavoin puskuroituna. Vaikka tällä tavoin löysennetty muistin eheys on vaihtelevaa viivettä lukuun ottamatta lähes läpinäkyvä laskentayksikölle, yhdenkin laskentayksikön arkkitehtuurissa ongelmia tuottaa kuitenkin syöttö- ja tulostuslaitteisto, joka saattaa vaatia muistilta eheää tilaa. [HPGA03]. Mikäli arkkitehtuurissa useampi kuin yksi laskentayksikkö käyttää samaa muistia muistihierarkioiden kautta, tarvitaan ns. koherenssiprotokolla, jonka perusteella tieto saadaan tarvittaessa noudettua toisen muistihierarkian välimuistista, mikäli keskusmuistin data ei ole ajan tasalla. Koherenssiprotokollista on kerrottu tarkemmin luvussa Muistiviiveen peittäminen säikeistyksellä Muistiviiveen peittäminen säikeillä perustuu olettamukseen siitä, että i) suorituksessa on samanaikaisesti useita 15

24 säikeitä (luku 2.2) ja ii) muistioperaation suorituksen aikana jokin aktiivisista säikeistä suorittaa muistioperaation joko toiseen, vapaaseen muistipankkiin, johonkin muuhun käytettävissä olevaan muistihierarkian yksikköön tai suorittaa paikallisesti laskentaa ilman muistiviittauksia. Mikäli suorittimella riittää laskettavaksi aktiivisia säikeitä koko muistiviiveen ajaksi, sen ei tarvitse pysähtyä odottamaan. Viivettä on pyritty peittämään sekä käskyettä säietasolla (luku 2.3). Koska käskyjen suorituksen ja muistin viiveiden ero on niin merkittävä, käskytason rinnakkaisuudella on vaikea kätkeä koko viivettä. Tähän on kuitenkin kehitetty tekniikoita, muun muassa ns. ylimääräisen rinnakkaisuuden (parallel slackness) [Val90, LP07] hyödyntäminen käskytason rinnakkaisuuden lisäämiseksi Verkko Moniydinarkkitehtuurin pelkistetyssä mallissa laskenta- ja muistiyksiköt ovat yhteydessä toisiinsa verkon välityksellä. Yhden suorittimen ja muistin tapauksessa kytkentämahdollisuuksia ei käytännössä ole kuin yksi, mutta yksiköiden määrän kasvaessa erilaiset topologiat eli verkon perusrakenteet tulevat mahdollisiksi. Verkon merkitys on ilmeinen, sillä se vaikuttaa suoraan muistin ja laskentayksikköjen kesken vaihdetun datan viiveisiin ja kaistanleveyteen. Verkkoa voi kuvata parametreilla, jotka ovat laskennan kannalta aina rajoituksia verrattuna siihen, että verkon päätepisteet kuuluisivat samaan yksikköön. Nämä parametrit ovat Hennessyn ym. [HPGA03] mukaan: 1. kaistanleveys, 2. viestin alun perille kulkeutumisen viive, 3. koko viestin verkon yli välittämisen viive, 4. lähettäjän käsittelystä johtuva viive ja 5. vastaanottajan käsittelystä johtuva viive. 16

25 Mainitut viiveet voivat olla topologiasta ja sen reitityksestä sekä viestien koosta ja tyypistä riippuen joko staattisia tai dynaamisia. Viiveisiin vaikuttaa luonnollisesti verkon kuormitusaste, mutta käsite sisältyy mainittuihin parametreihin. Erilaisia topologioita ovat esimerkiksi rengas, tähti, hila, perhonen, hyperkuutio ja täysin kytketty verkko. [HPGA03]. Erilaisten verkkotopologioiden kattava analyysi sivuutetaan tässä muutamia moniydinjärjestelmiin liittyviä huomioita lukuun ottamatta. Vaikka aiemmissa monitietokonejärjestelmissä on käytetty monenlaisia topologioita, moniydinjärjestelmät ovat vasta siirtymässä niihin. Laajalti käytetty moniydintopologia on SMP (symmetric multiprocessing), jossa eri laskenta- ja muistiyksiköt on kytketty samaan väylään. [HPGA03]. SMP skaalautuu kuitenkin huonosti laskentayksiköiden määrän lisääntyessä, sillä väylällä on kiinteä kaistan ja viiveen yläraja, mutta väylän toimintavaatimukset kasvavat lineaarisesti laskenta- ja muistiyksiköiden määrää lisäämällä. Lisäksi huomioitavana on samanaikaisten operaatioiden koherentti ja konfliktivapaa eteneminen väylällä, mikä aiheuttaa tehokkuuden kustannuksella lisätyötä. [HPGA03]. Esimerkiksi rengasväylä kuvassa 5 ratkaisee skaalautumisongelman siten, että sopivasti arkkitehtuurille suunniteltu algoritmi voi paloitella laskennan ja muistin käytön enemmän liukuhihnatyylisesti eri laskentayksiköiden välille, jolloin renkaan yksittäisiä linkkejä voidaan hyödyntää samanaikaisesti. Luku 3 antaa viitteitä siitä, että kuluttajamarkkinoilla yleiset arkkitehtuurit (x86) ovat siirtymässä pois SMP:stä. Luku myös esittelee muutaman toisenlaisen arkkitehtuuriratkaisun. On kuitenkin arveltu, että laskentayksiköiden määrän kasvaessa huomattavasti nykyisestä tarve kaistanleveydelle kasvaa yhä. Ratkaisuksi on ehdotettu harvoja verkkoja, joissa verkon solmut koostuvat lähettäjien ja vastaanottajien lisäksi reitityskoneistosta. Harvat verkot pystyvät tarjoamaan suuren kaistanleveyden nostamatta viivettä käyttökelvottoman korkeaksi, mikä on tärkeää, koska kaistanleveyttä on mahdollista kasvattaa vain arkkitehtonisin ratkaisuin, kun taas viiveitä on mahdollista kätkeä ohjelmallisesti. [LP07]. Jaetun muistin arkkitehtuureissa muistihierarkiat luovat verkolle lisävaatimuksia. SMP on skaalautumisongelmista huolimatta ollut yleinen tekniikka, sillä sitä käyt- 17

26 täen on mahdollista toteuttaa pienille suoritinmäärille tehokas koherenssiprotokolla, joka tunnetaan nimellä nuuskintaprotokolla (snooping protocol). Tämä mahdollistaa tiedon verrattain nopean poiminnan kunkin muistihierarkian sisältä. Tekniikan idea on, että jokainen väylään kytketty muistihierarkia pitää kirjaa siitä, omistaako se uusimman versio kustakin datasta, poimii väylältä muistipyynnöt analysoitavakseen ja joko mitätöi datan, mikäli joku muu väylällä kertoo päivittävänsä sitä, tai syöttää pyynnön vastauksen väylään, mikäli paikallinen data on kirjanpidon mukaan ajan tasalla. [HPGA03]. 2.2 Termejä Moniydinteknologian nopean kehityksen ja kaupallisten syiden takia laitteita käsittelevän kirjallisuudenkin mukaan käsitteet ovat hieman yliampuvia, esimerkiksi NVIDIA:n CUDA-ydin on käsitteenä varsin erilainen kuin Intelin x86-ydin. Tässä on katsottu, että selvyyden vuoksi on hyvä käyttää eri arkkitehtuurien osiin viitatessa joukkoa standardinimiä, jotta rakenteiden käsitteellinen hahmottaminen ja vertailu olisi helpompaa. Määritelmät sopivat kuvaamaan myös ohjelmointimallien osia, mutta esim. säikeet ovat olennainen osa jo arkkitehtuuritason kuvausta, joten ne on esitelty tässä. Suoritin (processor) Suoritin voidaan ymmärtää toisiinsa liittyvien laskentayksikköjen, rekisterien, välimuistien ja muiden resurssien kokonaisuudeksi. Käsitteen alkuperä on perinteisissä arkkitehtuureissa, joissa on tavallisesti yksi monoliittinen keskussuoritin (CPU, central processing unit), joka on samalla yksittäinen fyysinen komponentti. Nykyisin suorittimen sijaan on alettu käyttää termiä suoritinydin (core) kuvaamaan tätä kokonaisuutta, ja termiä suoritin viittaamaan mahdollisesti usean suoritinytimen kesken jaettuun fyysiseen integroituun piiriin. Tutkielmassa käsitteiden ongelmallisuus on ratkaistu käyttämällä tätä kuvattua jakoa. Moniydinsuoritin (multicore) ja monisuoritin (multi-processor) Tässä moniydinsuorittimella viitataan edellä kuvatun arkkitehtuurin suorittimeen, joka 18

27 voi koostua useasta itsenäisestä suoritinytimestä. Monisuoritin viittaa (usein hajautettuun) järjestelmään, joka koostuu monesta suorittimesta. Säie (thread) Säie on kirjallisuudessa ja teollisuudessa de facto -asemaan vakiintunut abstrakti tapa mallintaa laskentaresursseja, joita käyttäen suoritinydin tai tarkemmin sen laskentayksikkö saadaan laskemaan säikeen edustamaa ohjelmaa. Ytimessä on ikään kuin säikeen suorituspaikkoja, joissa säikeitä voidaan suorittaa askel kerrallaan. Säie käsittää tilan ja ympäristön (ohjelmalaskuri, rekisterit, pino, muisti) muodostaman kokonaisuuden, joilla laskenta suoritetaan. Säie on eri laskentamallien kannalta perusyksikkö, jota käyttäen työ voidaan jakaa ja rinnakkaistaa eri laskentayksiköiden kesken. Monisäikeisyys (multi-threading) Usean säikeen samanaikaista suorittamista arkkitehtuuritasolla. Samanaikaisuus voi myös olla näennäistä esimerkiksi siten, että laskentayksikkö vuorottelee suoritusta eri säikeiden välillä, mikäli laskentayksiköitä on esimerkiksi vain yksi. Kuitu (fiber) Joskus käyttöjärjestelmän tarjoamat säikeet ja prosessit (luku 4.1.1) koetaan raskaiksi ja joustamattomiksi, ja ne halutaan erottaa vielä hienojakoisemmasta käsitteestä, kuidusta. Kuidulla tarkoitetaan säikeiden päälle rakennettua järjestelmää, jossa jokaisen varsinaisen säikeen hallittavana on joukko kevyitä kuituja. Kuitujen aikataulutus tapahtuu suorituksen aikaisen järjestelmän toimesta ja se perustuu vapaaehtoisen kontrollin luovuttamiseen, mikä implisiittisesti johtaa synkronisointiin saman säikeen ohjaamien kuitujen välillä. Ympäristön vaihto (context switch) voidaan tehdä näin myös huomattavasti nopeammin, sillä vaihto ei edellytä käyttöjärjestelmän siirtymistä eri tilojen välillä, mikä on SMT-tekniikkaa (luku 2.3.3) käyttävässä arkkitehtuurissa aikaa vievää. [SSS92]. 19

28 2.3 Rinnakkaisuuden mallintaminen Abstraktiotasot Suorituksen rinnakkaistamistekniikat voidaan jakaa viiteen erityyppiseen abstraktiotasoon, jotka ovat bitti-, käsky-, tieto-, säie- ja tehtävätasot. Näistä kaksi ensimmäistä ovat yksittäisen ytimen ja säikeen kautta vaikuttavia nopeutustekniikoita, kun taas tieto-, säie- ja tehtävätason rinnakkaisuus voidaan toteuttaa myös hyödyntämällä useaa säiettä ja suoritinydintä. Abstraktiotasoista on syytä mainita, että kuvatut tekniikat eivät ole toisiaan poissulkevia vaan ennemmin täydentäviä. Bittitaso Bittitason rinnakkaisuus on hyvin matalan tason tekniikka, jonka pääidea on rinnakkaistaa tietotyyppien arvoalueen rajallisuudesta seuraavan tiedon järjestelyn peräkkäisyys lisäämällä yksittäisen käskyn käsittelemien bittien lukumäärää. Esimerkiksi jos n-bittiset luvut lasketaan yhteen korkeintaan n bitin lohkoissa, 2 osasummien muodostus ja yhdistäminen vaativat esimerkiksi taulukon 1 tapauksessa 14-kertaisen määrän laskutoimituksia. Tekniikka on menettänyt merkitystään nykyisin, kun yleisimmin käytetyt 32- ja 64-bittiset tietotyypit ovat osoittautuneet riittäviksi useimpiin tarkoituksiin. Tietotyyppien koon kasvattamista hankaloittaa myös se, että saman fyysisen tilan piirillä voi käyttää rekisterien määrän lisäämiseen. Käskytaso Käskytason rinnakkaisuudella (ILP) tarkoitetaan tekniikoita, joilla rinnakkaisuutta lisätään yksittäisten konekielisten käskyjen tasolla niin, että samalla aikavälillä voidaan suorittaa entistä enemmän käskyjä. Tekniikoita tunnetaan niin paljon, että tässä voidaan keskittyä vain muutamaan merkittävimpään, joita ovat mm. suorituksen liukuhihnoitus, superskalaaritekniikka ja VLIW (very long instruction word), aikataulutus, haarautumisen ennustus sekä suoritus epäjärjestyksessä (out-of-order execution). [HPGA03]. Liukuhihnoituksen idea on jakaa käskyt osiin, joiden suoritusaika on yksittäistä käskyä lyhempi. Liukuhihna kykenee suorittamaan laskennallisesti yhden koko- 20

29 Taulukko 1: Bittitason rinnakkaisuus kertolaskussa c = a b. n-bittinen CPU a low = a:n alimmat n bittiä 2 a high = a:n ylimmät n bittiä 2 b low = b:n alimmat n bittiä 2 b high = b:n ylimmät n bittiä 2 t low = a low b low t middle = a low b high + a high b low t high = a high b high t low = t:n alimmat n bittiä 2 t high = t:n ylimmät n bittiä 2 c low = t low + t low 2 n 2 c high = t high + t high 2n-bittinen CPU c = a b naisen käskyn jokaista kellojaksoa kohti, joskin hieman viivästetysti. Liukuhihnoituksen seurauksena käskyn suoritusaika määräytyy monoliittisen suoritusvaiheen sijaan yksinkertaistetusti liukuhihnan hitaimman vaiheen mukaisesti. Käytännössä lähes kaikki modernit arkkitehtuurit käyttävät liukuhihnoitusta. [HPGA03]. Superskalaaritekniikka on perusmuotoisen liukuhihnan laajennus siten, että liukuhihna kykenee suorittamaan fyysisesti rinnakkaisten ja jaettujen laskentayksiköiden avulla useampia käskyjä yhdellä kellojaksolla. Tekniikan voi nähdä myös niin, että liukuhihnalla on käytännössä aina rinnakkaisia yksiköitä (esimerkiksi muistioperaatiot ja aritmetiikka), joita ei voida käyttää samaan aikaan yhdestä säikeestä. Superskalaari rakenne poistaa tätä tyhjäkäyntiä mahdollistamalla rinnakkaisen käytön. Laitteisto määrittää tällöin, mitkä suoritettavista käskyistä rinnakkaistetaan. [HPGA03]. Superskalaarin ohella toinen tapa rinnakkaistaa liukuhihnaa on suorittaa rinnakkain leveitä useasta rinnakkaisesta käskystä koostuvia käskyjä (Very Long Instruction Word, VLIW). Tällä tavoin rinnakkaisuus on määritetty staattisesti suoritettavassa koodissa. Käytännössä mainitun kaltaisilla tekniikoilla saadaan aikaan yleensä korkeintaan 8 käskyn samanaikainen suoritus samassa laskentayksikössä, vaikka teoreettinen maksimi olisikin suurempi. [HPGA03]. Liukuhihna saadaan mahdollisesti vielä suorituskykyisemmäksi poimimalla käsky- 21

30 virrasta käskyjen väliset riippuvuudet ja aikatauluttamalla dynaamisesti käskyjen suoritusjärjestys. Tällöin käskyjä on mahdollista jopa suorittaa epäjärjestyksessä suorittimen suoritusmallin muuttumatta. Tekniikkaan liittyy myös haarautumisen ennustus, joka viittaa kontrollivuon hyppykäskyjen vaikuttamiin tehokkuusongelmiin esimerkiksi muistihierarkian kanssa. Hyppyjen toiminnan arvaava suoritin pystyy esilataamaan dataa, joten hyppy ei aiheuta yhtä suuria kustannuksia muistiviiveiden takia. Epäjärjestyksessä suorituksen haittapuoli on sen verrattain iso tilantarve suorittimen mikrosirulla, mistä syystä jotkin moniydinarkkitehtuurit eivät sitä hyödynnäkään. [HPGA03]. Säietaso Säietason rinnakkaisuus käsittelee käskytasoa suurempia kokonaisuuksia, nimittäin kokonaisia suoritettavia säikeitä. Perusideana on määrittää ensin laitteistosta laskentayksiköt, eli jokainen ohjelmalaskuri, rekisterit ja muut tarvittavat tiedot sisältävä kokonaisuus. Laskentayksiköillä on kyky suorittaa yksittäistä säiettä. Algoritmi on ylemmillä abstraktiotasoilla jaettu jollakin tapaa suoritettaviksi säikeiksi. Nyt säietason rinnakkaisuuden tehtävä on aikatauluttaa säikeet siten, että ne hyödyntävät kaikkia rinnakkaisia laskentayksiköitä mahdollisimman tehokkaasti. [MSM04]. Säikeiden jakamiseen laskentayksiköille on eri arkkitehtuureissa erilaisia toteutuksia ja osa jättää kuorman tasauksen käyttöjärjestelmän, kielen tai käyttäjän vastuulle. Säikeiden aikatauluttamisesta laskentayksikön sisällä otetaan tässä kaksi esimerkkiä, kiinteä aikaviipaleiden jako sekä irrottava aikataulutus (pre-emptive scheduling), jossa aikaviipale on tyypillisesti pidempi, mutta suoritus voi keskeytyä ympäristön vaihtoon jo aiemmin esim. syöttö- ja tulostuslaitteiden sekä muistihierarkian laitteistopohjaisten keskeytysten takia. [HPGA03]. Kiinteiden aikaviipaleiden jako lomittaa säikeiden suoritusta säännöllisesti. Tällöin laskentayksikön kapasiteetti tavallaan jaetaan aika-akselilla säikeiden kesken. Pakotetun aikalomituksen heikkoutena peräkkäissuoritukseen nähden on se, että suorituksessa voi ilmetä tarpeetonta joutokäyntiä, jos seuraavaksi suoritettava säie ei ole valmis tai säikeitä on ajettavana liian pieni määrä. Irrottava aikataulutus puolestaan ei tuhlaa aikaa jouten oloon, mikäli säikeitä 22

31 on suoritusvalmiina, mutta se ei ole yhtä deterministinen suorituksen etenemisen muodossa. Se kuitenkin mahdollistaa esimerkiksi viiveiden peittämisen laskennalla vaihtamalla suoritettavaa säiettä muistiviiveen aikana. Säikeiden hallintaa on tarkemmin tarkasteltu myöhemmin luvussa Tietorinnakkaisuus Tietorinnakkaisuus on rinnakkaisuuden abstraktio, jonka perusidea on tasata yksittäisen datan laskenta rinnakkaisten laskentayksiköiden kesken. Mekanismin toteutus voidaan tehdä usealla tavalla sen mukaan, miten laskentayksiköt ja niiden välinen kommunikointi on toteutettu. Mikäli tarkastelusta suljetaan pois usean tietokoneen laskentaryppäät, ja keskitytään monisuoritin- ja moniydinratkaisuihin, mahdollisia toteutustapoja ovat tiedon jakaminen suorittimien, ytimien ja/tai ytimien sisäisten erikoisleveiden vektorirekisterien kesken. Monien kaupallisten suorittimien tukemat multimediakäskyt voidaan ottaa esimerkiksi tietorinnakkaisista vektorikäskyistä. Käskyjen käyttämien rekisterien rakenne on joko kiinteä tai käskyn konfiguroitavissa. Käskyjen toimintaperiaate on määrittää ensin vektorin sisäinen rakenne bittitasolla, esimerkiksi jakaa se kahdeksi tasalevyiseksi arvoksi, tämän jälkeen ladata ja pakata arvot latauskäskyllä, suorittaa vektorioperaatio, ja lopuksi purkaa arvot tavallisiin rekistereihin tai keskusmuistiin. Vektorikäskyjen toteutus on melko suoraviivainen, mutta samalla joustamaton, sillä kääntäjän tai ohjelmoijan on erikseen sovitettava data käyttämään niitä. Vektorikäskyt ovat harvoin läheskään identtisiä eri arkkitehtuureissa, vaikka perusperiaate on sama. [HPGA03]. Toinen perinteinen tapa on kuvata tietorinnakkaisuus tehtävärinnakkaisuudeksi ja jakaa syntyvät tehtävät eri laskentayksiköille, olivat ne sitten suorittimia, ytimiä tai jopa hitaan lähiverkon takana. Tehtävien lukumäärä tulisi mitoittaa eri laskentayksiköiden mukaan niin, että tehtävien ylläpidon aiheuttaman kirjanpidon kustannukset ja toisaalta usean limittäisen tehtävän viiveitä peittävä vaikutus ovat tasapainossa. Hitaampi kommunikaatiokanava edellyttää isompia tehtäviä kirjanpidon kustannuksen pienentämiseksi. [MSM04]. Tietorinnakkaisuus voidaan toteuttaa myös muilla säikeisiin perustuvilla tekniikoilla. GPU-arkkitehtuurien yhteydessä luvussa on esitetty SIMT-tyyppinen 23

32 (single instruction, multiple thread) ratkaisu, joka mahdollistaa saman käskyn suorittamisen useassa eri säikeessä samanaikaisesti. Tekniikka on vektorikäskyjä joustavampi, sillä säikeiden suoritus voi haarautua, eikä tästä aiheudu kooditasolla ongelmia, koska laitteisto käsittelee koko haarautumisen. Toinen mahdollinen toteutusesimerkki on XMT-arkkitehtuurin (luku 3.6) omaksuma SPMD (luku 2.3.2), jossa myös eri säikeet käsittelevät dataa rinnakkain tähän määritetyissä lohkoissa. Tehtävärinnakkaisuus Tehtävärinnakkaisuudessa perusyksikkö on tehtävä, joka on tyypillisesti useita käskyjä sisältävä, mahdollisesti muihin tehtäviin nähden täysin itsenäinen algoritmin osa. Tehtävät voivat kommunikoida keskenään erinäisin kommunikaatiokanavin, jotka riippuvat toteutustekniikasta. [MSM04]. Käytännössä tehtävä on kuvattu yleensä prosessilla, säikeellä tai kuidulla, sillä nämä ovat sopivan kokoisia abstraktioita tarjoamaan tehtävän vaatiman käskyvirran ja sen suorituksen. Tehtävärinnakkaisuus on perinteisissä suurteholaskennan sovelluksissa sekä työasema- ja palvelintietokoneissa tyypillinen toteutustekniikka. Ratkaisun perustelu seuraa siitä, että alemman tason abstraktiot eivät esimerkiksi skaalaudu suoraan monen tietokoneen välille laskentaryppäissä, mikäli näillä ei ole jaettuja muisteja ja laskentayksiköitä. Myös mikäli suorittimen sisällä eri ydinten välinen kommunikointi ja synkronointi on hidasta, ainoastaan tarpeeksi suuret tehtävät tekevät rinnakkaisuuden hyödyntämisen kannattavaksi ja tehtävärinnakkaisuuden ainoaksi järkeväksi muodoksi. [MSM04]. Kolmas merkittävä syy on tehtävärinnakkaisuuden suosiolle on sen tuoma ilmainen rinnakkaisuus samanaikaisten eri sovellusten muodossa; moniajava käyttöjärjestelmä mallintaa minkä tahansa suoritettavan sovelluksen tehtävänä, joten useita säikeitä ja laskentayksiköitä tukeva käyttöjärjestelmä kykenee rinnakkaistamaan automaattisesti myös peräkkäismuotoisia ohjelmia sillä oletuksella, että käynnissä on riittävästi sovelluksia eri laskentayksiköille. Tämän rajoitteena on kuitenkin se, että ydinmäärät jatkavat yhä eksponentiaalisesti kasvuaan, mutta työasemaympäristössä käyttäjän on vaikeaa tai työlästä luoda rinnakkaisuutta yleisesti suorittamalla yhä enemmän ja enemmän samanaikaisia sovelluksia. Rinnakkaisuuden 24

33 luominen tähän tapaan erillisillä tehtävillä on myös kestämätön siksi, että monissa sovelluksissa erilaisten korkean tason tehtävien määrä ei ole merkittävä, toisin kuin sovellusten käsittelemän tietorinnakkaisen datan määrä Flynnin taksonomia Flynnin taksonomia on vuonna 1966 esitetty klassinen tapa kategorisoida tietokoneet neljään eri ryhmään niiden rinnakkaisuuden toteutuksen perusteella. Jako on verrattain karkea, mutta se on yhä käyttökelpoinen nykyisiä toteutustapoja arvioitaessa ja antaa tavan mallintaa rinnakkaisuuden toteutusta. Taksonomian kategoriat (taulukko 2) ovat SISD (single instruction stream, single data stream), SIMD (single instruction stream, multiple data streams), MISD (multiple instruction streams, single data stream) ja MIMD (multiple instruction streams, multiple data streams). [HPGA03] Taulukko 2: Flynnin taksonomia. Yksi käskyvirta Useita käskyvirtoja Yksi datavirta SISD MISD Monta datavirtaa SIMD MIMD SISD käsittää yksiytimiset suorittimet, joissa peräkkäiset käskyt käsittelevät aina yhtä datayksikköä. SIMD laajentaa edellistä siten, että useampi laskentayksikkö suorittaa saman käskyn eri datalle. Tällöin käskymuisti on yhteinen, mutta yksiköiden datamuisti eroaa. Vektorisuorittimet ja modernien suorittimien multimedialaajennukset voidaan nähdä SIMD-toteutuksiksi. MISD on eräänlainen tietovirtasuoritintyyppi [GEC + 07], jossa useampi laskentayksikkö käsittelee samaa dataa. Toinen MISD:n käyttökohde on vikasietoisten suoritinten arkkitehtuureissa, joissa sama laskutoimitus halutaan tuloksen varmistamiseksi ajaa monesti. MIMD on taksonomian monipuolisin suoritintyyppi, jossa jokaisella laskentayksiköllä on itsenäinen käsky- ja datamuisti. [HPGA03] MIMD on usein jaettu edelleen kahteen osaan, SPMD:hen (single program, multiple data) ja MPMD:hen (multiple program, multiple data). SPMD kuvaa tilannetta, jossa eri laskentayksiköt suorittavat samaa ohjelmaa samanaikaisesti eri 25

34 tahdissa, aina synkronointiin asti. Esimerkiksi luvun 3.6 XMT noudattaa tätä tekniikkaa. MPMD laajentaa edellistä sallimalla eri laskentayksiköille eri ohjelmatilat, mikä mahdollistaa suorituksen haarautumisen itsenäisemmin samanaikaisuudesta tinkimättä. NVIDIA:n GPU-alusta (luku 3.4) käyttää SPMD-tyylin toteutuksessa useita säikeitä yhdistävää SIMT-tekniikkaa. Flynnin taksonomiaa tarkasteltaessa on syytä huomata, että monet nykyisin tunnetut suorittimet ovat eri kategorioiden yhdistelmiä. Esimerkiksi moniin suorittimiin on lisätty SIMD-käskyjä, sillä se on nähty edullisena ja helppona tapana moninkertaistaa näiden käskyjen laskentakapasiteetti; SIMD-käskyjen lisääminen on esimerkiksi Intelin arkkitehtuurissa lisännyt tehonkulutusta ja mikropiirin pintaalaa alle 10%, mutta lisännyt laskentatehoa % [Pol99]. SIMD-tekniikka sai huomiota 80-luvulla ja 90-luvun alkupuolella, mutta monet uudemmat arkkitehtuurit ovat toiminnaltaan lähempänä MIMD-tekniikkaa. MISD käyttö kaupallisissa suorittimissa on puolestaan ollut aina vähäistä. [HPGA03] Säikeiden hallinta laitteistossa Kuten luvussa on mainittu, säikeitä voi pitää tietyllä tavalla universaalina laskentaresurssien rajapintana. Säikeiden pääasiallisimmat käyttökohteet ovat tällöin rinnakkaisten laskentayksiköiden käyttöönotto, laskentaan ja muistin käyttöön liittyvien viiveiden piilottaminen sekä suoritusajan jakaminen eri toimintojen kesken. Yksi syy monisäikeisyyden tarjontaan on myös se, että valmistuskustannusten ja piirin pinta-alan pienentämisen kannalta on verrattain edullista esittää liukuhihnoitettu toteutus monisäikeisenä kokonaisten itsenäisten laskentayksiköiden sijaan. Esimerkiksi tiettyjen vähän käytettyjen erikoislaskentayksikköjen jakaminen saattaisi mahdollistaa useamman ytimen sijoittamisen samalle suorittimelle. Samanaikaisuus saavutetaan säieabstraktion keinoin silloin, kun arkkitehtuuri tarjoaa monisäikeisen suoritusmallin, rinnakkaisuus silloin, kun säikeitä suorittavia yksiköitä on fyysisesti useita. Erilaisia monisäietoteutuksia voidaan nähdä ainakin kolmea eri tyyppiä: lohkomuotoista, lomitettua ja samanaikaista monisäikeisyyttä hyväksikäyttäviä. Näitä kuvaavat tässä järjestyksessä kuvan 6 liukuhihnatyypit 26

35 Issue slots Superscalar Coarse MT Fine MT SMT T i m e Kuva 6: Eri tapoja täyttää 4:n rinnakkaisen yksikön superskalaari liukuhihna. Eriväriset harmaat laatikot kuvaavat eri säikeitä. [HPGA03]. Coarse MT (karkean tason monisäikeisyys), Fine MT (hienojakoinen monisäikeisyys) ja SMT (simultaneous multi-threading) eli samanaikainen monisäikeisyys. Lohkomuotoinen monisäikeisyys Lohkomuotoisessa säietoteutuksessa säikeitä suoritetaan peräkkäisissä lohkoissa samaa laskentayksikköä käyttäen aina siihen asti, että suoritus jää odotustilaan esimerkiksi muistiviiveen tai laitteistopyynnön vuoksi. Esimerkiksi toisen tason (L2) välimuistista haun epäonnistumisen voidaan katsoa keskeyttävän suorituksen. [HPGA03]. Lohkomuotoisen suorituksen etuna on se, että suurin joutokäynti vältetään, kun liukuhihna vaihtaa suoritettavaa säiettä ison viiveen edessä. Toisaalta, koska liukuhihna suorittaa vain yhtä säiettä, kaikkea käskytason rinnakkaisuutta ei pystytä aina hyödyntämään ja uuden säikeen käynnistys voi tuoda jonkin verran lisää joutokäyntiä. Lisäksi suorittimen suoritusaika ei jakaannu tasaisesti eri säikeiden välille eikä säikeiden suorituskaan etene tasaisesti. [HPGA03]. Limittäinen monisäikeisyys Limittäisessä monisäikeistyksessä laskentayksikön laskentakapasiteetti jaetaan esimerkiksi tasavälein säielokeroiden kesken, kuten luvussa esitetään. Mikäli säie on viiveen takia odotustilassa, sen suoritusvuoro voidaan myös tarvittaessa ohittaa. Tällainen limittäinen monisäikeisyys eliminoi kokonaan joutokäynnin liukuhihnalla, vaikkei se pysty täyttämään superskalaaria liukuhihnaa vielä kokonaan joka ajan hetkellä. Toteutus on hieman 27

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

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

Lisätiedot

Tietokoneen muisti nyt ja tulevaisuudessa. Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu

Tietokoneen muisti nyt ja tulevaisuudessa. Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu Tietokoneen muisti nyt ja tulevaisuudessa Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu Yleisesti Muisti on yksi keskeisimmistä tietokoneen komponenteista Random Access Memory on yleistynyt

Lisätiedot

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

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

Lisätiedot

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

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

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

Lisätiedot

11/20: Konepelti auki

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

Lisätiedot

Ongelma(t): Mihin perustuu tietokoneiden suorituskyky ja sen jatkuva kasvu? Mitkä tekijät rajoittavat suorituskyvyn parantamista ja mitkä niistä ovat

Ongelma(t): Mihin perustuu tietokoneiden suorituskyky ja sen jatkuva kasvu? Mitkä tekijät rajoittavat suorituskyvyn parantamista ja mitkä niistä ovat Ongelma(t): Mihin perustuu tietokoneiden suorituskyky ja sen jatkuva kasvu? Mitkä tekijät rajoittavat suorituskyvyn parantamista ja mitkä niistä ovat ehdottomia? 2013-2014 Lasse Lensu 2 Nykyiset tietokoneet

Lisätiedot

Ongelma(t): Mihin perustuu tietokoneiden suorituskyky ja sen jatkuva kasvu? Mitkä tekijät rajoittavat suorituskyvyn parantamista ja mitkä niistä ovat

Ongelma(t): Mihin perustuu tietokoneiden suorituskyky ja sen jatkuva kasvu? Mitkä tekijät rajoittavat suorituskyvyn parantamista ja mitkä niistä ovat Ongelma(t): Mihin perustuu tietokoneiden suorituskyky ja sen jatkuva kasvu? Mitkä tekijät rajoittavat suorituskyvyn parantamista ja mitkä niistä ovat ehdottomia? 2012-2013 Lasse Lensu 2 Nykyiset tietokoneet

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

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos TIES325 Tietokonejärjestelmä Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos Kevät 2008 Luku 1 Tietokone abstraktina yksikkönä Tietokoneen asbtratiotasoa sen muotoisena kuin me sen tällä hetkellä

Lisätiedot

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

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

Lisätiedot

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

Intel Threading Building Blocks

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

Lisätiedot

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

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. On arvioitu, että maailmassa on tällä hetkellä enemmän sulautettuja

Lisätiedot

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

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

Lisätiedot

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

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 Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan

Lisätiedot

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

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

Lisätiedot

OHJ-4301 Sulautettu Ohjelmointi

OHJ-4301 Sulautettu Ohjelmointi OHJ-4301 Sulautettu Ohjelmointi (http://www.cs.tut.fi/~sulo/) 5op, to 12-14, TB 109 Arto Salminen, arto.salminen@tut.fi Läpäisyvaatimukset Hyväksytysti suoritetut: Tentti Harjoitustyöt Harjoitustyöt 3

Lisätiedot

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

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

Lisätiedot

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2009 p.1/15 HSMT (Java-kielellä) Aineopintotasoinen kurssi, 5op. Luennot:

Lisätiedot

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus Luento 1 (verkkoluento 1) Tietokonejärjestelmä Järjestelmän e eri tasot Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus 1 Tietokone- järjestelmäj ä Käyttäjä Tietokonelaitteisto Oheislaitteet

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

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

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Luento 1 (verkkoluento 1) Tietokonejärjestelmä Luento 1 (verkkoluento 1) Tietokonejärjestelmä Järjestelmän eri tasot Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä This image cannot currently be displayed.

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

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS CT10A4000 - Kandidaatintyö ja seminaari Alkuraportti Avoimen lähdekoodin käyttö WWW-sovelluspalvelujen toteutuksessa Lappeenranta, 30.3.2008,

Lisätiedot

Tietokoneen rakenne: Harjoitustyö. Motorola MC68030 -prosessori

Tietokoneen rakenne: Harjoitustyö. Motorola MC68030 -prosessori kevät 2004 TP02S-D Tietokoneen rakenne: Harjoitustyö Motorola MC68030 -prosessori Työn valvojat: Seppo Haltsonen Pasi Lankinen RAPORTTI 13.5.2004 Sisällysluettelo sivu Tiivistelmä... 1 Lohkokaavio... 2

Lisätiedot

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

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

Lisätiedot

14. Luento: Kohti hajautettuja sulautettuja järjestelmiä. Tommi Mikkonen,

14. Luento: Kohti hajautettuja sulautettuja järjestelmiä. Tommi Mikkonen, 14. Luento: Kohti hajautettuja sulautettuja järjestelmiä Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Johdanto Hajautettujen järjestelmien väyliä LON CAN Pienen laitteen sisäinen hajautus OpenCL Network

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

Toimitusketjun hallinnan uudet kehityssuunnat. Mikko Kärkkäinen Tammiseminaari 2015

Toimitusketjun hallinnan uudet kehityssuunnat. Mikko Kärkkäinen Tammiseminaari 2015 1 Toimitusketjun hallinnan uudet kehityssuunnat Mikko Kärkkäinen Tammiseminaari 2015 2 Toimitusketjun suunnittelun uudet tuulet Muistinvarainen laskenta mullistaa toimitusketjun suunnittelun Välitön näkyvyys

Lisätiedot

Intel Pentium Pro -prosessori. tietokonearkkitehtuurit, syksy -96 Ari Rantanen

Intel Pentium Pro -prosessori. tietokonearkkitehtuurit, syksy -96 Ari Rantanen Intel Pentium Pro -prosessori tietokonearkkitehtuurit, syksy -96 Ari Rantanen Tarkasteltavat aiheet Katsaus Pentium Pro:n ominaisuuksiin Käskyn suoritus Pentium Pro:n liukuhihnalla Pentium Pro:n suorituskyky

Lisätiedot

Tietokonejärjestelmä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja. TITO-kurssista. John von Neumann ja EDVAC, 1949.

Tietokonejärjestelmä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja. TITO-kurssista. John von Neumann ja EDVAC, 1949. Tietokoneen rakenne Luento 1 Tietokonejärjestelmä Ch 1 - Ch 8 [Sta06] Valikoituja paloja John von Neumann ja EDVAC, 1949 TITO-kurssista Luento 1-1 Sisältöä Tietokonejärjestelmä KJ:n näkökulma laitteistoon

Lisätiedot

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

Lisätiedot

Sisältöä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja TITO-kurssista. Tietokonejärjestelmä

Sisältöä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja TITO-kurssista. Tietokonejärjestelmä Tietokoneen rakenne Luento 1 Tietokonejärjestelmä Ch 1 - Ch 8 [Sta06] Valikoituja paloja TITO-kurssista John von Neumann ja EDVAC, 1949 Luento 1-1 Sisältöä Tietokonejärjestelmä KJ:n näkökulma laitteistoon

Lisätiedot

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, 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?

Lisätiedot

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, mallintaminen ja UML 582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

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

Lisätiedot

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

Luento 1 Tietokonejärjestelmän rakenne

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

Lisätiedot

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

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

Lisätiedot

Tietokone. Tietokone ja ylläpito. Tietokone. Tietokone. Tietokone. Tietokone

Tietokone. Tietokone ja ylläpito. Tietokone. Tietokone. Tietokone. Tietokone ja ylläpito computer = laskija koostuu osista tulostuslaite näyttö, tulostin syöttölaite hiiri, näppäimistö tallennuslaite levy (keskusyksikössä) Keskusyksikkö suoritin prosessori emolevy muisti levy Suoritin

Lisätiedot

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

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

Lisätiedot

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

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ää

Lisätiedot

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

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

Lisätiedot

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

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

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op FT Ari Viinikainen Tietokoneen rakenne Keskusyksikkö, CPU Keskusmuisti Aritmeettislooginen yksikkö I/O-laitteet Kontrolliyksikkö Tyypillinen Von Neumann

Lisätiedot

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

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

Lisätiedot

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

1. Keskusyksikön rakenne

1. Keskusyksikön rakenne 1. Keskusyksikön rakenne Kuvassa on esitelty TTK-91 esimerkkikoneen keskusyksikkö. Oikeiden tietokoneiden keskusyksiköt ovat luonnollisesti monimutkaisempia, mutta tämä riittää oikein mainiosti asian havainnollistamiseen.

Lisätiedot

ohjelman arkkitehtuurista.

ohjelman arkkitehtuurista. 1 Legacy-järjestelmällä tarkoitetaan (mahdollisesti) vanhaa, olemassa olevaa ja käyttökelpoista ohjelmistoa, joka on toteutettu käyttäen vanhoja menetelmiä ja/tai ohjelmointikieliä, joiden tuntemus yrityksessä

Lisätiedot

SISÄLLYS sisällys 1 Tietokoneen toimintaperiaate ja käyttö 2 Tietokoneen historia 3 Tietokoneen rakenteen ja toiminnan perusteet

SISÄLLYS sisällys 1 Tietokoneen toimintaperiaate ja käyttö 2 Tietokoneen historia 3 Tietokoneen rakenteen ja toiminnan perusteet SISÄLLYS 1 2 3 4 Tietokoneen toimintaperiaate ja käyttö 14 1.1 Mikä tietokone on? 14 1.2 Tieteen ja toimiston koneista yleistietokoneeseen 15 1.3 Mekaanisista ja sähköisistä laitteista sulautettuihin tietokoneisiin

Lisätiedot

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi 1. Luento: Sulautetut Järjestelmät Arto Salminen, arto.salminen@tut.fi Agenda Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu

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

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

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää Levyn rakenne Levykössä (disk drive) on useita samankeskisiä levyjä (disk) Levyissä on magneettinen pinta (disk surface) kummallakin puolella levyä Levyllä on osoitettavissa olevia uria (track), muutamasta

Lisätiedot

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

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,

Lisätiedot

Samanaikaisuuden hallinta

Samanaikaisuuden hallinta Samanaikaisuuden hallinta TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 20. maaliskuuta 2007 Samanaikaisuus engl. concurrency useampaa

Lisätiedot

Aki Taanila LINEAARINEN OPTIMOINTI

Aki Taanila LINEAARINEN OPTIMOINTI Aki Taanila LINEAARINEN OPTIMOINTI 26.4.2011 JOHDANTO Tässä monisteessa esitetään lineaarisen optimoinnin alkeet. Moniste sisältää tarvittavat Excel ohjeet. Viimeisin versio tästä monisteesta ja siihen

Lisätiedot

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

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

Lisätiedot

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

etunimi, sukunimi ja opiskelijanumero ja näillä

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

Lisätiedot

Käyttöjärjestelmät. Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi

Käyttöjärjestelmät. Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi Käyttöjärjestelmät 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 Kurssin sisältö Johdanto, historiaa

Lisätiedot

MONOGRAFIAN KIRJOITTAMINEN. Pertti Alasuutari

MONOGRAFIAN KIRJOITTAMINEN. Pertti Alasuutari MONOGRAFIAN KIRJOITTAMINEN Pertti Alasuutari Lyhyt kuvaus Monografia koostuu kolmesta pääosasta: 1. Johdantoluku 2. Sisältöluvut 3. Päätäntäluku Lyhyt kuvaus Yksittäinen luku koostuu kolmesta osasta

Lisätiedot

LIITE. asiakirjaan. komission delegoitu asetus

LIITE. asiakirjaan. komission delegoitu asetus EUROOPAN KOMISSIO Bryssel 12.10.2015 C(2015) 6823 final ANNEX 1 PART 6/11 LIITE asiakirjaan komission delegoitu asetus kaksikäyttötuotteiden vientiä, siirtoa, välitystä ja kauttakulkua koskevan yhteisön

Lisätiedot

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät Tenttikysymykset 1. Selitä mitä asioita kuuluu tietojärjestelmän käsitteeseen. 2. Selitä kapseloinnin ja tiedon suojauksen periaatteet oliolähestymistavassa ja mitä hyötyä näistä periaatteista on. 3. Selitä

Lisätiedot

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

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

Lisätiedot

CT50A2602 Käyttöjärjestelmät Seminaarityö. Tietokoneen muisti nyt ja tulevaisuudessa

CT50A2602 Käyttöjärjestelmät Seminaarityö. Tietokoneen muisti nyt ja tulevaisuudessa CT50A2602 Käyttöjärjestelmät Seminaarityö Tietokoneen muisti nyt ja tulevaisuudessa Jyrki Eurén Raimo Asikainen Janne Laitinen Teppo Lapinkoski Manu Toivanen Pasi Ruuth Johdanto Taustaa Työn taustana ryhmän

Lisätiedot

Stabiloivat synkronoijat ja nimeäminen

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

Lisätiedot

7.4 Sormenjälkitekniikka

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

Lisätiedot

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

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen Seminaari: Keskusmuistitietokannat Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen Sisältö Johdanto Esiteltävien menetelmien taustoja Hajautetun tietokannan spekuloiva samanaikaisuuden

Lisätiedot

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä? Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä? 2013-2014 Lasse Lensu 2 Ongelma 2: Milloin ongelmat muuttuvat oikeasti hankaliksi? 2013-2014 Lasse Lensu 3 Ongelma 3: Miten hankalia ongelmia

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

Yleistä. Esimerkki. Yhden palvelimen jono. palvelin. saapuvat asiakkaat. poistuvat asiakkaat. odotushuone, jonotuspaikat

Yleistä. Esimerkki. Yhden palvelimen jono. palvelin. saapuvat asiakkaat. poistuvat asiakkaat. odotushuone, jonotuspaikat J. Virtamo 38.3143 Jonoteoria / Jonojärjestelmät 1 JONOJÄRJESTELMÄT Yleistä Jonojärjestelmät muodostavat keskeisen mallinnuksen välineen mm. tietoliikenne- ja tietokonejärjestelmien suorituskyvyn analysoinnissa.

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

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

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

Lisätiedot

3. Laskennan vaativuusteoriaa

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

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Käyttöjärjestelmät: prosessit

Käyttöjärjestelmät: prosessit Käyttöjärjestelmät: prosessit 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 Käyttöjärjestelmä

Lisätiedot

24.9.2015. Työasema- ja palvelinarkkitehtuurit (IC130301) Apumuistit. Kiintolevyt. 5 opintopistettä. Petri Nuutinen

24.9.2015. Työasema- ja palvelinarkkitehtuurit (IC130301) Apumuistit. Kiintolevyt. 5 opintopistettä. Petri Nuutinen Työasema- ja palvelinarkkitehtuurit (IC130301) 5 opintopistettä Petri Nuutinen 5 opintopistettä Petri Nuutinen Apumuistit Tarvitaan ohjelmien ja dokumenttien tallentamiseen, kiintolevyjen varmuuskopiointiin,

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

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

Lisätiedot

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

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

Lisätiedot

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

Tietokoneen rakenne (2 ov / 4 op) Syksy 2006

Tietokoneen rakenne (2 ov / 4 op) Syksy 2006 Luento 0 581365 Tietokoneen rakenne (2 ov / 4 op) Syksy 2006 Teemu Kerola Helsingin yliopisto Tietojenkäsittelytieteen laitos Luento 0-1 Tietokoneen rakenne Asema opetuksessa u 1999 HajaTilin pakollinen,

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

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

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

Lisätiedot

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä? Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä? 2012-2013 Lasse Lensu 2 Ongelma 2: Milloin ongelmat muuttuvat oikeasti hankaliksi? 2012-2013 Lasse Lensu 3 Ongelma 3: Miten hankalia ongelmia

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

Lisätiedot

Ohjelmien automaattisen verifioinnin reunamailla

Ohjelmien automaattisen verifioinnin reunamailla Ohjelmien automaattisen verifioinnin reunamailla Antti Siirtola Tietotekniikan laitos, Perustieteiden korkeakoulu, Aalto-yliopisto, antti.siirtola@aalto.fi Suomalainen Tiedeakatemia, Nuorten akatemiaklubi,

Lisätiedot

Luento 0: Kurssihallinto Tietokoneen rakenne (2 ov / 4 op) Syksy 2006

Luento 0: Kurssihallinto Tietokoneen rakenne (2 ov / 4 op) Syksy 2006 Luento 0 581365 Tietokoneen rakenne (2 ov / 4 op) Syksy 2006 Teemu Kerola Helsingin yliopisto Tietojenkäsittelytieteen laitos Luento 0-1 Tietokoneen rakenne Asema opetuksessa u 1999 HajaTilin pakollinen,

Lisätiedot

UML:n yleiskatsaus. UML:n osat:

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

Lisätiedot

Ajattelemme tietokonetta yleensä läppärinä tai pöytäkoneena

Ajattelemme tietokonetta yleensä läppärinä tai pöytäkoneena Mikrotietokone Moderni tietokone Ajattelemme tietokonetta yleensä läppärinä tai pöytäkoneena Sen käyttötarkoitus on yleensä työnteko, kissavideoiden katselu internetistä tai pelien pelaaminen. Tietokoneen

Lisätiedot

Uolevin reitti. Kuvaus. Syöte (stdin) Tuloste (stdout) Esimerkki 1. Esimerkki 2

Uolevin reitti. Kuvaus. Syöte (stdin) Tuloste (stdout) Esimerkki 1. Esimerkki 2 Uolevin reitti Kuvaus Uolevi on ruudukon vasemmassa ylänurkassa ja haluaisi päästä oikeaan alanurkkaan. Uolevi voi liikkua joka askeleella ruudun verran vasemmalle, oikealle, ylöspäin tai alaspäin. Lisäksi

Lisätiedot

52480S TIETOKEARKKITEHTUURIT Tentti 6.2.1998

52480S TIETOKEARKKITEHTUURIT Tentti 6.2.1998 S Ä H K Ö T E K N I I K A N O S A S T O 548S TIETOKEARKKITEHTUURIT Tentti 6..998 Oulu 8..999. Selosta lyhyesti käsitteet: a. set associative memory b. conflict miss c. consistency of cached data d. access

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

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