40
Alati za paralelno programiranje Adviser Composer Inspector Amplifier 1

Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

  • Upload
    hanhu

  • View
    222

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Alati za paralelno programiranje

AdviserComposerInspectorAmplifier

1

Page 2: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorParalelizacija serijskog programa Identifikacija vrućih tačaka pomoću alata Survey Označavanje mogućih paralelnih delova Analiza performanse pomoću alata Suitability

Procenjuje iskorišćenje jezgara za označene delove programa

Analiza korektnosti pomoću alata Correctness Otkrivanje problema u paralelizovanim programima

Npr. nekoordiniran pristup podacima (data races), itd.

Stvarna paralelizacija u jednom od okruženja Intel Cilk (originalno razvijeno na MIT) Intel TBB (Thread Building Blocks)

2

Page 3: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPojmovi

Paralelni kod: deo koda koji se izvršava paralelno U njemu se izvršava više niti

Može se nalaziti na više mesta (sites)

Paralelno mesto: deo koda koji sadrži jedan ili više zadataka, koji se izvršavaju paralelno Obično se nalazi iznad vruće tačke (u grafu poziva)

Sinhronizacija: koordinacija izvršenja više programskih niti

Cilj (target): izvršna (.exe) datoteka Zadatak (task): deo koda, i njegovi podaci, koji se

može izvršavati u niti (na jezgru CPU-a)

3

Page 4: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPregled Advisor-ovih alataAlat i funkcija OznakeSurvey. Otkriva mesta na kojima se troši najviše vremena. Performansa za određene linije koda.

Ne zahteva niti gleda oznake

VS editor. Unos oznaka. Nakon toga zamena oznaka stvarnim kodom paralelnog okruženja.

Omogućava unos i izmene oznaka

Suitability. Procena performanse za označene delove. Matematičko modeliranje performanse teorijski idealne paralelne mašine. Ovaj i prethodni alati zahteva Release konfiguraciju.

Zahteva oznake mesta i zadatakaPrepoznaje neke oznake

Correctness. Prikazuje moguće probleme deljenja podataka, na osnovu oznaka paralelnih mesta, zadataka, ključeva, itd. Zahteva Debug konfiguraciju i ograničenje veličine podataka (x100 puta sporije izvršenje u odnosu na normalno).

Zahteva oznake mesta i zadatakaPrepoznaje sve oznake

4

Page 5: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorProcedura rada

5

Proces paralelizacije koda je iterativan. Iako su ovi koraci prikazani serijski, nekada je potrebno vratiti se na prethodni korak, radi boljeg razumevanja predviđenog ponašanja.

Page 6: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor – alat Survey (1/2)

Projekat 1_nqueens_serial Prevođenje u Release konfiguraciji Izveštaj alata Survey

Najviše vremena nosi funkcija setQueen(), koja samu sebe rekurzivno poziva (pa se pojavljuje više puta u izveštaju)

6

Page 7: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor – alat Survey (2/2)

Moguće je dobiti izveštaj na nivou izvornog koda Total Time je procena vremena izvršenja iskaza ili funkcije koja

se poziva iz iskaza Loop Time je sumarno Total Time za sve osnove blokove u

petlji; prikazuje se jednom za celu petlju

7

Page 8: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor – označavanje

Analiza nakon pronalaženja vrućeg mesta setQueen() Potrebno je posmatrati graf poziva od main do setQueen

Uočava se da je funkcija solve, koja poziva setQueen, zgodno mesto za uvođenje paralelizma – unesu se odgovarajuće oznake

8

void solve() {int * queens = new int[size];

ANNOTATE_SITE_BEGIN(solve)for(int i=0; i<size; i++) {

ANNOTATE_TASK_BEGIN(setQueen)setQueen(queens, 0, i);

ANNOTATE_TASK_END(setQueen)}

ANNOTATE_SITE_END(solve)}

Page 9: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor – alat Suitability

Projekat 2_nqueens_annotated Prevođenje u Release konfiguraciji Izveštaj alata Suitability – može se varirati br. jezgara

9

Cilj: Ostati u zelenoj oblasti skalabilnosti

Skalabilnost ograničena veličinom problema(ovde 13)

Page 10: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor – alat Correctness (1/2)

Projekat 2_nqueens_annotated Prevođenje u Debug konfiguraciji Izveštaj alata Correctness – otkrivena 2 problema

Ponovno korišćenje memorije i komunikacija podataka

10

Page 11: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor – alat Correctness (2/2)

Dvostruki klik na problem ponovnog korišćenja mem. Otvara se fokus prozor i prozor koji je povezan sa njim Dijagram odnosa: dodela-upis-upis

Nakon dodele niza queens, paralelan upis u njega iz 2 zadatka

11

Page 12: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor – sumarni izveštaj

Dobija se nakon upotrebe Suitability i Correctness Prikazuje moguće dobitke u performansi zajedno sa

problemima, koji se pojavljuju zbog paralelizacije Vredi nastaviti jer je Maximum Self Gain dobar, a pojavljuju se samo 2 problema

