S Rinnakkaislaskenta laskennallisessa tieteessä: Matriisilaskenta. Mika Prunnila S T

Samankaltaiset tiedostot
Numeeriset menetelmät

Johdatus tekoälyn taustalla olevaan matematiikkaan

BM20A0700, Matematiikka KoTiB2

Matriisit, L20. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

a b 1 c b n c n

Numeeriset menetelmät

Matriisilaskenta. Harjoitusten 3 ratkaisut (Kevät 2019) 1. Olkoot AB = ja 2. Osoitetaan, että matriisi B on matriisin A käänteismatriisi.

Rinnakkaistietokoneet luento S

3.1 Lineaarikuvaukset. MS-A0004/A0006 Matriisilaskenta. 3.1 Lineaarikuvaukset. 3.1 Lineaarikuvaukset

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 6 (8 sivua) OT. 1. a) Määritä seuraavat summat:

Numeeriset menetelmät

3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset

. Kun p = 1, jono suppenee raja-arvoon 1. Jos p = 2, jono hajaantuu. Jono suppenee siis lineaarisesti. Vastaavasti jonolle r k+1 = r k, suhde on r k+1

2.8. Kannanvaihto R n :ssä

Matriisit, L20. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

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

Matriisilaskenta (TFM) MS-A0001 Hakula/Vuojamo Ratkaisut, Viikko 47, 2017

Kokonaislukuoptimointi

Matematiikan tukikurssi, kurssikerta 3

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

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Ratkaisuehdotukset LH 7 / vko 47

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

Käänteismatriisin ominaisuuksia

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Matriisi-vektori-kertolasku, lineaariset yhtälöryhmät

Matriisit. Määritelmä 1 Reaaliluvuista a ij, missä i = 1,..., k ja j = 1,..., n, muodostettua kaaviota a 11 a 12 a 1n a 21 a 22 a 2n A =

Lineaariset kongruenssiyhtälöryhmät

Rinnakkaistietokoneet luento S

ax + y + 2z = 0 2x + y + az = b 2. Kuvassa alla on esitetty nesteen virtaus eräässä putkistossa.

Matriisit, kertausta. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

Luku 8. Aluekyselyt. 8.1 Summataulukko

9 Matriisit. 9.1 Matriisien laskutoimituksia

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

Ville Turunen: Mat Matematiikan peruskurssi P1 1. välikokeen alueen teoriatiivistelmä 2007

MS-C1340 Lineaarialgebra ja

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

Kurssin loppuosassa tutustutaan matriiseihin ja niiden käyttöön yhtälöryhmien ratkaisemisessa.

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

Matematiikka B2 - Avoin yliopisto

Numeeriset menetelmät

Alkulukujen harmoninen sarja

1 Kannat ja kannanvaihto

Rinnakkaistietokoneet luento S

Talousmatematiikan perusteet: Luento 11. Lineaarikuvaus Matriisin aste Käänteismatriisi

1.1. Määritelmiä ja nimityksiä

Insinöörimatematiikka D

Matematiikan tukikurssi

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

Talousmatematiikan perusteet: Luento 13. Rajoittamaton optimointi Hessen matriisi Ominaisarvot ja vektorit Ääriarvon laadun tarkastelu

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

MS-C1340 Lineaarialgebra ja

Latinalaiset neliöt ja taikaneliöt

Matematiikan tukikurssi

1. Mikä on lukujen 10, 9, 8,..., 9, 10 summa? 2. Mikä on lukujen 10, 9, 8,..., 9, 10 tulo? =?

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

802118P Lineaarialgebra I (4 op)

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 4 / vko 47

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

Lineaarialgebra a, kevät 2018

Matematiikan tukikurssi

Matematiikka B2 - TUDI

Mat Lineaarinen ohjelmointi

a 2 ba = a a + ( b) a = (a + ( b))a = (a b)a, joten yhtälö pätee mielivaltaiselle renkaalle.

Kokonaislukuoptiomointi Leikkaustasomenetelmät

