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



Samankaltaiset tiedostot
Different language, different terminology. Process and thread

Ohjelmoinnin peruskurssien laaja oppimäärä

815338A Ohjelmointikielten periaatteet

812315A Ohjelmiston rakentaminen. Asynkronisuus

Ohjelmoinnin peruskurssien laaja oppimäärä

ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

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

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5

Monitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia

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

RINNAKKAINEN OHJELMOINTI A,

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

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

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

11/20: Konepelti auki

Rinnakkaistietokoneet luento S

Ongelmakenttä. Rinnakkaisuuden tarve. Kommunikointiin tarvitaan. Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky Luotettavuus

Rinnakkaisohjelmointi, Syksy 2006

Ongelmakenttä. Yhteenvetoa. Ratkottava. Mekanismit. Lukkomuuttujat. Lukkomuuttujat, Spin Locks. Rinnakkaisuuden tarve. Kommunikointiin tarvitaan

Yhteenvetoa. Ongelmakenttä

Tavoite. Monitorit. Monitori Hoare Monitori. Minimoi virhemahdollisuuksia. Monitori Synkronointimenetelmiä Esimerkkejä

automaattisen tietotyypin tunnistamisen osalta, minkä Smith koki olevan avaintekijä onnistuneen rinnakkaisen ohjelmointikielen toteuttamisessa.

TIES542 kevät 2009 Yhteismuistisamanaikaisuus

2 Konekieli, aliohjelmat, keskeytykset

2. Olio-ohjelmoinista lyhyesti 2.1

Javan semaforit. Joel Rybicki, Aleksi Nur mi, Jara Uitto. Helsingin yliopisto

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Jaana Diakite Projekti 1 JAVA-Monitorit 1(13) Rinnakkaisohjelmointi Anu Uusitalo

Numeriikan kirjastoja

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

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Tutoriaaliläsnäoloista

1. Olio-ohjelmointi 1.1

CUDA. Moniydinohjelmointi Mikko Honkonen

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

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

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

Ongelmakenttä. Yhteenvetoa. Mekanismit. Ratkottava. Lukkomuuttujat, Spin Locks. Lukkomuuttujat. Rinnakkaisohjelmistot 2004 / Auvo Häkkinen 9-1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

815338A Ohjelmointikielten periaatteet

1. Omat operaatiot 1.1

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

Etäproseduurikutsu. Etäproseduurikutsu, Remote Procedure Call (RPC)

Etäproseduurikutsu. RPC Toteutus Virhesemantiikka. Andrews 8.1, 10.3, Stallings 13.3

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

OSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa. Sisältöä. Poissulkeminen. Halutut ominaisuudet 2-1. Rinnakkaiset, atomiset operaatiot

Transaktiot - kertausta

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

4. Olio-ohjelmoinista lyhyesti 4.1

Arto Salminen,

Intel Threading Building Blocks

Ehto- ja toistolauseet

Tavoite. Monitorit. Semafori perusmekanismi synkronointiin. Hyötyjä:

poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla - meniköhän oikein? Yksityiskohtia pois ohjelmoijalta kääntäjälle

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä

Jakso 4 Aliohjelmien toteutus

Monitorit -projekti Rinnakkaisohjelmointi

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

4. Luokan testaus ja käyttö olion kautta 4.1

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

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

OSA I: Yhteisten muuttujien käyttö. Prosessit samassa koneessa. Rio 2004 / Auvo Häkkinen 2-1

OSA I: Yhteisten muuttujien käyttö. Sisältöä. Prosessit samassa koneessa. Poissulkeminen ja synkronointi. Semaforit ja rinnakkaisuuden hallinta

Sisällys. 15. Lohkot. Lohkot. Lohkot

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

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

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

ITKP102 Ohjelmointi 1 (6 op)

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

ITKP102 Ohjelmointi 1 (6 op)

OSA II: Hajautettu ympäristö. Sisältö, osa II. Ei yhteistä muistia. Sanomanvälitys. Etäproseduurikutsu. Rendezvous. Rio 2004 / Auvo Häkkinen

Rinnakkaistietokoneet luento S

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

