5. Luento: Rinnakkaisuus ja jako prosesseihin (+ lyhyesti reaaliajasta) Arto Salminen,

Samankaltaiset tiedostot
5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

5. Rinnakkaisuus ja jako prosesseihin

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

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

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

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

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

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

Rinnakkaistietokoneet luento S

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

OHJ-4301 Sulautettu Ohjelmointi

9. Luento: Ohjelmistotyö. Tommi Mikkonen,

2 Konekieli, aliohjelmat, keskeytykset

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

Agenda. Läpäisyvaatimukset Henkilökunta Luennot ja aikataulu Kurssimateriaali Harjoitustyöt Demoharjoitus Tentti ja arvostelu Muuta?

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

Arto Salminen,

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

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

Ohjelmointi 1. Kumppanit

815338A Ohjelmointikielten periaatteet

OHJ-4301 Sulautettu Ohjelmointi

6. Luento: Skedulointi eli Vuoronnus. Tommi Mikkonen,

812315A Ohjelmiston rakentaminen. Asynkronisuus

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

Intel Threading Building Blocks

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

15. Ohjelmoinnin tekniikkaa 15.1

11/20: Konepelti auki

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

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Työn ja tohtoriopintojen yhteensovittaminen

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

Samanaikaisuuden hallinta

OSA I: Sisältöä. Atomisuus (atomic action) v Poissulkeminen ja synkronointi. Kriittinen (koodi)alue (critical section)

Harjoitustyön testaus. Juha Taina

Tutoriaaliläsnäoloista

Algoritmit 1. Luento 1 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Lukkiutuminen. Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely. Andrews 4.3 Stallings (tai mikä tahansa KJ-kirja)

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

Lukkiutuminen. Taustaa

4-13. Ratkaisu 4: OK, mutta... vrt. 2. Ratkaisu 3: OK. Ratkaisu 5: OK? Nälkiintyminen?

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

C++11 seminaari, kevät Johannes Koskinen

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin

Tietokoneen toiminta (Computer Organization I)

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

Harjoitustyö: virtuaalikone

Ohjelmistojen suunnittelu

Transaktiot - kertausta

3. Luento: Muistin hallinta. Tommi Mikkonen,

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

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

Yhteenvetoa. Ongelmakenttä

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Luento 4 Aliohjelmien toteutus

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Taustaa. Lukkiutuminen. Seuraukset. Määritelmiä Lukkiuma (deadlock) päättymätön odotus BLOCKED-tilassa. prosessi P. prosessi Q. pyydä A? OK.

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

Ohjelmien automaattisen verifioinnin reunamailla

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Käyttöjärjestelmät. Teemu Saarelainen Tietotekniikka

15. Ohjelmoinnin tekniikkaa 15.1

Käyttöjärjestelmän rakenne

Tietokoneen toiminta (Computer Organization I)

Järjestelmäarkkitehtuuri (TK081702) Hajautettu tietokanta. Hajautuksen hyötyjä

4. Lausekielinen ohjelmointi 4.1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

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

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

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

Rinnakkaisohjelmistot. Liisa Marttinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Kevät 2004

8/20: Luokat, oliot ja APIt

Tietokoneen toiminta (Computer Organization I)

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Ohjelmointi 1 / syksy /20: IDE

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

IT K 1 45 K ä yt t öj ä rj estelmät

Luento 1 Tietokonejärjestelmän rakenne

ELM GROUP 04. Teemu Laakso Henrik Talarmo

CUDA. Moniydinohjelmointi Mikko Honkonen

Tietokoneen toiminta (Computer Organization I)

Jakso 4 Aliohjelmien toteutus

Arto Salminen,

Rinnakkaistietokoneet luento S

Alkukartoitus Opiskeluvalmiudet

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

Transkriptio:

5. Luento: Rinnakkaisuus ja jako prosesseihin (+ lyhyesti reaaliajasta) Arto Salminen, arto.salminen@tut.fi

Agenda Rinnakkaisuus käsitteenä Perusongelmat Jako prosesseihin Reaaliaika Yhteenveto

Rinnakkaisuus Rinnakkaisuus tarkoittaa tässä yhteydessä useamman kuin yhden tehtävän suorittamista samanaikaisesti Mahdollisia hyötyjä: yksinkertaistaa testausta, työnjakoa, ajoitusta, parantaa modulaarisuutta ja suorituksen nopeutta jne

Todellinen Rinnakkaisuus Monisuoritinjärjestelmä / hajautettu järjestelmä Oheislaitteiden itsenäinen toiminta Näennäinen Moniajo Keskeytykset