Luento 5: Suurten lineaaristen yhtälöryhmien ratkaiseminen iteratiivisilla menetelmillä

Matematiikan tukikurssi

Ratkaisuehdotukset LH 10 / vko 48

Matriisilaskenta Laskuharjoitus 5 - Ratkaisut / vko 41

MAT Algebra I (s) periodilla IV 2012 Esko Turunen

(0 desimaalia, 2 merkitsevää numeroa).

Matriiseista. Emmi Koljonen

s = 11 7 t = = 2 7 Sijoittamalla keskimmäiseen yhtälöön saadaan: k ( 2) = 0 2k = 8 k = 4

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 3 /

Lineaarialgebra ja matriisilaskenta I

MS-A0204 Differentiaali- ja integraalilaskenta 2 (ELEC2) Luento 6: Ääriarvojen luokittelu. Lagrangen kertojat.

MS-A0205/MS-A0206 Differentiaali- ja integraalilaskenta 2 Luento 6: Ääriarvojen luokittelu. Lagrangen kertojat.

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 5 / vko 48

Johdatus tekoälyn taustalla olevaan matematiikkaan

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

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

1 Määrittelyjä ja aputuloksia

Lineaarialgebra ja matriisilaskenta I

Matriisilaskenta Luento 8: LU-hajotelma

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Yhteenlaskun ja skalaarilla kertomisen ominaisuuksia

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx

Tietorakenteet ja algoritmit - syksy

2.1.4 har:linyryhmat03. Octavella. Katso ensin esimerkit???? esim:yroctave01 Octaven antamat vastausehdotukset.

Insinöörimatematiikka D

Talousmatematiikan perusteet: Luento 9. Matriisien peruskäsitteet Yksinkertaiset laskutoimitukset Transponointi Matriisitulo

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1)

1. Lineaarialgebraa A := Matriisin osia voidaan muutella päivittämällä riviä, saraketta tai osamatriisia (Matlabmaisesti): B :=

Numeriikan kirjastoja

Koodausteoria, Kesä 2014

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:

Harjoitus 3 ( )

Koodausteoria, Kesä 2014

Malliratkaisut Demot

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

Transkriptio:

S-114.240 Rinnakkaislaskenta laskennallisessa tieteessä: Matriisilaskenta Mika Prunnila S4 44608T

Sisältö 1. Johdanto 2 2. Rinnakkais ohjelmointi ja rinnakkaiskoneet 2 3. Matriisien ja vektoreiden lohkominen rinnakkaislaskennassa 3 4. Valikoituja rinnakkaistettuja matriisi oeraatiota 4 4.1 Hajautetun muistin järjestelmä... 4 4.1.1 Matriisi-vektori tulo... 5 4.1.2 Matriisi tulo... 6 4.2 Yhteisen keskusmuistin järjestelmä... 8 4.2.1 Matriisi-vektori tulo... 8 4.2.2 Matriisi tulo... 9 5. Matriisi kirjastorutiineista 10 5.2 ScaLAPACK...10 5.3 PBLAS testiajoja...10 6. Yhteenveto 12 Viitteet 13 1

