Rinnakkaistietokoneet luento S

Samankaltaiset tiedostot
Rinnakkaistietokoneet luento S

Rinnakkaistietokoneet luento S

Rinnakkaistietokoneet luento S

Rinnakkaistietokoneet luento S

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

Numeriikan kirjastoja

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

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

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

Yhteenlaskun ja skalaarilla kertomisen ominaisuuksia

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Lineaarikombinaatio, lineaarinen riippuvuus/riippumattomuus

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

Tutoriaaliläsnäoloista

MS-A0305 Differentiaali- ja integraalilaskenta 3 Luento 9: Greenin lause

Ohjelmoinnin peruskurssien laaja oppimäärä

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Algoritmit 1. Luento 1 Ti Timo Männikkö

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Liittomatriisi. Liittomatriisi. Määritelmä 16 Olkoon A 2 M(n, n). Matriisin A liittomatriisi on cof A 2 M(n, n), missä. 1) i+j det A ij.

Ehto- ja toistolauseet

Ortogonaalinen ja ortonormaali kanta

Mat Lineaarinen ohjelmointi

2 Konekieli, aliohjelmat, keskeytykset

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

Numeeriset menetelmät

A = a b B = c d. d e f. g h i determinantti on det(c) = a(ei fh) b(di fg) + c(dh eg). Matriisin determinanttia voi merkitä myös pystyviivojen avulla:

Matematiikka B2 - TUDI

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Algoritmit 1. Demot Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

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

Stabilointi. arvosana. arvostelija. Marja Hassinen

6 Vektoriavaruus R n. 6.1 Lineaarikombinaatio

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

1 Ominaisarvot ja ominaisvektorit

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Algoritmit 2. Luento 13 Ti Timo Männikkö

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

5 Ominaisarvot ja ominaisvektorit

T Luonnollisen kielen tilastollinen käsittely Vastaukset 3, ti , 8:30-10:00 Kollokaatiot, Versio 1.1

Kombinatorisen logiikan laitteet

Algoritmit 1. Luento 2 Ke Timo Männikkö

12. Javan toistorakenteet 12.1

Dynaaminen analyysi III Luento 5 Antti-Pekka Tuovinen

1.1. Määritelmiä ja nimityksiä

Matematiikka B2 - Avoin yliopisto

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

Intel Threading Building Blocks

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

Ominaisarvo-hajoitelma ja diagonalisointi

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

(1.1) Ae j = a k,j e k.

Määritelmä Olkoon T i L (V i, W i ), 1 i m. Yksikäsitteisen lineaarikuvauksen h L (V 1 V 2 V m, W 1 W 2 W m )

Harjoitus 3 ( )

11. Javan toistorakenteet 11.1

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

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

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

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

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

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Vektoreiden A = (A1, A 2, A 3 ) ja B = (B1, B 2, B 3 ) pistetulo on. Edellisestä seuraa

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

Matikkapaja keskiviikkoisin klo Lineaarialgebra (muut ko) p. 1/210

3. Muuttujat ja operaatiot 3.1

Kuljetustehtävä. Materiaalia kuljetetaan m:stä lähtöpaikasta n:ään tarvepaikkaan. Kuljetuskustannukset lähtöpaikasta i tarvepaikkaan j ovat c ij

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

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

TAMPEREEN TEKNILLINEN YLIOPISTO

Vapaus. Määritelmä. Vektorijono ( v 1, v 2,..., v k ) on vapaa eli lineaarisesti riippumaton, jos seuraava ehto pätee:

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Johdatus tekoälyn taustalla olevaan matematiikkaan

1. LINEAARISET YHTÄLÖRYHMÄT JA MATRIISIT. 1.1 Lineaariset yhtälöryhmät

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

Johdatus verkkoteoriaan luento Netspace

OHJ-4301 Sulautettu Ohjelmointi

Malliratkaisut Demot

811120P Diskreetit rakenteet

Lineaarialgebra a, kevät 2018 Harjoitusta 5 Maplella

Ohjelmoinnin peruskurssien laaja oppimäärä

