Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer och synkroniseringsmeddelanden
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 2 Parallellitet Nivåer på vilka parallellitet kan förekomma är instruktionsnivå – maskininstruktioner exekveras parallellt satsnivå – enstaka programsatser exekveras parallellt underprogramnivå – underprogram exekveras parallellt programnivå – flera program exekveras parallellt Ofta är det nödvändigt eller önskvärt att programdelar exekveras parallellt (jämlöpande, eng. concurrently). Det kan handla om fysisk parallellitet – två eller fler processorer används logisk parallellitet – konceptuell parallellitet som fysiskt kan vara sekventiell ("interleaving")
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 3 Varför parallella underprogram? De är "naturliga" Ofta avbildar program den parallella realiteten (t.ex. reaktiva system, simulationsprogram, osv.) De ger bättre möjligheter att utnyttja datorn Om datorn har flera processorer utnyttjas de på det viset som programmet tjänar mest på De behövs i många interaktiva system Om något komplext beräknas behöver inte användaren vänta utan kan jobba på eller eventuellt ingripa Lämpliga koncept i språket behövs
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 4 Processer och trådar Synkronisering behövs för att bearbeta gemensamma data synkronisering garanterar att sats S av tråd T exekveras före eller efter sats S´ av tråd T´ tävlande synkronisering (eng. competition synchronization) förekommer om en resurs (t.ex. skrivare) inte kan delas (mutual exclusion); turordningen är oviktig samarbetande synkronisering (eng. cooperation synchronizat- ion) förekommer vid gemensamma mål; turordningen är viktig (ex: producer-consumer) Exekveringen av ett parallellt program består av flera kontrollflöden som kallas trådar (eng. threads). En process (eng. ofta "task"=uppgift) är en enhet som kan exekveras parallellt med andra och som kontrollerar en tråd.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 5 Processer ”Heavyweight” eller ”lightweight” Möjliga tillstånd: Nyskapad Ready Running Blockerad Död Möjliga problem Deadlock Utsvältning (=> Fair scheduling) Icke-determinism Hastighetsberoende (realtid)
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 6 Semaforer Om en process P exekverar wait(s)… och semaforens kapacitet är > 0 minskas den med 1 annars ställs P i semaforens väntekö Om en process P exekverar release(s)… och väntekön är tom ökas dess kapacitet med 1 annars får första processen i väntekön fortsätta (och givetvis tas den bort från kön) En semafor (Dijkstra 1965) är en datastruktur med två atomära operationer wait och release. Ofta omger de kod som ska synkroniseras. En semafor har en kapacitet 0 och en väntekö (initialt tom) för blockerade processer
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 7 Monitorer För att möjliggöra samarbetande synkronisering finns det en datatyp queue vars operationer delay och continue endast kan exekveras i en monitor. En monitor inkapslar datastrukturer och operationerna som ger access till dem. Endast en process i taget får tillträde till monitorn. Om delay(q) exekveras blockerar processen. Den ställs i kön q och andra processer får tillträde till monitoren. Om continue(q) exekveras släpper processen monitorn och första processen som väntar i q får fortsätta (om en sådan finns).
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 8 Synkroniseringsmeddelanden accept xyz( ) betyder "vänta tills någon process P skickar meddelandet xyz och exekvera sedan, medan P är blockerad" icke deterministiskt urval sker med select-strukturen: select when => accept abc(…) … or when => accept xyz(…) … … end select I Ada kan processer skicka och ta emot synkroniserings- meddelanden. Om både sändaren och mottagaren är beredda sker ett rendezvous, annars väntar den ena.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 9 Jämförelse Semaforer är primitiva och flexibla, känsliga för fel, problemet är att olika programdelar måste samarbeta på mycket låg nivå. Monitorer liknar ADT:er och har liknande fördelar men samarbetande synkronisering förblir komplicerad. Synkroniseringsmeddelanden är enklare och flexiblare än monitorer, men minst lika strukturerade. De passar dessutom bra till distribuerade system.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 10 Parallellitet på satsnivå High Performance Fortran Distribuerar data på flera processorer som exekverar samma kod, SIMD Funktionella språk, ingen inbyggd sekvensialitet, olika typer av parallellism möjliga. Inga sidoeffekter, endast databeroende styr exekveringsordningen. Deluttryck kan evalueras i godtycklig ordning, även parallellt (Church-Rosser!) Inga nya språkonstruktioner nödvändiga (i princip), implicit parallellism
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 11 God jul och Gott Nytt År!!! (och intressanta gruppövningar )