350 likes | 518 Views
Izvedba vzporednih programov. Realen problem, opazovanje, poskus vzporeden algoritem (opisna psevdo koda) vzporeden računalniški program (koda v programskem jeziku) . Da bi naredili učinkovit vzporeden program moramo poiskati (identificirati) :
E N D
Izvedba vzporednih programov • Realen problem, opazovanje, poskus vzporeden algoritem (opisna psevdo koda) vzporeden računalniški program (koda v programskem jeziku). • Da bi naredili učinkovit vzporeden program moramo poiskati (identificirati): • sočasnost (concurrency), • skalabilnost (scalability), • lokalnost (locality), • modularnost (modularity). Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Sočasnost (Concurrency) • Možnost, da se izvedejo deli reševanja problema sočasno: • neodvisnost reševanja delov • dostopni podatki v času računanja • Primer: vsota števil 1-10; namesto 9 korakov lahko problem rešimo v štirih korakih : 1. a=1+2, b=3+4, c=5+6, d=7+8, e=9+10 2. a=a+b, b=c+d, e, 3. a=a+b 4. a=a+e • Toda ne moremo začeti npr. koraka 3 pred korakom 2, ker še ni podatkov... • Cena za hitrejši izračun je zahteva po dostopnosti več seštevalnikov, ki so sposobni hkrati seštevati. Potrebujemo tudi več pomnilniških lokacij (registrov). Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Skalabilnost (Scalability) • Možnost za povečanje števila procesorjev, če povečamo velikost problema. • Zmožnost da izvedemo vzporeden program s podobno učinkovitostjo na različnih številih procesorjev. • Običajno se učinkovitost manjša ob večjem številu procesorjev, čim manj se manjša, tem bolj je problem skalabilen. • Če naredimo program, ki deluje učinkovito samo pri določenem številu procesorjev, je to slab vzporeden program. • Skalabilnost omogoča prenos programa med različnimi sistemi in s tem ohranja investicijo, ki smo jo vložili v razvoj programa. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Lokalnost (Locality) • Možnost, da program uporablja podatke iz lokalnega pomnilnika, to je tistega v katerem je shranjen program. • Dostop do lokalnega pomnilnika (na vozlišču) je hitrejši (ima manjšo ceno) kot dostop do oddaljenega pomnilnika (na drugem vozlišču). Branje/pisanje podatkov v lokalni pomnilnik je hitrejše kot sprejemanje/pošiljanje sporočil • Razmerje med oddaljenim/lokalnim dostopom je lahko od 10:1 do 1000:1 ali več, odvisno od hitrosti linij, povezovalne mreže in mehanizmov za prenos podatkov. • Učinkovitost vzporednega algoritma je močno odvisna od razmerja lokalnih in oddaljenih dostopov do podatkov. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Modularnost (Modularity) • Pri modularni zasnovi programa so posamezni moduli razviti ločeno kot neodvisni moduli. • Te module lahko združujemo z drugimi ali pa jih ponovno uporabimo pri drugih aplikacijah. • Sodelovanje (Interakcija) med moduli mora biti omejena na dobro definirane vmesnike (interfaces). • Če je tako, potem lahko spremenimo zasnovo posameznega modula ne da bi spreminjali celoten program. • Lastnosti modularnega programa dokumentiramo z lastnostmi modulov in lastnostmi glavnega programa. • Modularna zasnova zmanjšuje kompliciranost programa in omogoča večkratno uporabo delujoče programske kode. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Model vzporednega sistema • Vzporeden sistem lahko predstavimo z množico opravil (tasks) in kanalov (channels), ki jih modeliramo z usmerjenim grafom, kjer so vozlišča opravila in povezave kanali.Vsako opravilo vsebuje zaporeden podsistem in vhodno/izhodne vmesnike do kanalov. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Kaj zmorejo opravila? • Branje in pisanje iz/v lokalni pomnilnik, • Pošiljanje/sprejemanje sporočil k/od drugih opravil, • Ustvarjanje novih opravil, • Zaključevanje izvajanja izbranega opravila, • Ustvarjanje novih kanalov, • Spreminjanje načina povezanosti opravil. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Preslikovanje (mapping) opravil • Opravila je treba preslikati – vstaviti na fizični računalnik, tako da to nima vpliva na programsko kodo. Na primer, eno opravilo ali več opravil lahko preslikamo na eno-procesorski sistem. • Toda po preslikovanju morajo biti vsi procesorji obremenjeni enakomerno, ker bi sicer najpočasnejši procesor določal (podaljševal) čas izvajanja. • Če potrebuje prvo opravilo podatek od drugega opravila, da bi lahko prvo opravilo nadaljevalo z delom, govorimo o odvisnosti podatkov. • Če sta ti dve opravili preslikani na različni računalniški vozlišči, bo za izmenjavo podatkov treba uporabiti za oddaj/sprejmi komunikacijo, sicer pa piši/beri operacijo. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Primer – gradnja mostu • Primer (a)-dve opravili: tovarna (proizvodnja nosilcev)in most (gradnja mostu) z enim kanalom (transport nosilcev) (kaj če bo nosilcev preveč?) • Primer (b): enako kot prej, le da dodamo še en kanal (pošiljanje zahtev za nove nosilce – končanje gradnje ko ni več zahtev, ker je most končan). Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Metodologija za zasnovo vzporednega programa • Sestavljena je iz štirih faz: • Delitev (Partitioning) • Komunikacija (Communication) • Združevanje (Agglomeration) • Preslikava (Mapping) • Kratica DKZP(PCAM) • Prvi dve fazi vplivata na sočasnost in skalabilnost • Tretja in četrta faza pa poskušata zagotoviti uravnoteženost dela in najti čim več lokalnosti ter tako izboljšati zmogljivost vzporednega programa. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Kako gre to v praksi? Začnemo s spoznavanjem in opisom problema.D. Problem razdelimo,K. Najdemo potrebno komunikacijo,Z. Združimo posamezna opravila, P. Preslikamo združena opravila na procesorje. D K Z P Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Delitev • Vsaka delitev pomeni priložnost za vzporedno izvedbo. • Želimo najti čim večje število manjših opravil, ki se lahko izvedejo vzporedno: drobnozrnata delitev (fine-grained decomposition). • Delitev domene – tu najprej razdelimo podatke in nato nad njimi izvedemo računanje. • Delitev po funkcijah – tu najprej določimo funkcije, s katerimi računamo s podatki. • V kasnejših fazah zasnove programa je prvotna delitev še enkrat pregledana in prilagojena na vzporeden program z • Združitvijo opravil, da povečamo velikost opravil (granulacijo) in morda zmanjšamo obseg komunikacije. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Delitev domene • Pri delitvi domene najprej poskusimo razdeliti podatke, ki so potrebni za rešitev problema. • Če je možno, jih razdelimo v čim več enakih manjših delov. • Nato razdelimo računanje s tem, da vsakemu delu podatkov priredimo operacije s katerimi bomo podatke obdelovali. • Delitev nam da večje število opravil, ki izvedejo zahtevane operacije nad skupinami podatkov. Nekatere operacije lahko potrebujejo podatke iz različnih opravil. • V tem primeru bomo potrebovali komunikacijo, ki nam bo posredovala podatke med različnimi opravili. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Delitev domene - primer • Primer delitve 3-D domene (kocka), ki jo bomo razdelili (diskretizirali) s 3-D mrežo točk. Tako domeno lahko delimo v eni-, dveh-, ali treh- dimenzijah. Na sliki so podatki, ki pripadajo enemu opravili potemnjeni. • Tri-dimenzionalna delitev nudi največjo fleksibilnost in je zato najbolj priporočljiva v začetnih fazah zasnove vzporednega programa. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Delitev po funkcijah • Ta delitev je komplementaren način razmišljanja o problemu. V začetku se usmerimo na računanje, ne, tako kot prej, na podatke. • Če smo v delitvi po funkcijah uspeli, in dobili nekaj neodvisnih (disjoint) opravil, je treba identificirati podatke, s katerimi bodo ta opravila računala. • Podatki so lahko neodvisni (disjoint), v tem primeru je delitev popolna. Lahko pa se tudi prekrivajo (eni in isti podatki za več opravil), v tem primeru bomo potrebovali komunikacijo ali pa več kopij (replication) podatkov. • Pogosto je to znak, da bi bilo vredno poskusiti še z delitvijo domene. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Delitev po funkcijah - primer • Primer delitve po funkcijah pri računalniški simulaciji klime. Vsaka komponenta modela je lahko ločeno opravilo, ki ga bomo nadalje paralelizirali z delitvijo domene. • Puščice pomenijo potreben prenos podatkov med modeli. Na primer, atmosferski model izračuna hitrosti vetrov, ki jih posreduje oceanskemu modelu, ta izračuna površinske temperature morja, ki jih bo spet uporabil atmosferski model, itd. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Komunikacija • Opravila, ki smo jih določili z delitvijo naj bi se izvajala vzporedno, toda v splošnem se ne morejo izvajati neodvisno. • Računanje, potrebno za izvedbo enega opravila, običajno potrebuje tudi podatke, ki so prirejeni drugemu ali več drugim opravilom. • Kar pomeni, da jih bo potrebno prenašati, da bi se lahko vsa opravila v celoti izvedla. • Prenos informacij/podatkov moramo opredeliti v fazi zasnove programa, ki smo jo imenovali komunikacija. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Komunikacija (nad.) • Najprej opredelimo kanale, ki povezujejo (neposredno ali posredno) opravila, ki podatke ustvarjajo (izvor, producers) in opravila, ki podatke potrebujejo (ponor, consumers). • Nato opredelimo sporočila, ki jih bo treba pošiljati ali sprejemati. • Pri uporabi razdelitve domene, bo težje določiti zahtevano komunikacijo. • Za razliko od razdelitve po funkcijah, kjer bo komunikacija naravna, vidna že iz funkcionalne sheme problema. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Komunikacija (nad.) • Pri lokalnikomunikaciji vsako opravilo komunicira le z majhno množico drugih opravil - s “sosedi”; • Globalna komunikacija pa se odvija med mnogo večjo množico opravil, ali celo z vsemi preostalimi opravili. • Pri strukturiranikomunikaciji, opravilo in njegovi sosedje tvorijo pravilno (ponavljajočo) strukturo kot na primer drevo ali mrežo. • Pri nestrukturirani komunikaciji pa je komunikacijska mreža poljuben graf. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Komunikacija (nad.) • Pri sinhroni komunikaciji morajo opravila, ki so ponori in izvori podatkov delovati koordinirano, tako da pari izvor/ponor podatkov delujejo časovno usklajeno. • Za razliko od asinhrone komunikacije, kjer ni potrebno usklajeno delovanje parov, ponor lahko zahteva podatke ne da bi bil izvor podatkov o temu predhodno obveščen. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Lokalna komunikacija • O lokalni komunikaciji govorimo, ko neko opravilo potrebuje podatke le od manjšega števila opravil. • Na primer, zamislimo si, da računamo povprečje s sosednjimi točkami, za kar potrebujemo pet-točkovno šablono, s katero dobimo nove vrednosti z izvedbo naslednjega opravila: Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Globalna komunikacija • Če mora sodelovati mnogo opravil, ker na primer ni enostavno identificirati parov opravil z izvori/ponori podatkov, bo potrebna bolj komplicirana komunikacija, ki bo lahko upočasnila sočasno izvedbo opravil. • Poglejmo primer vzporedne redukcije, kjer računamo globalno vsoto S: • Imamo N=8 opravil in vsako od teh je povezano z S. (številke v oklepajih označujejo število korakov). Tak naiven postopek zahteva O(N) korakov, kar ni dobro! Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Nestrukturirana in dinamična komunikacija • Primer problema, ki zahteva nestrukturirano komunikacijo. • Pri metodi končnih elementov mora vsako vozlišče komunicirati s svojimi neposredno povezanimi sosednimi vozlišči. • Iz slike se vidi, da je število sosednih vozlišč različno ( 5, 6, 7, …). • Če se oblika domene spreminja se tudi število opravil dinamično spreminja. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Združevanje • V prvih dveh fazah zasnove vzporednega postopka smo opredelili računanje, ki bo izvedeno na čim večji množici opravil ter komunikacijo, ki bo zagotovila potrebne podatke za opravila. • Postopek, ki ga snujemo je še abstrakten, to pomeni, da ni prilagojen za učinkovito izvedbo na nekem izbranem vzporednem računalniku. Običajno smo opredelili mnogo več opravil kot imamo na razpolago procesorjev. Tudi komunikacija ni prilagojena dejanski povezovalni mreži v vzporednem računalniku. • V tretji fazi –združevanje - bomo upoštevali resnične razmere: na nek optimalen način bomo združili opravila, da bomo povečali učinkovitost vzporedne izvedbe. • Morda bomo nekatere podatke razmnožili v več procesorjih namesto, da bi jih prenašali? Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Združevanje - primer (a) Število opravil lahko povečamo z zmanjšanjem dimenzije delitve iz 3->2. (b) Sosednja opravila lahko združimo v eno opravilo in dobimo večjo zrnatost. (c) Lahko združimo veje poddreves pri algoritmih deli-in-vladaj (divide-and-conquer). (d) Lahko kombiniramo vozlišča v drevesih opravil…. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Cilji združevanja • Omenimo tri cilje, ki si dostikrat tudi nasprotujejo: • Zmanjšanje cene komunikacije s povečanjem računske in komunikacijske zrnatosti (manj opravil, manj komunikacije). Ceno lahko zmanjšamo s razmnožitvijo opravil ali pa z združevanjem opravil, ki bi se težko izvajali sočasno. • Ohranitev fleksibilnosti z večjim številom opravil kot je število procesorjev, da bi lahko naš algoritem izvajali na vzporednem računalniku z različnim številom procesorjev (skalabilnost). • Zmanjšanje cene programiranja in testiranja vzporednega programa, s tem da je potrebno čim manj sprememb, ko predelujemo program za en procesor v program za več procesorjev. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Preslikava • V četrti, zadnji, fazi zasnove vzporednega algoritma bomo določili na katerem procesorju se bo izvedlo posamezno opravilo. • Problema preslikave nam ni treba reševati na eno-procesorskem računalniku ali na vzporednem računalniku z deljenim pomnilnikom, ki zagotavlja avtomatično izvedbo opravil v okviru razporejanja, ki ga določa operacijski sistem in v okviru komunikacije preko deljenega pomnilnika (skupne spremenljivke). • Na žalost pa ni splošno veljavnega mehanizma za preslikavo na skalabilnih vzporednih računalnikih. V glavnem ostane preslikava eden od težjih problemov, ki jih je treba rešiti za vsak posamezen vzporeden postopek. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Preslikava - primer • Na sliki je enostaven primer preslikave na pravilni mreži opravil, kjer vsako od njih opravlja enako računanje in komunicira le s svojimi neposredno povezanimi sosedi (numerično reševanje PDE – računalniške simulacije). Debelejše črtkane črte pomenijo meje med procesorji. Vsak procesor naj ima enako računanja. Tanjše črtkane črte pa pomenijo komunikacijo, ki jo naj bo čim manj in naj bo uravnotežena. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Postopki za uravnoteženje obremenitve • Običajno pomeni, da domena ni deljena na tako enostaven način. Če imamo nestrukturirano mrežo opravil, želimo minimizirati komunikacijo in uravnotežiti obremenitev (računanje in komunikacijo), tipično s hevrističnimi postopki. • Seveda se moramo vedno vprašati, če ne bo postopek uravnoteženja postal preveč kompliciran glede na izboljšave, ki jih bo prinesel. • Včasih so uporabne verjetnostne metode uravnoteženja, ker so enostavne. • Najbolj zapleteni problemi zahtevajo dinamično uravnoteženje, kjer se ob poteku računanja na primer podatki selijo iz procesorja v procesor in je treba po nekem času ponoviti postopek uravnoteženja. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Uravnoteženje - primer • Končni rezultat nekega zahtevnega postopka uravnoteženja je prikazan na objektu, ki smo ga preiskovali z metodo končnih elementov (naslovnica PP). • Uporabljena je bila tehnika rekurzivne bisekcije, da smo razdelili domeno v približno enake poddomene – glede računanja in komunikacije, ob tem, da smo poskušali najti rešitev z najmanjšo komunikacijo (število povezav, ki jih seka meja med procesorji) • Obstaja pa še mnogo načinov. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Izvajanje sestavljenega vzporednega programa • Razlikujemo tri načine vzporedne izvedbe več vzporednih programov: • Zaporedno izvajanje– dve programski komponenti se izvajata vzporedno, zaporedoma na isti množici procesorjev. • Vzporedno izvajanje - dve programski komponenti se izvajata vzporedno na dveh ločenih podmnožicah procesorjev. • Sočasno izvajanje - dve programski komponenti se izvajata vzporedno po delih, ki jih razporejajo operacijski sistemi, na isti množici procesorjev. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Sestavljeno izvajanje – grafični prikaz • Imamo dve vzporedna programa (siva in temno siva puščica). • Programa se izvajata na štirih procesorjih, kjer vsaka puščica pomeni ločeno programsko nit. Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Vzporedni algoritmi - primeri • Da bi praktično preverili opisan model opravilo-kanal in ostale omenjene lastnosti bomo malo podrobneje predstavili tri tipične vzporedne postopke (algoritme): • Študij parametrov (določeno število opravil z različnimi funkcijami, brez skupnih podatkov, brez komunikacije), • Končne razlike (določeno število opravil z enakimi funkcijami in nekaj skupnimi podatki, z manj komunikacije), Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Študij parametrov Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13
Končne razlike Parcialne diferencialne enačbe (PDE) – matematični model. Najenostavnejši primer: advekcijska enačba u/t = -c u/x Aproksimacija časovnega odvoda: (Xt+1-Xt)/Δt Aproksimacija prostorskega odvoda: (Xi+1-Xi)/Δx Dobimo sistem enačb: Xt+1 = A*Xt Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13