Luku 8. Aluekyselyt. 8.1 Summataulukko

Matriisipotenssi. Koska matriisikertolasku on liitännäinen (sulkuja ei tarvita; ks. lause 2), voidaan asettaa seuraava määritelmä: ja A 0 = I n.

BM20A0700, Matematiikka KoTiB2

Algoritmit 2. Luento 7 Ti Timo Männikkö

Talousmatematiikan perusteet: Luento 14. Rajoittamaton optimointi Hessen matriisi Ominaisarvot Ääriarvon laadun tarkastelu

Insinöörimatematiikka D

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

12. Javan toistorakenteet 12.1

Lineaariavaruudet. Span. Sisätulo. Normi. Matriisinormit. Matriisinormit. aiheita. Aiheet. Reaalinen lineaariavaruus. Span. Sisätulo.

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

TUTKIMUSAINEISTON ANALYYSI. LTKY012 Timo Törmäkangas

CUDA. Moniydinohjelmointi Mikko Honkonen

Johdatus matematiikkaan

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

Transkriptio:

Rinnakkaistietokoneet luento 5 521475S

Silmukalliset ohjelmat Silmukat joissa ei ole riippuvuussyklejä voidaan vektoroida eli suorittaa silmukan vektorointi Jokainen yksittäinen käsky silmukan rungossa voidaan suorittaa kaikille iteratiolle samanaikaisesti Esim: do i = 1,n S1: a(i) = b(i+1) + c(i) S2: b(i) = a(i) + 5 Silmukassa on datariippuvuus ja epäriippuvuus lauseiden S1 ja S2 välillä (kts. kuva 3.4) Lauseiden välillä ei kuitenkaan ole sykliä, joka estäisi vektoroinnin Esimerkki silmukka voidaankin vektoroida täydellisesti ja se voidaan kirjoittaa vektoroidussa muodossa: a(1:n) = b(2:n+1) + c(1:n) b(1:n) = a(1:n) + 5 nämä kaksi vektoroitua lauseketta voidaan siis suorittaa peräkkäin ja kumpikin niistä suorittaa operaation usealle datalle (kaikille iteraatioille) samanaikaisesti

Katsotaan silmukkaa, jossa on datariippuvuussykli, jota ei voida poistaa do i = 1,N S1: d(i) = a(i+1) + 3 S2: a(i) = b(i-1) + c(i) S3: b(i) = a(i) 5 Kuvasta 3.5 nähdään, että lauseiden S3 ja S2 välillä on syklinen riippuvuus: seuraava iteraatio käyttää edellisen laskemaa b:n arvoa (riippuvuusvektori d = 1) Lause S1 voidaan vektoroida, koska se on syklin ulkopuolella: silmukka voidaan vektoroida osittain Osittain vektoroitu silmukka: S1: d(1:n) = a(2:n+1) + 3 do i = 1,N S2: a(i) = b(i-1) + c(i) S3: b(i) = a(i) 5

Jotkin vektorioperaatiot muuntavat vektorin skalaariksi, esim. kahden vektorin sisätulo: do i = 1,n S1: a(i) = b(i) * c(i) S2: dot = dot + a(i) Tämä silmukka voidaan vektoroida: S1: a(1,n) = b(1,n) * c(1,n) S2: dot = sum(a(1:n)) missä sum-operaatio laskee argumentin elementit yhteen

DOALL on rinnakkais-fortran rakenne jolla ilmaistaan, että silmukan kaikki iteraatiot suoritetaan rinnakkain (edellyttää sopivaa rinnakkaistietokonetta) Jokainen silmukan iteraatio muunnetaan itsenäiseksi prosessiksi DOALL:n käyttö edellyttää, että silmukan iteraatioiden välillä ei ole riippuvuuksia Koska riippumattomat iteraatiot voidaan suorittaa satunnaisessa järjestyksessä, voidaan kukin iteraatio ajaa omalla prosessorillaan Iteraatioiden riippumattomuus testataan käyttäen data riippuvuuksia Jos datariippuvuusmatriisissa on rivi, jonka kaikki elementit ovat nollia, kaikki iteraatiot ovat riippumattomia tästä indeksisä: ts. riippuvuusvektoreilla ei ole kyseisen indeksin määrittelemää ulottuvuutta joten ei voi löytyä riippuvuuksia, jotka yhdistäisivät eri (ko. indeksin) iteraatioita