Jakso 4 Aliohjelmien toteutus

Java kahdessa tunnissa. Jyry Suvilehto

UML -mallinnus TILAKAAVIO

1. Tarkastellaan seuraavaa stokastista Petri-verkkoa: p 2. p 1. lock write 1

Transkriptio:

Rinnakkaisuus parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa Rinnakkaisuuden etuja: laskennan nopeutuminen (sarjoittuvat operaatiojonot) ilmaisuvoima (ongelman rinnakkainen luonne) Rinnakkaisuus eri tasoilla (granulariteetti) konekäskyt ohjelmointikielen lauseet prosessit (itsenäiset aliohjelmat) ohjelmat Eri tasojen rinnakkaisuus näkyy kielessä eri tavoin! Virtuaalinen ja todellinen rinnakkaisuus loogiset laskentayksiköt (prosessit) fyysiset laskentayksiköt (prosessorit) 1

1 Prosessit ja säikeet Eri ohjelmointikielissä eri terminologia Prosessi käyttöjärjestelmän tarjoama väline ohjelmien ajamiseen rinnakkain oma muistialue Kommunikointi usein käyttöjärjestelmän viestinvälityksen kautta yms. Säie (thread) kevyt prosessi peräkkäin suoritettava käskyjono, joka toimii muista säikeistä riippumatta kullakin säikeellä oma ohjelmalaskuri ja pino saman prosessin säikeillä yhteinen muistialue Kommunikointi jaetun muistin välillä, haasteena synkronointi muistin käytössä Kommunikoivat prosessit voivat olla myös eri koneissa, aliohjelman voi suorittaa eri koneessa (RPC, Remote Procedure Call) 2

2 Synkronointi Kommunikointi: viestien välitys jaettu muisti Synkronointi: implisiittistä erikoistoimenpiteitä Yhteistoiminnallinen (co-operation) synkronointi prosessi A odottaa, että prosessi B saa toimintansa päätökseen, ennen kuin A voi jatkaa suoritustaan esim. tuottaja-kuluttaja ongelma Kilpaileva (competition) synkronointi prosessit tarvitsevat samaa resurssia, jota voi käyttää vain yksi prosessi kerrallaan esim. yhteiseen muistiin kirjoittaminen condition synchr. mutual exclusion 3

Vuorottaisrutiinit (coroutines) Vanhin todellisissa ohjelmointikielissä esiintynyt rinnakkaisuuden muoto Simula67, Modula-2 Kvasirinnakkaisuus yksi prosessori prosessorin vaihdot prosessilta toiselle kuvataan eksplisiittisesti ohjelmoija hoitaa skeduloinnin 4

MODULE Program; FROM SYSTEM IMPORT PROCESS, NEWPROCESS, TRANSFER,..; VAR v1, v2, main: PROCESS; PROCEDURE P1; PROCEDURE P2; BEGIN BEGIN...... TRANSFER ( v1, v2 ); TRANSFER ( v2, v1 );...... TRANSFER ( v1, v2 ); TRANSFER ( v2, v1 );...... TRANSFER ( v1, v2 ); TRANSFER ( v2, main ); END P1; END P2; BEGIN NEWPROCESS ( P1,..., v1 ); NEWPROCESS ( P2,..., v2 ); TRANSFER ( main, v1 ); END; Vuorottaisrutiinit Modula-2:ssa 5

Algol68 PL/I Semaforit (opastimet) Skedulointiin perustuva synkronointi Mahdollistavat muiden prosessien poissulkeminen Kokonaislukumuuttujia, joilla operaatiot P (wait) ja V (signal): P ( S ): if S > 0 then S := S 1 else aseta tämä prosessi odottamaan S:ää V ( S ): if S:ää odottaa prosesseja then anna jonkin niistä jatkaa else S := S + 1 P ja V jakamattomia (atomisia) operaatioita Yleinen tai binaarinen semafori 6

Monitorit Skedulointiin perustuva synkronointi Kehittyneempiä yhteisen tiedon valvojia kuin semaforit Moduulirakenteen hyödyntäminen tiedon piilottaminen abstraktit tietotyypit Suojausmekanismi operaatioiden poissulkevuus vain yksi prosessi kerrallaan voi suorittaa moduulin operaatioita (prosessilla hallussaan monitorin lukko) Monitorin odotusjoukko toimintoja suorittamaan haluavat prosessit 7