12

Page 13: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor – rešenje problema (1/2)

Problem ponovnog korišćenja memorije Komentariše se originalna dodela niza queens, pre petlje Ta dodela se uvodi (praktično prebacuje) u telo petlje

Tako svaki zadatak ima svoju instancu niza

13

void solve() {//int * queens = new int[size]; //original allocationANNOTATE_SITE_BEGIN(solve)for(int i=0; i<size; i++) {

ANNOTATE_TASK_BEGIN(setQueen)// create separate array for each recursionint * queens = new int[size];setQueen(queens, 0, i);ANNOTATE_TASK_END(setQueen)

}ANNOTATE_SITE_END(solve)

}

Page 14: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor – rešenje problema (2/2)

Problem komunikacije podataka Izaziva ga paralelno izvršenje iskaza: nrOfSolutions++;

Nekooridniran upisa iz paralelnih zadataka u tu promenljivu

Rešenje: uvesti zaključavanje te promenljive (lock)

14

queens[row]=col;if(row==size-1) {

ANNOTATE_LOCK_ACQUIRE(0)nrOfSolutions++; //Placed final queen, found a solution!ANNOTATE_LOCK_RELEASE(0)

}else {

// try to fill next rowfor(int i=0; i<size; i++) {

setQueen(queens, row+1, i);}

}

Page 15: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor –paralelizacija koda (1/2)

Oznake se zamenjuju stvarnim kodom okruženja Intel Cilk

Projekat 3_nqueens_cilk Dodate #include direktive, for u funkciji solve zamenjen sa

cilk_for, problem povećanja nrOfSolutions rešen uvođenjem Cilk reduktora za promenljivu nrOfSolutions

cilk::reducer_opadd<int> nrOfSolutions;

Intel TBB Projekat 3_nqueens_tbb Dodate #include direktive, parallel_for u funkciji solve, oznake

zaključavanja zamenjene odgovarajućim TBB kodom – naredni slajd

15