Esim: do i = 1,n S1: a(i) = b(i) + c(i) S2: d(i) = a(i) + 2 Silmukalla ei ole iteraatioiden välisiä riippuvuuksia (yksi riippuvuusvektori ja se on d = 0) Silmukka voidaan muuntaa rinnakkaismuotoon rinnakkaislaskentaa varten: DOALL i = 1,n S1: a(i) = b(i) + c(i) S2: d(i) = a(i) + 2 end DOALL Olettaen, että käytössä on n prosessoria, silmukan evaluointi nopeutuu (luokkaa) n kertaisesti: jokainen iteraatio voidaan osoittaa omalle prosessorilleen (mikä ilmaistaa ohjelmoijan toimesta käyttämällä DOALL rakennetta)

DOACROSS on toinen rinnakkaiskielten rakenenne, jota voidaan hyödyntää silmukoiden rinnakkaislaskennassa Jokaisesta silmukan iteraatiosta tulee prosessi mutta prosessit eivät ole täysin riippumattomia toisistaan DOACROSS rakennetta käytetään, kun iteraatioden välillä on riippuvuuksia Nämä riippuvuuden huomioidaan epäsuoran tai suoran synkronoinnin kautta

Esim: do i = 1,n S1: a(i) = b(i) + c(i) S2: d(i) = b(i-1) + c(i) S3: e(i) = a(i-1) + d(i-2) Silmukalla on kaksi riippuvuutta (kts. kuva 3.6) d1 = 1 (a:n kautta) ja d2 = 2 (d:n kautta) Silmukka voidaan suorittaa rinnakkain käyttäen DOACROSSrakennetta: DOACROSS i = 1,n S1: a(i) = b(i) + c(i) S2: d(i) = b(i-1) + c(i) syncronization d1 syncronization d2 S3: e(i) = a(i-1) + d(i-2) end DOACROSS

Jokainen iteraatio voidaan osoittaa eri prosessorille: synkronointilauseet varmistavat, että lause S3 suoritetaan vasta, kun riippuvuudet (kts. kuva 3.6) on huomioitu DOACROSS silmukoissa rinnakkaisuus saadaan hyödynnettyä niiden lauseiden kautta, jotka voidaan suorittaa yht aikaa Iteraatioiden välillä on kuitenkin osoittain määrätty suoritusjärjestys, koska yhden iteraation täytyy odottaa joidenkin käskyjen suoritusta toisessa iteraatiossa

Kuva 3.6 yksi prosessori suorittaa yhden iteraation: lauseet S1-3 suoritetaan peräkkäin d1 d2 synkronointi: d1, d2

Silmukan lauseiden uudelleen järjestely on usein tarpeen rinnakkaisuuden kasvattamiseksi Esim: do i = 1,n S1: b(i) = a(i-2) + 2 S2: a(i) = d(i) + c(i) S3: c(i) = a(i-1) + 3 Silmukalla on riippuvuus d1 lauseiden S2 ja S1 välillä (a:n kautta) ja d2 lauseiden S2 ja S3 välillä (myös a:n kautta) Silmukka ei sovi DOACROSS rakenteen kanssa käytettäväksi, koska toinen riippuvuuksista on ylempään lauseeseen, joka estää kahden iteraation päässä olevan lauseen S1 laskenna aloittamisen, ennen S2:n laskennan päättymistä Yksinkertaisesti vaihtamalla S2:n ja S1:n paikkoja saadaan esiin rinnakkaisuutta jota voidaan hyödyntää: riippuvuudet ovat nyt alempiin lauseisiin

doacross i = i,n S2: a(i) = d(i) + c(i) synchronization d1 synchronization d2 S1: b(i) = a(i-2) + 2 S3: c(i) = a(i-1) + 3 across Jokaisesta silmukan iteraatiosta tulee nyt oma prosessi omalle prosessorille kasvaneen rinnakkaisuuden ansiosta (kts. kuva 3.7 ja 3.8)