Java (säikeet) Rinnakkaisuuden mahdollistaminen luokan Thread periminen rajapinnan Runnable toteuttaminen pääohjelmaa varten luodaan automaattisesti säie Säikeiden suoritus säikeen toiminta kirjoitetaan run-operaatioon suoritus alkaa kutsumalla start-operaatiota, jolloin järjestelmä kutsuu run-operaatiota Muita Thread-luokan operaatioita sleep: säikeen lukitseminen (millisekunteina) yield: suorituksessa oleva säie luovuttaa jäljellä olevan aikaviipaleensa 8

Java (synkronointi) Jokaisella oliolla on lukko (lock) estää synkronoitujen operaatioiden suorittamisen yhtä aikaa Kun säie kutsuu olion synkroinoitua operaatiota säie ottaa haltuunsa olion lukon, jolloin synchronized void f ( ) {... } void f ( ) { synchronized ( this ) {... } } muut säikeet eivät voi kutsua olion mitään synkronoitua operaatiota säie luopuu lukosta, kun operaatio on suoritettu loppuun tai säie siirtyy odotustilaan 9

Säikeiden (prosessien) luominen Yhdessä kielessä voi olla useita tapoja säikeiden luomiseen Yhteinen aloitus (co-begin) Rinnakkaiset silmukat (parallel loops) Esittelyiden työstämiseen liittyvä aloitus (launch-at-elaboration) Haarautumat ja liittymät (fork-join) Implisiittinen vastaaminen (implicit receipt) Aikaistettu kuittaus (early-reply) 10

Yhteinen aloitus nondeterministinen: begin a := 3, b := 4 end rinnakkainen: par begin a := 3, b := 4 end Algol68-koodia Mahdollista myös Occamissa par begin p ( a, b, c ), begin d := q ( e, f ); r ( d, g, h ) end, s ( i, j ) end p ( a, b, c ) d := q ( e, f ) s ( i, j ) r ( d, g, h ) 11

Rinnakkaiset silmukat: Esittelyiden työstämiseen liittyvä aloitus: SR: Occam: co ( i := 5 to 10 ) -> p ( a, b, i ) oc par i = 5 for 6 p ( a, b, i ) Ada: procedure P is task T is... end T; begin P... end P; Fortran95: forall ( i = 1 : n 1 ) A ( i ) = B ( i ) + C ( i ) A ( i + 1 ) = A ( i ) + A ( i + 1 ) end forall 12

Edelliset vaihtoehdot Haarautumat ja liittymät fork...... sisäkkäisyys join ei sisäkkäisyyttä 13

Haarautumat ja liittymät Ada: task type T is... begin... end T; pt: access T := new T; Java: class mythread extends Thread {... public void mythread (... ) {... } public void run ( ) {... } }... mythread t = new mythread (... ); Modula-3: t.start ( ); t := Fork ( c );... Join ( t ); t.join ( ); 14

GPU-laskenta Näytönohjaimen laskentateho merkittävä, näytönohjain ohjelmoitavissa Näytönohjaimen arkkitehtuuri erilainen kuin CPU:n Tyypillisesti vektorilaskentaa, SIMD tms. Kaikissa koneissa ei GPU:ta, ohjelman pitäisi silti toimia Halutaan yhteinen ohjelmointikieli CPU:lle ja GPU:lle Esim. Nvidian CUDA, pohjautuu C:hen 15

CUDA 16

SIMD-laskenta Single Instruction, Multiple Data Rinnakkain etenevät laskennat etenevät tarkasti samaa tahtia, mutta eri datalle Tyypillistä tieteellisessä laskennassa, jossa käsitellään matriiseja, vektoreita yms. Näkyy kielessä esim. silmukkarakenteissa yms. Prosessorien konekielessä myös tukea vektorilaskentaan (SISD=Single Instruction, Single Data) (MIMD=Multiple Instruction, Multiple Data) (SPMD=Single Program, Multiple Data) 17

