Johdatus rinnakkaislaskentaan Markus Inkeroinen Optimointiryhmän seminaari 9.2.2004 0
MITÄ ON RINNAKKAISLASKENTA? 1
A parallel computer is a set of processors that are albe to work cooperatively to solve a computational problem, Ian T. Foster. Rinnakkaisohjelmoinnin avulla voidaan laskentatehtävä jakaa useammaksi osatehtäväksi suoritettavaksi usealla prosessorilla. Näin laskutehtävän ratkaisemiseen kuluvaa seinäkelloaikaa voidaan usein merkittävästi lyhentää, Juha Haataja, Jari Järvinen ja Yrjö Leino (CSC). "Sequential programming is only the expression of our inability to transfer the natural parallelism of the world to a machine," Craig C. Douglas, Gundolf Haase and Ulrich Langer. 2
MIHIN RINNAKKAISLASKENTAA KÄYTETÄÄN? 3
-Sää- ja ilmastomallit -Teollisuusprosessien simuloiminen -Mekaniikka ( törmäyskokeet ) -Kuvankäsittely, viihdeteollisuus -Suurien tietomäärien käsittely (data mining) -Laskennallinen tiede (molekyylimallit, virtauslaskenta,...) -Keinotodellisuus... 4
MIKSI RINNAKKAISLASKENTAA KÄYTETÄÄN? 5
-Laskut kestävät muuten hyvin kauan -Laskut kestävät liian kauan -Tarvitaan paljon muistia -Helpompi, halvempi? 6
RINNAKKAISKONEIDEN LUOKITTELU 7
Luokittelu muistin mukaan -Karkealla jaolla on kahdenlaisia rinnakkaiskoneita -SMP-tietokone (symmetric multiprocessor): prosessoreilla yhteinen keskusmuisti. (Shared Memory, jaetun muistin koneet, yhteisen muistin koneet.) -MPP-tietokone (massively parallel prosessors): prosessoreilla omat hajautetut keskusmuistit. (Distributet Memory, hajautetun muistin koneet.) 8
SMP-tietokone 9
-Prosessoreilla yhteinen muisti SMP-tietokone -Prosessoreja yleensä vähän (Josefissa 8 prosessoria) -Kommunikointi muistin välityksellä -Helppo ohjelmoida -Helppo tehdä ei-determististä koodia -Peräkkäisohjelma (sequential code) helppo rinnakkaistaa askel askeleelta -Skaalautuu hyvin pienillä prosessorimäärillä, suurilla muistin käyttö pullonkaulana -Kallista tekniikkaa 10
SMP-tietokone UMA (Uniform Memory Access): Kaikki prosessorit käyttävät (lukevat/kirjoittavat) koko muistia yhtä nopeasti. (Välimuistia ei huomioida.) NUMA( Non Uniform Memory Access): Muistin käyttöön kuluva aika riippuu prosessorin sijainnista. DMS (Distributed Shared Memory), Virtual Shared Memory: Koko muisti hajautettu fyysisesti prosessorien kesken, mutta sitä voidaan käyttää kuten yhteistä muistia. esim. Cray T3D 11
MMP-tietokone -Jokaisella prosessorilla oma muisti -Kommunikointi viestinvälityksen avulla -Mahdollisuus hyvin skaalautuviin ohjelmiin (parempi kuin SMP-koneissa) -Peräkkäisohjelman rinnakkaistaminen hankalaa (ei asteittain) -Laskennan ja kommunikoinnin välinen suhde merkittävä - Halpaa tekniikkaa 12
MPP-tietokone 13
Klusteriarkkitehtuuri Prosessorit muodostavat solmuja (node), joissa yhteinen muisti. Solmut kommunikoivat viestinvälityksen avulla. esim. IBM SP 10 solmua, jokaisessa 4 prosessoria, (Agora). IBM SC 16 solmua, jokaisessa 32 prosessoria. Solmuissa sisäinen rakenne, (CSC, Espoo). Terascale GRID Computers Laskentakeskukset muodostavat jättimäisen laskentaverkon. Nopeat yhteydet. Tietosuojaongelmat? 14
Rinnakkaisohjelmoinnin mallit 15
Ohjelmointimallit ja standardit: (Ville Savolainen, CSC) -Viestinvälitys (MPI-kirjasto) -Yhteisen muistin mallit (OpenMP) -Hajautetun ja yhteisen muistin hybridimalli (MPI ja OpenMP) -Datarinnakkainen malli (HPF) -Yksisuuntainen datanvälitys (SHMEM) -Säikeet(pthreads) - OpenMP käyttää Lähde: http://www.csc.fi/suomi/koulutus/openmp/ 16
Viestinvälitys -Nykyisin yleisin rinnakkaisohjelmointimalli -Tavallisesti ohjelma standardia FORTRAN 77, Fortran 90/95 tai C/C++ -koodia -Jokaisella prosessilla omat yksityiset muuttujansa -Kommunikointi kutsumalla viestinvälityskirjaston aliohjelmia -Yleensä jokainen prosessori ajaa samaa ohjelmaa, SPMD-malli (Single Program Multiple Data) -Käyttämällä prosessien tunnisteita (identifier, ID, whoami) saadaan eri prosessit ajamaan eri osia yhteisestä ohjelmakoodista 17
Yhteisen muistin malli (Shared memory) -Kaikilla tehtävillä yhteinen muistiavaruus -Kommunikointi muistin kautta -Jako yhteisiin (shared) ja yksityisiin muuttujiin (private) -Muistinkäytön hallinta (lukot ja direktiivit OpenMP:ssä) -Helppo ohjelmoida, helppo tehdä virheitä 18
Datarinakkainen malli (Data parallel) -Käytetään omaa ohjelmointikieltä, yleensä Fortranin tai C-kielen laajennus. -Kommunikointi ja suorituksen koordinointi eivät näy ohjelmoijalle (ei pääse vaikuttamaan). -Monesti ohjelmoijalle jää pelkästään datanjako, helppo ohjelmoida. 19
Rinnakkaisohjelman suunnittelu Lähde: Designing and Building Parallel Programs, Ian T. Foster. 20
Hyvältä rinnakkaisalgoritmilta ja -ohjelmalta vaadittavia ominaisuuksia: - Rinnakkaistuvuus (concurrency). Tehtäviä on pystyttävä suorittamaan yhtäaikaisesti. - Skaalautuvuus (scalability). Algoritmin/ohjelman tulee skaalautua automaattisesti prosessorimäärän muuttuessa. - Lokaalisuus (locality). Prosessien tulee käyttää mahdollisimman paljon lokaalia (omaa) muistia ja vähän etäistä (remote) muistia. - Modulaarisuus (modularity). Ohjelma tulisi pystyä jakamaan pienempiin osiin. HUOM! Hyvä peräkkäisalgoritmi ja hyvä rinnakkaisalgoritmi samalle tehtävälle voivat olla hyvinkin erilaisia. 21
PCAM-malli 1. Laskentatehtävän jakaminen (alkeis)tehtäviin (task) (Partitioning). - Laskentatehtävä ja/tai siihen käytettävä data jaetaa suureeen määrään osatehtäviä. - Pyritään mahdollisimman suureen rinnakkaistuvuuteen. 2. Viestintä (Communication). - Määritellään tehtävien suorittamiseen vaadittava tehtävien välinen viestintä ja sen rakenne. 3. Yhteenliittäminen (Agglomeration). - Tarkastelu siirtyy tehokkuuden saavuttamiseen. - 1. kohdassa luotuja osatehtäviä kasataan yhteen paremman tehokkuuden saavuttamiseksi. 22
4. Tehtävien jakaminen prosesoreille (Mapping). - Tehtävät jaetaan prosessorien kesken mahdollismman tehokkaalla tavalla. HUOM. Yleensä SPMD-ohjelmat antavat luoda vain yhden prosessin prosessoria kohden, joten tämä on huomioitava kohdassa 3. Kohdissa 1 ja 2 pyritään rinnakkaistuvuuteen ja skaalautuvuuteen. Kohdissa 3 ja 4 tavoitteena on tehokkuuden lisääminen esim. lisäämällä lokaalisuutta. Mallia ei tule käsittää lineaariseksi. 23
TYÖNJAKAMINEN 24
Trivial Parallelism, nolo rinnakkaistaminen - Yksinkertaisin työnjakamismenetelmä. - Ajetaan samaa peräkkäiskoodia usealla prosessorilla samanaikaisesti. Parametrien lähtöarvot erilaiset. - Ei tarvita prosessorien välistä viestintää. - Ei auta isoissa tehtävissä. 25
Functional Decomposition 26
Functional Decomposition - Pitää varmistaa, että osatehtävät ovat yhtä isoja. - Startup ja shutdown -kustannukset. - Huono skaalautuvuus. - Yleensä helppo määritellä tarvittava viestintä. - Sopii vain osalle tehtäviä. 27
Isäntä-renki malli (Master Slave, Task Farms) 28
Isäntä-renki malli - Helppo ohjelmoida. - Dynaaminen -> kuormantasaus helppoa. - Laskennan lopettamisessa voi olla tyhjäkäyntiä. - Osatehtävien pitää olla toisistaan riippumattomia. - Isäntä voi muodostua pullonkaulaksi. - Vaatii paljon viestintää. 29
Aluejakomenetelmä (Domain Decomposition) 30
Aluejakomenetelmä - Jaetaan osa-alueet prosessorien kesken. - Voidaan hyödyntää virtuaalitopologiaa. - Jaon ei tarvitse olla säännöllinen. - Vaatii usein tiedon vaihtamista (naapuri)prosessorien kesken. - Viestinnän suunnittelu voi olla hankalaa. 31
Aluejakomenetelmä DO WHILE(.NOT.convergent) DO j=1,n DO i=1,n B(i,j)=0.25*( A(i-1,j)+A(i+1,j)+A(i,j-1)+A(i,j+1) ) END DO END DO DO j=1,n DO i=1,n A(i,j)=B(i,j) END DO END DO! convegence test END DO 32
Aluejakomenetelmä 33
VIESTINTÄ 34
Kahden välinen viestintä, (Point-to-Point) Kun vaihdetaa dataa kahden prosessin välillä niin viestintään kuluu aikaa arviolta t com = t s + mt w, missä t s on latenssiaika (startup time), m on viestin pituus, t w on sanaa kohti tarvittava aika. 35
Kollektiivinen viestintä Esim. One-to-All Brodcast t com = (t s + mt w ) log 2 p, p on prosessorien lukumäärä. 36
TEHOKKUUS 37
Relative Parallel Speedup S p (n) = T (n, 1) T (n, p), missä n=tehtävän koko, p=prosessorien lukumäärä, T (n, p)=p:llä prosessorilla tehtävän suorittamiseen kuluva aika. CSC:n vaatimus: Nopeuden pitää kasvaa 50% kun prosessorien lukumäärä kaksinkertaistuu. 38
Total (absolute) Speedup S p (n) = T best(n, 1) T (n, p), missä T best (n, 1) on parhaan tiedossa olevan peräkkäisohjelman suoritusaika. Parallel Relative Efficiency E p (n) = S p(n) p = T (n, 1) pt (n, p). 39
Suoritusaika (s): MPI:llä rinnakkaistettu liittogradienttimenetelmä n/p 1 2 4 64 0.0128237 0.0148795 0.0133744 256 0.0786092 0.0424649 0.0310696 1024 1.7684364 0.5866756 0.3191068 2048 7.2565519 3.6934085 2.0111091 4096 29.3729902 14.653452 7.6143538 Speedup: n/p 2 4 64 0.8618 0.9588 256 1.8512 2.5301 1024 3.0143 5.5418 2048 1.9647 3.6082 4096 2.0045 3.8576 40
41
Message Passing Interface - MPI 42
MPI - Viestinvälityskirjasto. - SPMD-ohjelmointitapa. - Suosituin työkalu tieteellisessä laskennassa. - Sovittu standardi. - Toimii heterogeenisessa ympäristössä. - Versiot MPI-1 ja MPI-2. - Kielenä C/C++ tai Fortran. 43
MPI:n ominaisuuksia - Monipuolinen kahdenvälinen viestintä. - Paljon kollektiivisia operaatioita. - Ryhmäviestintä on joustavaa ja nopeaa ohjelmoida. - Laskentatopologoita voi luoda tarpeen mukaan. - Omia tyyppejä voi määritellä ja välittää. 44
MPI MPI-1 sisältää yli 120 rutiinia, mutta kuudella voi ohjelmoida (melkein) kaiken. MPI_INIT MPI_COMM_SIZE MPI_COMM_RANK MPI_SEND MPI_RECV MPI_FINALIZE Rinnakkaisohjelmointi MPI:llä on helppoa. Kannattaa kokeilla! 45
OpenMP -Open Multi Processing 46
OpenMP - Jaetun muistin koneiden teollisuusstandardi. - Koostuu kääntäjädirekdiiveistä, kirjastorutiineista ja ympäristömuuttujista. - Direktiiveihin voidaan lisätä tarkentimia (clauses). - Kielenä C/C++ tai Fortran. - Mahdollistaa sekä suurijakoisen (coarce grain ) että hienojakoisen (fine grain ) rinnakkaistamisen. - On mahdollista kirjoittaa koodi siten, että se toimii sekä rinnakkaisohjelmana että peräkkäissohjelmana ilman OpenMP:tä. - Mahdollistaa astettaisen rinnakkaistamisen. 47
OpenMP - Direktiivin tunniste:!$omp - Ehdollisen kääntämisen tunniste:!$ - Rinnakkaisalue muodostetaan direktiiviparilla!$omp PARALLEL!$OMP END PARALLEL. - Ennen ja jälkeen rinnakkaisaluetta ohjelmaa suorittaa yksi säie. - Rinnakkaisalueen alussa muodostetaan ryhmä säikeitä. - Muuttujat joko yhteisiä (shared) tai säikeen yksityisiä (private). (- OpenMP-koodin testaaminen syö hermoja. :) 48
OpenMP 49
Materiaalia Efficient and Accurate Parallel Genetic Algorithms, by Erick Cantu- Paz. A tutorial on Elliptic PDE Solvers and their Parallelization, by Douglas, Haase and Langer. TOP500 SUPERCOMPUTER SITES: http://www.top500.org/ Introduction to Parallel Computing, by Ananth Grama, Anshul Gupta, George Karypis ja Vipin Kumar. Designing and Building Parallel Programs, by Ian Foster. http://www-unix.mcs.anl.gov/dbpp/text/book.html 50
EPCC Edinburgh Parallel Computing Centre http://www.epcc.ed.ac.uk/ Message Passing Interface Forum http://www.mpi-forum.org/index.html Rinnakkaisohjelmointi MPI:llä,Juha Haataja ja Kaj Mustikkamäki. http://www.csc.fi/oppaat/mpi/ MPI: The Complete Reference, by Marc Snir, Steve Otto, Steven Huss- Lederman, David Walker, and Jack Dongarra. http://www.netlib.org/utk/papers/mpi-book/mpi-book.html Parallel Programming with MPI, by Peter Pacheco. Using MPI, by William Gropp, Ewing Lusk and Anthony Skjellum. 51
Using MPI-2,by William Gropp, Ewing Lusk and Rajeev Thakur. www.openmp.org http://www.openmp.org/ Official OpenMP Specifications. Parallel Programming in Fortran 95 using OpenMP, by Miguel Hermanns. Parallel Programming in OpenMP, by Rohit Chandra, Ramesh Menon, Leo Dagum, David Kohr, Dror Maydan and Jeff McDonald. 52