Kuva 3.7

Kuva 3.8 S prosessori lauseen id

Esimerkki DOACROSS rakenteesta sisäkkäisten silmukoiden tapauksessa: do i = 1,n do j = 1,n S1: a(i,j) = b(i,j-1) + 2 S2: b(i,j) = a(i,j) + b(i-1, j-1) Silmukalla on kolme riippuvuutta ja riippuvuusmatriisi on: D 0 = 0 0 1 a b b 1 1 i j

Tämä ohjelma voidaan suorittaa käyttämällä DOACROSS-rakennetta rinnakkaistamalla uloin silmukka: doacross i = 1,n do j = 1,n S1: a(i,j) = b(i,j-1) + 2 S2: b(i,j) = a(i,j) + b(i-1,j-1) across Kuva 3.9 esittää aika-avaruusdiagrammia silmukalle: jokainen rivi edustaa yhden prosessorin prosessia Yksi synkronointi tapahtuma tarvitaan, koska riippuvuudella d3 on i-komponentti, joka aiheuttaa riippuvuuden eri i:n iteraatioiden välille: sykronointitapahtuma varmistaa, että yksi prosessori on evaluoinut lauseen S2 ennen kuin tämän lauseen tiedosta riippuvainen prosessori voi aloittaa oman S2 lauseen evaluoinnin Jos kaikkien prosessoreiden laskenta aloitetaan samalla ajan hetkellä, synkronointi tapahtuu välillisesti laskennan ajallisen etenemisen kautta (kts. kuva 3.9) ilman tarvetta suoraan (eksplisiittiseen) synkronointiin (ei tarvita synchronization lausetta) Jos eri prosessorit toimivat täysin asynkronisesti ja eivät olisi homogeenisiä, lauseen S2 suoritusta pitäisi edeltää lause: synchronization d3, jolla varmistettaisiin, että riippuvuusvektorin d3 päässä oleva prosessori, ei aloita S2:n evaluointia, ennenkuin b:n arvo on laskettu riippuvuuden alkupäässä

Kuva 3.9 (i,j) silmukan runko: lauseet 1 ja 2

Liukuhihnoitusmuunnos hajauttaa silmukan itsenäiset osat eri prosessorien laskettavaksi ja ketjuttaa iteraatiot toisiinsa ajan suhteen Esim. do i = 1,n S1;S2;...;Sm Oletetaan, että riippuvuusgraafi tälle silmukalle on kuvan 3.10 kaltainen, eli kaikilla lauseilla on riippuvuus edellisen iteraation vastaavaan lauseeseen Liukuhihnoittamalla lauseiden suoritukset (kts. kuva 3.11 m = 3 ja N = 4) voidaan itsenäiset lausekkeet evaluoida eri prosessoreissa samanaikaisesti käyttämällä m kpl prosessoreita Tähän siis päästää hajauttamalla rakenteellisesti itsenäisesti suoritettavat lauseet eri prosessoreille ja liukuhihnoittamalla iteraatiot ajassa: silmukan suoritusaika on n (jokaisella aikayksiköllä lasketaan yksi iteraatio, jonka suoritus koostuu m:stä lauseesta tai vaiheesta )

Kuva 3.10: riippuvuudet esimerkissä 3.10

Edellisen esimerkin aika-avaruusdisgrammi käytettäessä DOACROSS muunnosta on esitetty kuvassa 3.11b Silmukan lauseet suoritetaan peräkkäin n:ssä prosessorissa Laskenta-aika tässä tapauksessa on n + m -1 Jos n on pieni ja m suuri liukuhihnoitus on merkittävästi nopeampi tapa kuin DOACROSS: tässä esimerkissä liukuhihnoitus ei myöskään vaadi prosessoreiden välistä kommunikointia

Kuva 3.11 riippuvuudet käytettäessä DOACROSS-muunnosta riippuvuudet käytettäessä liukuhihnoitusmuunnosta