1. Johdanto Moni tieteellinen ongelma on joko suoranaisesti matriisi ongelma tai se voidaan alauttaa tällaiseksi esimerkiksi diskretoinnilla. Tästä johtuen matriisilasku algoritmit ovatkin selvästi erityisasemassa tietotekniikassa ja ne ovat yhä jatkuvan kehittämisen kohteena. Matriisi robleemoissa alkioiden määrä nousee helosti yli miljoonien, ja jotta laskenta voitaisiin suorittaa siedettävässä ajassa saatikka tutkia ratkaisujen erilaisia arametri riiuvuuksia, on järkevää turvautua rinnakkaislaskentaan. Tämä tuo huomattavia lisähaasteita itse mallintajalle: on huomioitava esim. latenssit sekä kuorman tasaus, jolloin rinnakkaistamisesta saadaan suurin mahdollinen hyöty. Tässä esitelmässä käydään läi muutamia rinnkkaistetun matriisi laskun erusasioita. Teksti on ääosin referoitu Gene H. Golubin ja Chrles F. Van Loanin kirjan Matrix Comutations luvusta 6. Myös muita lähteitä on käytetty, mutta näihin ei itse tekstissä muutamaa oikkeusta lukuun ottamatta viitata. Kaale kohtaiset viitteet on kuitenkin annettu tekstin loussa. (Golub ja Loan käyttävät kirjassaan hyväksi matlabin notaatioita vektoreiden ja matriisien määrittelyissä sekä algoritmeissa, ja näitä notaatioita hyödynnetään myös tässä esityksessä.tekstin seuraaminen edellyttää siis erus matlab osaamista) 2. Rinnakkais ohjelmointi ja rinnakkaiskoneet Rinnakkaislaskennassa ohjelmointimallit voidaan jakaa kolmeen ryhmään : - jaetun keskusmuistin ohjelmointimalli - viestin välitykseen erustuva ohjelmointi - datarinnakkainen ohjelmointi. Tässä työssä käsitellään lähinnä kahta ensiksi mainnittua mallia. Ohjelmointi mallien lisäksi myös rinnakkaistietokoneet voidaan jakaa eri tyyeihin (kts kuva 2.1): - SMP-tietokone (symmetric multirocessor): rosessoreilla yhteinen keskus muisti - MPP-tietokone (massively arallel rocessor): rosessoreilla on omat hajautetut keskusmuistit Rinnakkaiskoneen tyyin ei kuitenkaan välttämättä tarvitse vastata käytettyä ohjelmointimallia. 2