Rajat hämärtymässä Multicore-prosessorit yhä pienemmissä laitteissa Erikoistarkoitukseen soveltuvat kiihdyttimet, jotka kumminkin osaavat suorittaa muitakin ohjelmia kunhan ne kirjoitetaan sopivasti Laitteen sisäinen rinnakkaisuus yleistä, vaikka ohjelmoijalle homma näyttäytyisikin peräkkäisenä Sivuvaikutukset

Esim. SSD-levyn sisäinen rinnakkaisuus Channel-level parallelism Flash-muistipaketeille useita rinnakkaisia väyliä Package-level parallelism Itsenäisiä Flash-muistipaketteja on useita Die-level parallelism Flash-muistipaketti koostuu useasta Flash-muistipiiristä Plane-level parallelism Muistipiiri koostuu kahdesta tai useammasta tasosta, jotka voivat toimia rinnakkain Sivuvaikutuksia Luku- ja kirjoitusoperaatioiden sekoittaminen -> kirjoittaminen hidastuu 4.5x hitaammaksi Hyvin suunniteltu tietokantahaku -> 5x nopeampi

Prosessien vuorovaikutus Suora vaikutus Yhteiset resurssit Viestinvälitys Epäsuora vaikutus Kilpailu yhteisistä resursseista Johtavat joukkoon hyvin tunnettuja käytännön ongelmia mutta silti on hävyttömän helppo epäonnistua!

Perusongelmat Poissulkeminen Synkronointi Lukkiutuminen Nälkiintyminen Testaus + debuggaus (oikeastaan ajoitus?)

Termejä Kriittinen alue Atominen operaatio Kilpailutilanne (race condition) Lukkiutuminen (deadlock) Nälkiintyminen (starvation)

Poissulkeminen Vain yksi ohjelma kerrallaan voi suorittaa kriittistä aluetta Keskeytyskielto Semaforit Erilaiset muut lukitusrutiinit Poissulkemisen vähentäminen tehtävä harkiten Yleensä ajoituksiin liittyvät syyt voivat pakottaa tähän (dokumentoi!) Toisaalta ylenmääräinen poissulkeminen sarjallistaa ohjelman

Synkronointi Ohjelman osa odottaa toisen ohjelman valmistumista tai oheislaitetta Semaforit Wait, Signal, Notify Pienissä sulautetuissa ohjelmissa harvoin suoraan ohjelmien välistä mutta sitäkin useammin keskeytyksiin liittyvää Synkronoinnin vähentäminen syytä tehdä harkiten Yleensä ajoituksiin liittyvät syyt voivat pakottaa tähän (dokumentoi!) Toisaalta ylenmääräinen synkronointi sarjallistaa ohjelman

Lukkiutuminen Ohjelman suoritus pysähtyy odottamatta Lukkiutuminen estyy jos neljästä ehdosta jonkin täyttyminen estetään Poissulkemisehto prosessi varaa resurssin itselleen Varaus-odotusehto prosessi ei vapauta resursseja odotuksen ajaksi Irroittamattomuusehto varatun resurssin vapauttaa vain prosessi itse Silmukkaodotusehto prosessit odottavat toisten varaamia resursseja Käytännössä hämmästyttävän helppo saada aikaan vahingossa

Nälkiintyminen Ohjelman suoritus etenee, mutta joku osa ohjelmaa ei saa koskaan suoritusvuoroa Nälkiintyminen voi tapahtua, jos ohjelmassa on poissulkemista Syynä yleensä epäsuora vaikutus, joten löytäminen testaamalla tai muuten perinteisin keinoin voi olla vaikeaa Ei selkeää ehtolistaa kuten lukkiutumiselle

Testaaminen Koska suoritus etenee rinnakkain, voivat eri säikeet/prosessit edetä eri suorituskerroilla eri tahtiin Ongelmia voi tuoda ainoastaan 1 suoritus 1.000.000.000 Eli siis vikaa tulee aina joskus Ei voida toistaa testein Vaikka virhe voitaisiin toistaakin, ei aina olla kuivilla Ongelmat voivat poistua kun testaustuki lisätään Varsinainen ongelma voi olla aivan muualla kuin missä virheen seuraukset havaitaan

Miksi rinnakkaisuus on vaikeaa? koska ohjelmoinnin opetuksessa alusta asti aivopestään kaikki ajattelemaan peräkkäisesti? Luonnostaanhan kaikki ajattelisivat muuten rinnakkaisesti ;-) koska alun perin ohjelmien avulla piti pystyä ratkaisemaan erityisesti algoritmisia ongelmia, ja melkein kaikki yleisesti käytetyt ohjelmointikielet perustuvat tälle lähtökohdalle? Ohjelmointikielen tehtävä on rajoittaa ratkaisun avaruutta ymmärrettävälle tasolle

