MPIntroduksjon Et eksempel

Like dokumenter
UNIVERSITETET I OSLO

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Mer om C programmering og cuncurrency

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

2 Om statiske variable/konstanter og statiske metoder.

Scientific applications in distributed systems

2 Om statiske variable/konstanter og statiske metoder.

TDT4110 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

Del 4 Noen spesielle C-elementer

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Øvingsforelesning 5 Python (TDT4110)

En oppsummering (og litt som står igjen)

TDT4105 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

Stack. En enkel, lineær datastruktur

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

UNIVERSITETET I OSLO

Tråder Repetisjon. 9. og 13. mai Tråder

Del 2 Tabeller, arrays, strenger

Øvingsforelesning 5 Python (TDT4110)

Obligatorisk oppgave 1: Regneklynge

Operativsystemer og grensesnitt

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

INF2220: Forelesning 3

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

INF1000 Metoder. Marit Nybakken 16. februar 2004

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Obligatorisk oppgave 4: Lege/Resept

Programmeringsspråket C Del 3

IN 147 Program og maskinvare

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

TDT4110 IT Grunnkurs Høst 2015

Java PRP brukermanual

Innhold. Introduksjon til parallelle datamaskiner. Ulike typer parallelle arkitekturer. Prinsipper for synkronisering av felles hukommelse

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Kapittel 1 En oversikt over C-språket

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

2. Pekere og referanser.

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

Programmeringsspråket C

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Dagens tema INF1070. Signaturer. Typekonvertering. Pekere og vektorer. struct-er. Definisjon av nye typenavn. Lister

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

EKSAMEN. Emne: Algoritmer og datastrukturer

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Løsningsforslag for eksamensoppgave, våren 2004

Obligatorisk oppgave 1 INF1020 h2005

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Mattespill Nybegynner Python PDF

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Oppgave 1 JK-flip-flop (Total vekt 20%)

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Introduksjon til objektorientert programmering

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Løsnings forslag i java In115, Våren 1998

Transkript:

MPIntroduksjon Et eksempel Jon Nilsen Kjerne- og energigruppen MPIntro p.1/17

Litt om parallisering Grunnleggende ideer: Vil ha raskere og større beregninger parallellisering. Flere prosessorer brukes for å løse et globalt problem. Esensen er å dele beregningen jevnt mellom prosessorene. MPIntro p.2/17

Litt mer om parallisering Forskjellige paradigmer i parallelprogrammering. Oppgaveparallelisering deler opp det globale problemet i flere uavhengige oppgaver som sjelden trenger synkronisering. F.eks. Monte Carlo simulering. Dataparallelisering bruker flere tråder (f.eks. en tråd per prosessor) for å dele opp løkker over arrayer. Eksempler er kompilatorbasert parallelisering og OpenMP direktiver. Message-passing de involverte prosessorene har uavhengig minne. Brukeren må selv dele opp problemet og fordele bitene. MPIntro p.3/17

Message Passing Interface MPI er et bibliotek for message passing grensesnittet. Uavhengig av maskinvare. Ikke et språk eller en kompilator-spesifikasjon. Ikke en spesifik implementasjon eller et produkt. Portabel og lettbrukelig standard for message passing. MPIntro p.4/17

Fundamentale MPI-rutiner int MPI_Init(int *argc, char ***argv) Initialiserer et MPI-program. Må bli kalt i alle MPI-programmer og før alle andre MPI-rutiner. Utfører de rutiner som er nødvendige før andre MPI-rutiner kan brukes i en implementasjon. int MPI_Finalize(void) Rydder opp etter MPI-rutinene. Ingen MPI-rutiner kan kalles etter denne (selv ikke MPI_Init). Bruker må selv passe på at MPI-avhengige prosesser er ferdige før MPI_Finalize kalles. MPIntro p.5/17