Page 16: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AdvisorPrimer: nqueens_Advisor –paralelizacija koda (2/2){ // increment is not atomic, so setting a lock is required hereNrOfSolutionsMutexType::scoped_lock mylock(NrOfSolutionsMutex);nrOfSolutions++; //Placed final queen, found a solution!} // closing } invokes scoped_lock destructor which releases the lock

16

Page 17: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel ComposerCine ga Intel® C++ Compiler Intel® Cilk™ Plus Intel® Integrated Performance Primitives Intel® Threading Building Blocks Intel® Parallel Debugger Extension

17

Page 18: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel ComposerIntel Cilk Plus: primer cilk_for

Aplikacija ray-tracer (projekat build_with_cilk) se može paralelizovati upotrebom cilk_for: U funkciji draw_task for petlja:

for (int y = starty; y < stopy; y++)se zameni sa cilk_for petljom:

cilk_for (int y = starty; y < stopy; y++) Uključi se zaglavlje <cilk/cilk.h> Program se prevede Intel C++ kompajlerom

Na PC sa 2 jezgra dobije se ubrzanje od 16.504s/7.395s=2.23

18

Page 19: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel ComposerIntel TBB: primer parallel_for (1/2)

Aplikacija ray-tracer (projekat build_with_tbb) se može paralelizovati upotrebom TBB parallel_for Uključiti TBB zaglavlja

task_scheduler_init.h, parallel_for.h, blocked_range.h

Originalnu funkciju draw_task zameniti klasomclass draw_task {public:void operator() (const tbb::blocked_range<int> &r) const { ...

Serijsku petlju od starty do stopy zameniti petljom po delu opsega od r.begin() do r.end()

for (int y = r.begin(); y != r.end(); ++y) { ...

19

Page 20: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel ComposerIntel TBB: primer parallel_for (2/2)

U funkciji thread_trace, koja je pozivala draw_task, postaviti broj niti i inicijalizovti raspoređivača

int nthreads = tbb::task_scheduler_init::automatic;tbb::task_scheduler_init init (nthreads);

dalje, postaviti jedinicu podele iteracionog prostora, tzv. grain size

int grain_size = 50;

na kraju, pokrenuti TBB parallel_fortbb::parallel_for (tbb::blocked_range<int> (starty, stopy),

draw_task (), tbb::auto_partitioner() );

Na PC sa 2 jezgra dobije se ubrzanje od 16.864s/7.069s=2.38

20

Page 21: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel AmplifierObezbeđuje info o performansi programa: Identifikovanje vrućih tačaka (hot spots) Lociranje sekcija koda koje ne iskorišćuju raspoloživo

vreme (na svim jezgrima) Određivanje najbolje sekcije koda za optimizaciju Lociranje sinhronizacionih objekata koji utiču na

performansu aplikacije Pronalaženje da li, gde, i zašto, aplikacija troši vreme

na U-I radnje Analiza performanse različitih sinhronizacionih

metoda, različitog broja niti, ili različitih algoritama

21

Page 22: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel Amplifier:Pronalaženje vrućih tačaka

22

Page 23: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: find_hotspots1. Opcija: Where is my program spending time?

3: Vidi se da je vruća tačka funkcija initialize-_2D_buffer – ona troši najviše vremena

23

Page 24: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: find_hotspots2. Analiza iskorišćenja procesora

Metrike Elapsed time – proteklo vreme CPU time – ukupno iskorišćeno vreme za sve niti Unsued CPU time – ukupno neiskorišćeno vreme za

sva jezgra Core Count – broj jezgara (logičkih CPU) Threads Created – broj izvršenih niti

24

Page 25: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: find_hotspots3. Analiza na nivou iskaza u funkciji

25

Page 26: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: find_hotspots4. Uočavanje problema

Najviše vremena troši inicijalizacija niza, koja se ne obavlja u redosledu susednih mem. adresaRešenje – preraditi inicijalizaciju niza tako da se obavlja u redosledu susednih mem. adresaOvde se to efektivno postiže zamenom redosleda ugnježdenih petljifor(1) {for(2) {…}} => for(2) {for(1) {…}}

26

Page 27: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: find_hotspots5. Poređenje prethodnog i novog rešenja

I Analiza na nivou pojedinačnih funkcija

27

Page 28: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: find_hotspots5. Poređenje prethodnog i novog rešenja

II Poređenje na nivou iskorišćenja ukupnog vremenaIskorišćenje procesora u prvom slučaju iznosi 42.02%, a u drugom 42.43%Ubrzanje je 1.14

28

Page 29: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel Amplifier:Povećanje nivoa paralelizma

29

Izaberi cilj

Napravi cilj

Pokreni analizu nivoa paralelizma

Interpretiraj rezultate

Pogledaj izvorni kod

Paralelizuj kod

Uporedi sa prethodnim rezultatima

Page 30: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: identify_concurrency 1. Opcija: Where is my concurrency poor?

1: Najlošiji paralelizam je u funkciji grid_intersect

30

Page 31: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: identify_concurrency1a. Definicije metrika

Ciljni paralelizam (Target Concurrency) je jednak broju jezgara u CPUNpr. Za CPU sa 2 jezgra, TC=2Prosečna upotreba procesora AU = Tcpu / Te Gde su

AU – prosečna upotreba CPU (Average CPU usage) Tcpu – vreme rada svih jezgara (CPU time) Te – ukupno proteklo vreme (Elapsed Time)

AU idealno treba da teži broju jezgara

31

Page 32: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: identify_concurrency 1b. Analiza AU i tragova izvršenja programa

Sa grafika se vidi da se jedna nit izvršavala 35s, što se klasifukuje kao loš (poor) paralelizam

Otvaranjem steka poziva, vide se tri traga izvršenja

32

Page 33: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: identify_concurrency2. Analiza na nivou iskaza

Analizom steka poziva funkcija, uočava se da je funkcija draw_task uzrok lošeg paralelizma

33

Page 34: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: identify_concurrency3. Uočavanje problema i rešenje

Rešenje: uklanjanje nepotrebne kritične sekcije

34

Page 35: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: identify_concurrency4. Upoređenje sa prethodnim rešenjem

1: početno rešenje, 2: optimizovano, 3: razlika

35

Page 36: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: identify_concurrency4a. Upoređenje prosečne upotrebe CPU

Def. Iskorišćenih logičkih CPU = br. iskorišćenih jezgara tokom izvršenja programa

36

Page 37: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Parallel Amplifier:Analiza zaključavanja i čekanja

37

Izaberi cilj

Napravi cilj

Pokreni analizu zaključavanja i čekanja

Interpretiraj rezultate

Pogledaj izvorni kod

Ukloni suvišno zaključavanje

Uporedi sa prethodnim rezultatima

Page 38: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: analyze_locks1. Opcija: Where is my program waiting

2: vreme čekanja po iskorišćenju3: broj poziva API funkcije za čekanje (wait)

38

Page 39: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: analyze_locks2. Analiza sumarnog izveštaja

4: Wait Time je ukupno vreme čekanja niti radi sinhronizacije ili završetka U-I radnje

39

Page 40: Alati za paralelno programiranje - rt-rk.uns.ac.rs Alati za paralelno... · Parallel Advisor Pregled Advisor-ovih alata Alat i funkcija Oznake Survey. Otkriva mesta na kojima se troši

Primer: analyze_locks3. Uočavanje problema i rešenje

Analizom Bottom-up prozora uočava se da prve tri stavke nose najviše vremena čekanja Prve dve su sistemske, i to na niskom nivou Treća je kritična sekcija, dakle bliže aplikaciji

Kada se otvori, vidi se da je poziva funkcija draw_task

Analizom draw_task vidi se da se čeka na zaključavanju nepotrebne kritične sekcijeRešenje: uklanjanje kritične sekcije Dalje se upoređuju prethodno i optimizovano rešenje

kao u prethodnim primerima

40