Ratkaisuehdotuksia Ohjelmointikieli/tyyli joka peittää joitain rinnakkaisuuteen liittyviä ongelmia Esim. monet koordinaatiokielet (jotka eivät tosin ole enää kovin muodikkaita mutta joissa oli mahdollista erikseen määritellä miten tehtävät vaikuttivat toisiinsa) Funktionaalinen ohjelmointi Arkkitehtuurityyli, joka ohjaa tietynlaiseen tehtävien allokointiin Selkeä kriteeristö mitä tehdään rinnan ja mitä ei

Esimerkki koordinaatiokielestä: Linda Kommunikointi prosessien välillä tapahtuu globaaliin tuple spaceen talletettujen tuple:jen avulla Lindassa on määritelty seuraavat primitiivit: out: out(t) adds tuple t to tuple space in: in(t) attempts to match some tuple t in tuple space to the template m and, if a match is found, removes t from tuple space rd: rd(t) Similar to in except that the matched tuple remains in tuple space. The executing process suspends if it fails to match a tuple eval(expression) Similar to out except that the tuple argument to eval is evaluated after t is added to tuple space Toteutus on saatavilla useille ohjelmointikielille: C-Linda, CppLinda, Erlinda, JavaSpaces, PyLinda

Esimerkki koordinaatiokielestä: Linda, Hello World real_main(int argc,char *argv[]) { int nworker, j, hello(); nworker = atoi(argv[1]); for (j=0; j<nworker; j++) eval("worker", hello(j)); for (j=0; j<nworker; j++) in("done"); printf("hello_world is finished\n"); return(0); } hello(int i) { printf("hello, world from number %d\n",i); out("done"); return(0); }

Jako prosesseihin Toiminnallisuus Skedulointi Rakenne Tehokkuus Monisuoritinympäristössä Näiden yhdistelmä

Toiminnallinen jako Sovelluksen loogiseen toimintaan perustuva jako Etuja: ongelman ymmärtäminen, toteuttaminen ja testaaminen yksinkertaistuvat Haittoja: poissulkeminen, raskas kommunikaatio, muistinkulutus

Skedulointiin perustuva jako Samanaikaisesti suoritettavat tehtävät samassa prosessissa Etuja: reaaliaikaominaisuuksien laskenta yksinkertaistuu Haittoja: epämodulaarista, ohjelman ymmärtäminen voi vaikeutua

Rakenteeseen perustuva jako Fyysisille toimilohkoille, esim oheislaitteille, oma prosessi Etuja: jos laitteisto muuttuu -> helppo muuttaa myös koodi Haittoja: sovelluksen hallitseminen voi vaikeutua, erilaiset ajastustarpeet törmäävät

Rinnakkaistaminen Algoritmin jakaminen monisuoritinjärjestelmässä Etuja: nopeus Haittoja: vaikea suunnitella, nopeushyöty voi olla kyseenalaista Monisuoritinjärjestelmä voi olla myös epäsymmetrinen OpenCL, jne.

Erilaisista yhdistelmistä Saattavat helposti sekoittaa ohjelman perusfilosofian Muutosten tekeminen hankaloituu, jos useita mahdollisia paikkoja lisätä uutta toiminnallisuutta Pidä tyylien määrä pienenä! Dokumentoi erityisesti Yleiset suunnitteluperiaatteet Yksittäiset poikkeukset jotka kumminkin unohtuvat

Automaattinen rinnakkaistaminen Täydellisessä maailmassa ohjelmojat voisivat kirjoittaa ohjelmia kuten aina ennenkin ja kääntäjät, virtuaalikoneet ja käyttöjärjestelmät huolehtisivat laitteiston sopivasta kuormituksesta Onnistuu nykyisin tiettyyn rajaan asti datacentereissä jne, Toimii vähän huonommin pienemmissä yksiköissä, jos coreja on oikeasti paljon 2 ok, 4 ok, 8-16???, 32nok, 64NOK,

Ongelmat Prosessit harvoin oikeasti riippumattomia Epäsuora vaikutus esim. I/O järjestelmän, muistien, jne. kautta Dynaamisesti muuttuvat tilanteet voivat olla vaikeita hallita Ohjelmistotasolla ei keinoja auttaa käyttöjärjestelmää rinnakkaisuuden hallinnassa Arkkitehtuurityyli voisi auttaa; nykyiset kielet sallivat mielivaltaiset ohjelmat Koordinaatiokielet edelleen voisivat helpottaa

Yhteenveto Rinnakkaisuuden ongelmat Jakoperusteet