Aktiiviset oliot Olio-ohjelmoinnissa olio luonnollinen rinnakkaisuuden yksikkö Aktiivisessa oliossa oma suoritussäie, joka suorittaa kutsutut metodit Kutsuja ei jää odottamaan, paluuarvot usein futuureilla Ei ongelmia jäsenmuuttujien poissulkemisen kanssa Mitä tehdä, jos jäsenmuuttujan suoritus jää odottamaan? (Mm. Symbianin akt. olio suorittaa jatkuvasti runmetodia, muut kutsut normaaleja) 18

Futuurit Jos kutsu rinnakkainen, miten välittää tulos kutsujalle, joka ei jää odottamaan? Futuurit edustavat myöhemmin saatavaa paluuarvoa Jos futuurin arvo luetaan, lukija jää odottamaan tuloksen valmistumista Futuurilta voi kysyä, onko tulos saatavilla future<int> tulos = async(f, x); // C++0x //... if (tulos.get() == 3)... // Odottaa tarvittaessa 19

Säieallas / Thread pool Joskus rinnakkaisuutta tarvitaan suorittamaan suuri määrä pikkutehtäviä Säikeen käynnistäminenkin turhan raskasta Järkevä rinnakkaisuuden määrä sama kuin fyysisesti prosessorien määrä Tehtäviä lisätään thread pooliin, joka suorittaa niitä rinnakkain järkevän määrän Tehtävien käynnistämisellä voi olla ehtoja Tehtävät usein funktioita, lambda-lausekkeita... 20

Funktionaalisuus Säikeillä yhteinen muistiavaruus, luku/kirjoitus yhteisistä muuttujista suojattava Aiheuttaa myös välimuistin synkronointitarpeen Funktionaalisissa kielissä ei sivuvaikutuksia, ongelmaa ei ole! Esim. Haskell-kääntäjä voi rinnakkaistaa laskentaa Concurrent Haskellissa kuitenkin myös säikeet ja erilliset yhteiset muuttujat kommunikointiin 21

Transaktionaalinen muisti Käytössä mm. Concurrent Haskellissa Koodilohkon suoritus atomisesti (transaktio). Kaikki muutokset näkyviin kerralla Yksi toteutustapa: Jokainen luku/kirjoitus jaettuihin muuttujiin kirjataan lokiin, itse muuttujia ei muuteta Lohkon lopussa tarkastetaan, että muuttujien arvot ovat mitä pitää Jos eivät ole, joku muu on käynyt sotkemassa! Tuhotaan loki ja yritetään uudelleen 22

Ada83 Adan tehtävät Muistuttavat pakkauksia (syntaksiltaan) määritys ja runko määrityksessä ei yksityistä osaa aktiivinen yksikkö (toisin kuin pakkaus) Tehtävien vuorovaikutus perustuu kohtaamiseen (rendezvous), joka tapahtuu porttien (entry) avulla portti määrittelee tehtävän tarjoamat palvelut ulkopuolelle palvelija ja palveltava synkroninen viestien välittäminen odottaminen passiivista 23

T1 T2 Portit ja kohtaaminen portin kutsu in out in out portti P Kohtaamislause on lause, vaikka muistuttaa proseduuria Kohtaamisen epäsymmetrisyys: kutsuvan prosessin täytyy tuntea portti portin omaava tehtävä ei tunne kutsujaa Tehtävän (portin) kutsu muodostaa kohtaamispaikan kutsuja odottaa tiettyä tehtävää portin haltija odottaa mitä tahansa tehtävää normaali parametrivälitys (in, out, in out) 24

select accept P1... end P1;... lauseita... or accept P2... end P2;... lauseita... or... end select; Portin haltija palveltavien puute jollakin portilla ei saa estää palvelua muilla porteilla valitaan sellainen portti, jolla on odottajia Valikoiva kohtaaminen (select-lause) Portin kutsuja select P (...);... lauseita... or... lauseita... end select; tietyn palvelun jääräpäinen odottaminen ei ole järkevää jos portin haltija ei ole välittömästi valmis palvelemaan, suoritetaan jokin muu toiminto 25