Fundamentale MPI-rutiner forts. int MPI_Comm_size(MPI_Comm comm, int *size) Dersom comm er MPI_WORLD_COMM blir size totalt ant. tilgjengelige prosesser. int MPI_Comm_rank(MPI_Comm comm, int *rank) Blir brukt sammen med foregående rutine og gir rank. MPI_Comm_size og MPI_Comm_rank er nyttige for å holde orden på de forskjellige prosessenes arbeidsoppgaver. MPIntro p.6/17

Fundamentale MPI-rutiner forts. int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) buf er variabelen eller vektoren du ønsker å sende. count er antall variable i buf (f.eks lengden på vektoren). datatype er datatypen i buf, f.eks MPI_INT eller MPI_DOUBLE. dest er rank til prosessen du vil sende til. tag er en merkelapp for å holde orden på alle sendingene i programmet. comm er i denne introduksjonen MPI_COMM_WORLD. MPIntro p.7/17

Fundamentale MPI-rutiner forts. int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm) Alt må være likt som i den tilsv. MPI_Send, bortsett fra source. source svarer til den prosessen som har sendt informasjonen. Med de 6 foregående rutinene kan man lage alle de MPI-programmene man måtte ønske. Alle andre rutiner er laget for å gjøre livet enklere for programmereren. MPIntro p.8/17

Noen andre MPI-rutiner. int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) Blokkeringskall som returner når en matchende prosess er ferdig. source er som oftest MPI_ANY_SOURCE MPIntro p.9/17

Noen andre MPI-rutiner forts. int MPI_Reduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) sendbuf er det du vil sende. recvbuf er der du vil ha det. count er lengden på bufferene. op er operasjonen du vil gjøre for å sette sammen sendbufene til recvbuf. root er rangen til den prosessen som skal få all informasjonen. MPIntro p.10/17

Noen andre MPI-rutiner forts. double MPI_Wtime(void) Returner tiden fra en eller annen gang i fortiden. En eller annen gang i fortiden er garantert å ikke endre seg i løpet av prosessens levetid. Tiden som returneres er tid gått på noden som kaller på rutinen. MPIntro p.11/17

Noen tidsbetraktninger. Speed-up: S er hastighetsøkningen, T er tiden og P er ant. prosesser Effektivitet: er effektiviteten. MPIntro p.12/17

Noen tidsbetraktninger forts. Kostnadsmodell ved sending av en beskjed med lengde mellom to prosessorer: er tiden det tar å sende, båndbredden. er latensitet, Alle prosessene kan ikke gjøre nytte for seg hele tiden. Synkronisering og kommunisering tar tid. Ekstra beregninger som følge av parallellisering. Fører til at er MPIntro p.13/17

Kjøringer med økende ant. prosesser. 20000 18000 t(nodes) t(1 node) * #nodes 16000 14000 12000 time 10000 8000 6000 4000 2000 0 0 2 4 6 8 10 12 14 16 # nodes Tid som funksjon av antall prosesser brukt. Grønn linje er ideell tid. MPIntro p.14/17

Eksempelet TM. Variasjonell Monte Carlo gjøres) uavhengig. Dette gjør paralleliseringen veldig enkel. hver kjøring er (eller kan Programmet: Ser på flytende He4 med Lennard-Jones potensial og topartikkel-korrelasjon. Består i hovedsak av tre for-løkker inne i hverandre, som kjøres 10, 32 og 100000 ganger. Inne i dette regnes det ut to bølgefunskjoner. Tar 20 minutter. Paralleliseringen kjører dette en gang pr. prosessor for å øke nøyaktigheten i energien. MPIntro p.15/17

Eksempelet TM forts. Programmet er laget etter master-slave modellen (veileder-student relasjonen). null-rank-prosessen deler ut oppgaver til de andre prosessene (og seg selv). Disse gjør beregninger, snakker litt sammen og med master-prosessen og sender til slutt beregningene tilbake master-prosessen. Master-prosessen samler sammen informasjonen (og publiserer). I eksempelet er det ingen kommunikasjon under beregningene, bare før og etter. MPIntro p.16/17

Mer info om MPI http://www.ifi.uio.no/ xingca/mpi-course/ MPIntro p.17/17