Kuva 2.1. Rinnakkaislaskennan arkkitehtuureja Jaetun muistin järjestelmissä rosessorit kommunikoivat lukemalla ja kirjoittamalla globaaleja muuttujia, jotka sijaitsevat yhteisessä (globaalissa) keskusmuistissa. Jokainen rosessori kuitenkin suorittaa omaa lokaalia ohjelmaansa, joka uolestaan sijaitsee kyseisen rosessorin lokaalissa muistissa. Hajautetun muistin järjestelmissä rosessorien välinen kommunikointi on järjestetty rosessorien välisellä viestinnällä. 3. Matriisien ja vektoreiden lohkominen rinnakkaislaskennassa Rinnakkaisalgoritmien kannalta on oleellista miten data jaetaan rosessorieiden lokaalien muistien kesken. Datan sijoittelu on erityisen tärkeää kuorman tasauksen kannalta. Tarkastellaan ensin vektoreita. Oletetaan, että x R n ja että rosessorien määrälle ätee n = r. x voidaan jakaa rosessoreille riveittäin tai sarakkeittain: Sarake jaossa x ajatellaan r matriisina, [ x( 1: r) x( r + 1: 2r) x(1 + ( 1) r n] x r = :, ja jokainen sarake annetaan eri rosessorille. Rivi jaossa x ajatellaan uolestaan r matriisina, x [ x( 1: ) x( + 1: 2 ) x(( r 1) 1: n) ] r = +. Nyt x jaetaan riveittäin rosessoreille. Vastaavasti nämä jaetaan tylillisesti jatkuvaan ja jaettuun (wra). Jos n ei ole :n moninkerta eli, n = r + q (0 q < ),niin rosessoreista 1 q tallettaa jokainen r+1 alkiota ja rosessorit q+1 tallettavat r alkiota. Matriisit voidaan tallettaa vastaavalla tavalla kuin vektorit. Taulukossa 1. löytyy neljä taaa tallettaa neliö matriisi A R n n, ja näille jokaiselle löytyy analoginen lohko tallennus. Matriiseille löytyy myös ns. 2D syklinen lohko tallennus (kuva 3.1), jota käyttää esim. ScaLAPACK kirjasto. Tämä jako taa takaa erittäin hyvän skaalautuvuuden ja kuormantasauksen. 3

Suunta Tyyli Prosessorin µ data Sarake Jatkuva A(:, 1+(µ-1)r:µr) Sarake Jaettu A(:,µ::n) Rivi Jatkuva A(1+(µ-1)r:µr, :) Rivi Jaettu A(µ::n,:) Taulukko 1. Erilaisia neliö matriisin A R n n jako taoja. Kuva 3.1. Syklinen 2D lohkojako 5 5 matriisille 2 2 rosessori hilassa 4.Valikoituja matriisi oeraatioita rinnakkaislaskennassa 4.1 Hajautetun muistin järjestelmä Hajautetun muistin järjestelmissä voi olla joa useita tuhansia rosessoreita, jolloin rosessoreiden välisestä kommunikaatiosta aiheutuvat viiveet ovat laskenta tehoa rajoittava tekiä. Tämän takia algoritmit yritäänkin toteuttamaan siten, että vain lähi naaurit kommunikoivat keskenään. Viestien välitykseen kuluvaa aikaa τ voidaan kuvata yksinkertaisella mallilla, jossa viestit lähetetään send({matriisi}, {vastaanottan rosessorin numero}) funktiolla ja vastaanotetaan recv({matriisi}, {lähettävän rosessorin numero}) funktiolla. Jos edellä mainittujen funktioden alustus vie ajan t s ja yhden liukuluvun siirto ajan t d, kuluu viestiin joka sisältää m liukulukua aika τ(m) = t s + t d m. (4.1) Seuraavaksi esitellään viestinvälitykseen erustuvat matriisi ja matriisi-vektori tulo. Viesteihin kuluvaa aikaa arvioidaan käyttämällä kaavaa (4.1). 4

4.1.1 Matriisi-vektori tulo Tarkastellaan matriisioeraatiota z = y + Ax (A R n n, x,y,z R n ) rengasmaisessa rosessori geometriassa. Oletetaan yksinkertaisuuden vuoksi, että n = r, ja jaetaan ongelma lohko muotoon z z 1 y = y 1 A + A 11 1 A A 1 x x 1, (4.2) missä A ij R r r ja x i, y i, z i R r. Oletetaan vielä, että x µ, y µ, z µ ja A:n µ:s lohko rivi sijaitsevat µ:nnen rosessorin lokaalissa muistissa. Nyt µ:nnen rosessorin tulee tehdä laskutoimitus z = y + µ µ µτ τ, τ = 1 A x joka sisältää muutakin kuin lokaalia dataa. Jotta ei-lokaali data saadaan kunkin rosessorin ulottuville, kierrätetään lohko vektoreita x i renkaan ymäri (kuva 4.1). Kuva 4.1. Lohko vektoreiden x i syklinen kierto rengas geometriassa. Oletetaan nyt, että rosessorissa µ on olemassa lokaalit alustukset:, µ, left ja right (lähinaaurit), n, row=1 + (µ-1)r:µr, A loc =A(row,:), x loc = x(row), y loc = y(row), jolloin algoritmia voidaan kuvata seudo koodilla: for t = 1: send(x loc, right) recv(x loc, left) τ = µ - t if τ 0 τ = τ + end y loc = y loc + A loc (:, 1 + (τ - 1)r: τr) x loc end Jos laskenta etenee noeudella R liukulukuoeraatiota/s (flos/s), saadaan k:n rosessorin vaatimalle laskenta-ajalle T(k) arvio 5

2 2n T ( k) = + 2t sk + 2t d n, (k>1). Rk Jos k=1, on kommunikaatio tareetonta ja T(k) = 2n 2 /R. Matriisin A ollessa esimerkiksi alakolmio matriisi tulee edellä kuvattuun algoritmiin aljon nollalla kertomisia ja summaamisia. Nämä turhat laskutoimitukset oistuvat, jos y loc äivitetään seuraavasti, if τ µ y loc = y loc + A loc (:, 1 + (τ - 1)r: τr) x loc end. Nyt laskutoimitusten määrä uolittuu, mutta kuorma jakautuu eätasaisesti rosessorien kesken: rosessori µ joutuu tekemään noin µr 2 /2 laskutoimitusta. Kuormantasaus ongelma voidaan ratkaista jakamalla matriisi riveittäin rosessoreille, eli käyttämällä taulukon 1. taaa 4. (lohko muodossa) datan talletukseen. Vieläkin laskutoimitusten määrä kasvaa µ:n kasvaessa, mutta alkueräiseen tilanteeseen verrattuna kuorma jakautuu huomattavasti tasaisemmin.yleinen algoritmi voidaan toteuttaa indeksi maniulaatiolla, mutta edellä kuvattu algoritmi säilyy hyvin saman kaltaisena. 4.1.2 Matriisi tulo Valitaan rosessori geometriaksi 2D torus (kts. kuva 4.2), ja tarkastellaan matriisi oeraatiota D = C + AB, missä A, B, C R n n. Oletetaan, että toruksessa on 1 1 rosessoria ja että n = r 1. Tällöin matriisit voidaan jakaa r r blokkeihin, eli toruksen rosesori (i,j) tallettaa lokaaliin muistiinsa lohko matriisit A ij, B ij, C ij ja D ij (A ij,c ij,d ij R r r ). Nyt rosessorin (i,j) tehtävänä on kirjoittaa yli C ij laskutoimituksella 1 D = C + A B. (4.3) ij ij k = 1 ik kj Kuten matriisi vektori tulon taauksessa tässäkin oeraatiossa tarvitaan aljon ei-lokaalia dataa, ja rosessoreiden kommunikaatiosta on jälleen huolehdittva. Lohko matriisien siirrot voidaan tehdä liu-uttamalla matriiseja A ja B toruksessa syklisesti siten, että A:n alkiot liikkuvat länteen ja B:n ohjoiseen. Tällöin ideana on, että jokainen rosessori saa laskettua yhtälössä (4.3) esiintyvän summan niin, että sen muistissa on aina vain kumuloituva tulos D ij sekä kaksi lohkomatriisia A ik ja B kj. Kun tulo A ik B kj on laskettu ja summattu lähetetään matriisit eteenäin (A ik länteen, B kj etelään) ja vastaan otetaan uudet lohko matriisit (A im idästä, B mj etelästä). Tätä kutsutaan Cannonin algoritmiksi. Algoritmin toteutus vaati kuitenkin lohko matriisien syklistä uudelleen sijoittelua toruksessa: A:n n:ttä riviä on siirrettävä n-1 rosessoria itään ja B:n n:ttä saraketta siirretään n-1 rosessoria etelään. Kuvassa 4.3 on esitetty algoritmin toiminta taauksessa 1 = 3. Kuva sarjasta voidaan todeta, että rosessorin (i,j) kohtaavat vain lohkot A ik ja B kj, k =1,2,3. 6

Kuva 4.2. 4 4 2D torus. T=0 t=2 A 11 B 11 A 12 B 22 A 13 B 33 A 13 B 31 A 11 B 12 A 12 B 23 A 22 B 21 A 23 B 32 A 21 B 13 A 21 B 11 A 22 B 22 A 23 B 33 A 33 B 31 A 31 B 12 A 32 B 23 A 32 B 21 A 33 B 32 A 31 B 13 T=1 t=3 A 12 B 21 A 13 B 32 A 11 B 13 A 11 B 11 A 12 B 22 A 13 B 33 A 23 B 31 A 21 B 12 A 22 B 23 A 22 B 21 A 23 B 32 A 21 B 13 A 31 B 11 A 32 B 22 A 33 B 33 A 33 B 31 A 31 B 12 A 32 B 23 Kuva 4.3. Lohkojen kulku 3 3 toruksessa. Jos oletetetaan, että laskennan alkaessa rosessori (i,j):llä on muistissaan kerrottavien matriisien lohkot (i,j) saadaan laskentaan kuluvaksi kokonaisajaksi k:lla rosessorilla (laskenta noeus R flos/s) T(k) = 2(k-1)(t s + (n 2 /k)t d ) + 2n 3 /(Rk). Laskennan jälkeen lohko matriisit eivät ole oikeilla rosessoreilla toruksessa, vaan on tehtävä alustuksena tehdyt sykliset siirrot takaeroisessa järjestyksessä. Tämä vie ajan (k-1)(t s + (n 2 /k)t d ), joka on lisättävä aikaan T(k). Algoritmia voidaan arantaa huomattavasti käyttämällä utkitettua broadcast viestintää. Näin on tehty esimerkiksi SUMMMA (Scalable Universal Matrix Multilication Algorithm) algoritmissa, jota on käytetty esim. joissain matriisi aliohjelma kirjastoissa. 7

4.2 Yhteisen keskusmuistin järjestelmä Yhteisen keskusmuistin rinnakkaisarkkitehtuureissa väylän kaasiteetti ja rosessorien lokaali muisti yhdessä rajoittavat laskennan tehokkuutta, ja väylän noeus asettaa ylärajan rosessorien määrälle. Jos ohjelmaa ajetaan MPPtietokoneessa, rajoitukset ovat luonnollisesti erilaisia. Datan siirto lokaalien ja globaalin muistin välillä sekä globaalien muuttujien äivitykset täytyy tehdä huolellisesti. Nämä toimeniteet täytyy ajastaa dynaamisesti, sillä muuten saattaa käydä niin, että esim. jotkut globaalien muuttujien äitykset yyhkiytyvät yli. Tutkitaan jälleen erus matriisioeraatioita, ja havainnollistetaan globaalien muutujien äivitystä sekä kuormantasausta. 4.2.2 Matriisi vektori tulo Oletetaan edelleen, että n = r, ja muutetaan oeraatio z = y + Ax lohko muotoon: z z y = y 1 1 1 A + x, (4.4) A missä A µ R r n ja y µ, z µ R r sekä x R n. Nyt A, x ja z sijaitsevat globaalissa muistissa, jota kaikki rosessorit voivat lukea ja kirjoittaa. Nyt laskenta voidaan toteuttaa yksinkertaisesti siten, että rosessori µ ensin lukee y µ :n, A µ :n ja x:n lokaaliin muistiinsa ja tämän jälkeen laskee kaavan (4.4) rivin µ ja äivittää tuloksen yhteiseen muistiin. Algoritmin noeuteen vaikuttaa oleellisesti se miten A µ luetaan yhteisestä keskusmuistista. Ongelman voi jakaa lohkoihin myös toisella tavalla x1 z = y + [ A1 A ], (4.5) x missä A µ R n r, x µ R r ja y,z R n. Laskenta voidaan toteuttaa esimerkiksi käyttämällä globaalia taulukkoa W R n, jonka ysty vektoreihin talletetaan lohko tulot A µ x µ. Kun kaikki lohko tulot on laskettu, voidaan laittaa esim. yksi rosessori laskemaan W:n sarakkeet yhteen. Toinen vaihtoehto on antaa kunkin rosessorin huolehtia vektori summan äivityksestä. Jos nyt algoritmi kirjoitetaan niin, että z kirjoitetaan y:n äälle, voi joidenkin rosessorien kontribuutio vektori summaan kirjoittua yli. Tästä ongelmasta äästään, jos rosessori µ suorittaa laskennan esimerkiksi seuraavasti: 8

r = n/; col = 1 + (µ-1)r: µr; A loc = A(:, col); x loc = x(col); w loc = A loc x loc ----------- y loc = y y loc = y loc + w loc y = y loc ----------- missä katkoviivoin rajoitetun osan voi suorittaa vain yksi rosessori kerrallaan. Jos näin ei menetellä, voi ohjelmassa taahtua esimerkiksi suoritus Prosessori 1 lukee y:n Prosessori 2 lukee y:n Prosessori 1 äivittää y:n Prosessori 2 äivittää y:n, jossa rosessori 1:n kontribuutio vektorisummaan häviää. 4.2.2 Matriisi tulo Olkoon laskettavana D = C + AB kohdan 4.1.2 taaan sillä oikkeuksella, että B on yläkolmio matriisi. Jaetaan matriisit jälleen lohko muotoon :n rosessorin kesken: [ D, D ] = [ C,, C ] + [ A,, A ] [ B,, B ] 1, k 1 k 1 k 1 k (4.6) missä jokaisen lohkon koko on r = n/(k). Merkitään B1 j B jj B j =, B ij R r r, 0 0 jolloin D j voidaan laskea seuraavasti: D j = C j + j τ = 1 A ik B τ j. (4.7) D j :n laskemiseen tarvittavien liukulukuoeraatioiden määrä on 3 j 2n f j nr j k = 2 =, 2 2 joka kasvaa j:n funktiona. Kuorma siis jakautuu eätasaisesti. Kohdassa 4.2.1 saatiin kuormantasaus aikaan käyttämällä jaettua datan sijoittelua rosessoreille, ja tässä 9

voidaan menetellä vastaavalla tavalla. Asetetaan rosessori µ siis laskemaan D j j:n arvoilla j = µ::k, jolloin sen tarvitsee tehdä k 2 3 k 2n F( ) f ( i 1) k 2 i 1 2 µ = µ + µ + = k liukuluoeraatiota. Kuorman tasauksen mittana voidaan käyttää suhdetta F()/F(1). Koska F(µ) 2( 1) = 1 +, F(1) 2 + k laskenta työ jakaantuu sitä tasaisemmin mitä suuremi k on. On kuitenkin huomioitava, että globaalin muistin ja rosessorien välinen kommunikaatio kasvaa k:n kasvaessa. Eli latenssien ollessa suuria suuren k:n valinta saattaa loulta hidastaa laskentaa. 2 5. Matriisi kirjastorutiineista 5.1 ScaLAPACK LAPACK (Linear Algebra PACKage) kirjastolle löytyy rinnakkaistettu versio ScaLAPACK (Scalable LAPACK), joka on suunniteltu hajautetun muistin MIMD tietokoneille. Se on kirjoitettu SPMD-ohjelmointityylillä (Single Program, Multile Data), ja kuten jo aiemmin mainittiin ScaLAPACK:issa oletetaan, että matriisit ovat jaettu sykliseen 2-dimensionaaliseen lohko muotoon (kts kuva 3.1). ScaLAPACKin rakennusalikoita ovat BLAS kirjaston (Basic Linear Algebra Subrograms) rinnakkaistetun version PBLAS (Parallel BLAS) funktiot. Prosessorien välisestä viestien välityksestä huolehditaan BLACS funktioiden (Basic Linear Algebra Communication Subrograms) avulla. ScaLAPACK on yritty rakentamaan siten, että se muistuttaa käyttäjän kannalta mahdollisimman aljon LAPACK:ia. 5.2 PBLAS testiajoja PGEMM on PBLAS-rutiini, joka suorittaa matriisi kertolaskun käyttämällä SUMMAa vastaavaa algoritmia. Seuraavaksi tarkastellaan CSC:n 3TE:llä tälle tehtyjen testiajojen tuloksia (Yrjö Leino, @CSC 3/97). Ensimmäisessä testisarjassa tutkitaan matriisin koon vaikutusta laskentaaikaan, ja rosessorien lukumäärä (8 8 hila eli 64 rosessoria) idetään vakiona. Matriisilohkolle on käytetty kahta arvoa: n=25 ja n=250. Kuvassa 5.1 on esitetty ajon tulokset. Isolla lohkokoolla laskenta-aika oskilloi hieman, kun taas ienellä lohkolla kasvu on lineaarista. Oskillaatio johtuu yksinkertaisesti siitä, että lohkot eivät jakaannu tasaisesti hilaan, jos matriisin koko ei ole jaollinen luvulla 2000. Pienimmällä matriisin koolla N = 1000 vain 4 4 hila rosessoreista on työllistettynä n=250 jaolla, mistä aiheutuu kuvaajassa nähtävä melko suuri ero n=25 jakoon verrattuna. 10

Kuva 5.1. Laskenta-aika matriisin koon funktiona Toisessa testisarjassa matriisin koko (N=1000) ja rosessorimäärä (4 4) idetään vakiona, jolloin äästään tutkimaan kuorman tasauksen vaikutusta laskentaaikaan iirtämällä laskenta-aika lohkokoon funktiona. Testin tulos on esitetty kuvassa 5.2. Kuvaajan minimit löytyvät kohdista, joissa kuorma jakaantuu mahdollisimman tasaisesti hilaan. Näin käy, jos 1000/4n on jokin kokonaisluku, eli jos n = 250, 125, 50, 25, 10, 5, 2, 1. Näistä neljä ensimäistä voidaan aikantaa kuvasta 5.2, mutta kun n< 25 alkaa laskenta-aikaa hallitsemaan rosessorien välinen viestintä. Voimakas iikki arvolla n = 200 aiheutuu kuorman eätasauksesta: N/n = 1000/200 = 5 ja hilassa on 4 4 rosessoria, eli hilan ensimmäiselle rosessorille tulee 4 lohkoa, ensimmäisen rivin ja sarakkeen muille rosessoreille 2 lohkoa ja 9 rosessorille vain 1 lohko. Kun n lähestyy arvoa 333 tekee työn oleellisesti vain 9 rosessoria, mistä aiheutuu loiva maksimi käyrän loussa. 11

Kuva 5.2. Laskenta-aika lohkokoon funktiona. Viimeisessä testisarjassa tutkitaan skaalautuvuutta. Nyt matriisin koko idetään vakiona, ja rosessori määrää kasvatetaan. Kuvassa 5.3 olevan sovitetun suoran kulma kerroin on hyvin lähellä arvoa 1. PGEMM skaalautuu siis lähes ideaalisesti. 6. Yhteenveto Matriisi laskut ovat eräkkäisen ohjelmoinnin oikirja taauksia ja sama tuntuu ätevän myös rinnakkaisohjelmoinnissa. Suurten ongelmien tehokas ratkaisu edellyttää kuitenkin monien asioiden, kuten viestinvälityksen ja kuormantasauksen, huolellista tarkastelua. Etenkin tiheiden matriisien taauksessa tarvitaan aljon viestintää, ja laskenta saattaa muuttua tehottomaksi ellei viestintä kustannuksia otimoida. Koska on jo olemassa tehokkaita matriisi aliohjelmakirjastoja, on kyseenalaista kannattaako itse ainiskellä näiden ongelmien kanssa, etenkään jos matriisi laskut ovat elkkä mallinnuksen työkalu. On kuitenkin syytä olla erillä eruseriaatteista ja rajoittavista tekijöistä, jotta ystyisi mahdollisimman hyvin hyödyntämään näitä kirjastoja. 12

Kuva 5.3. Laskenta-aika rosessorimäärän funktiona Viitteet Luku 2. Luvut 3-4. Juha Haataja ja Kaj Mustikkamäki, Rinnakkaisohjelmointi MPI:llä (Ylioistoaino, Helsinki, 1997). (luku 1) Gene H. Golubin ja Chrles F. Van Loanin, Matrix Comutations (The John Hokins University Press,London, 1996). (luku 6) Barry Wilkinson, Michael Allen, Parallel Programming : Techniques and Alications Using Networked Workstations and Parallel Comuters, Prentice Hall, 1998. (luku 10) Robert van de Geijn and Jerrell Watts, SUMMA: Scalable Universal Matrix Multilication Algorithm, Deartment of Comuter Sciences, The Unversity of Texas, TR-95-13, Aril 1995. Also: LAPACK Working Note #96, May 1995. Luku 5. ScaLAPACK Home Page: htt://www.netlib.org/scalaack/scalaack_home.html Yrjö Leino. Huimia matriisikertolaskuja T3E:llä, @CSC 3/97, s. 31 13