Optymalizacja komunikacji w systemach rozproszonych i równoległych



Podobne dokumenty
Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak dla PR PP

Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Operacje grupowego przesyłania komunikatów. Krzysztof Banaś Obliczenia równoległe 1

Programowanie Równoległe Wykład 4. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Operacje grupowego przesyłania komunikatów

Programowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1

Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface (część 3) Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie współbieżne... (4) Andrzej Baran 2010/11

POZNA SUPERCOMPUTING AND NETWORKING. Wprowadzenie do MPI

Operacje kolektywne MPI

Miary Wydajności. Efektywność programu równoległego (E) jest definiowana jako stosunek przyśpieszenia do liczby procesorów

Jak wygląda praca na klastrze

Programowanie Równoległe Wykład 6. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie współbieżne i rozproszone

Programowanie Współbieżne

POZNA SUPERCOMPUTING AND NETWORKING. Wtki w MPI. Michał Sajkowski

PRZEWODNIK PO PRZEDMIOCIE

Weryfikacja oprogramowania, korzystajacego z MPI

Architektura sieci połączeń między procesorami, sterowanie komunikacjami, biblioteki komunikacyjne

Message Passing Interface

Programowanie w standardzie MPI

Sposoby przekazywania parametrów w metodach.

... Ireneusz Mrozek. Wydział Informatyki

Biblioteki graficzne MPI - MPE

Łagodne wprowadzenie do Message Passing Interface (MPI)

Architektury systemów równoległych

Programowanie współbieżne... (6)

Programowanie wspóªbie»ne

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Programowanie współbieżne... (2)

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Równoległość i współbieżność

Równoległość i współbieżność

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Metody Metody, parametry, zwracanie wartości

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

51. Metody komunikacji nieblokującej.

Algorytmy i Struktury Danych

stopie szaro ci piksela ( x, y)

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI

5. Model komunikujących się procesów, komunikaty

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

PRZEWODNIK PO PRZEDMIOCIE

Temat: Problem najkrótszych cieek w grafach waonych, cz. I: Algorytmy typu label - setting.

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Programowanie współbieżne Wykład 12 MPI c.d. Rafał Skinderowicz

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Projektowanie i analiza zadaniowa interfejsu na przykładzie okna dialogowego.

Metody Informatyczne w Budownictwie Metoda Elementów Skoczonych ZADANIE NR 1

Programowanie współbieżne... (12) Andrzej Baran 2010/11

Literatura. 11/16/2016 Przetwarzanie równoległe - wstęp 1

Obliczenia rozproszone z wykorzystaniem MPI

WYKŁAD 10. Wzorce projektowe czynnociowe Command Strategy

Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W E, 2L PRZEWODNIK PO PRZEDMIOCIE

4. Procesy pojęcia podstawowe

Temat: Algorytmy zachłanne

Biblioteka PCJ do naukowych obliczeń równoległych

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie wspóªbie»ne

Gramatyki regularne i automaty skoczone

10/14/2013 Przetwarzanie równoległe - wstęp 1. Zakres przedmiotu

Programowanie współbieżne... (5)

HPC na biurku. Wojciech De bski

Temat: Technika zachłanna. Przykłady zastosowania. Własno wyboru zachłannego i optymalnej podstruktury.

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

4. Procesy pojęcia podstawowe

Stawiajc krzyyk w odpowiedniej wartoci mona zapisa dowolnego binarnego reprezentanta liczby dziesitnej x x x x x

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Podstawy programowania skrót z wykładów:

Temat: Struktury danych do reprezentacji grafów. Wybrane algorytmy grafowe.

Programowanie współbieżne WYKŁADY - CZ. 5EX. PRZYKŁAD. LICZBY PIERWSZE. Andrzej Baran

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

Temat: Problem minimalnego drzewa Steinera. Definicja problemu. Zastosowania. Algorytm dokładny Hakimi. Algorytmy aproksymacyjne.

Wprowadzenie do kompilatorów

WYKŁAD 9. Wzorce projektowe czynnociowe Observer Visitor

Nowoczesne technologie przetwarzania informacji

61 Topologie wirtualne

Systemy rozproszone. Państwowa Wyższa Szkoła Zawodowa w Chełmie. ** Instytut Fizyki Uniwersytet Marii Curie-Skłodowskiej w Lublinie

1 Podstawy c++ w pigułce.

Bazy danych Podstawy teoretyczne

Rozszerzenia MPI-2 1

WYKŁAD 11. Wzorce projektowe czynnociowe Iterator TemplateMethod

Temat: Geometria obliczeniowa cz II. Para najmniej odległych punktów. Sprawdzenie, czy istnieje para przecinajcych si odcinków.

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania. Matematycznego i Komputerowego Uniwersytet Warszawski

.! $ Stos jest list z trzema operacjami: dodawanie elementów na wierzch stosu, zdejmowanie elementu z wierzchu stosu, sprawdzanie czy stos jest pusty.

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

Multipro GbE. Testy RFC2544. Wszystko na jednej platformie

Programowanie systemów z pamięcią wspólną specyfikacja OpenMP. Krzysztof Banaś Obliczenia równoległe 1

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski

zdefiniowanie kilku grup dyskusyjnych, z których chcemy odbiera informacje, dodawanie, usuwanie lub edycj wczeniej zdefiniowanych grup dyskusyjnych,

Programowanie współbieżne Wykład 2. Iwona Kochańska

Programowanie - wykład 4

Planowanie adresacji IP dla przedsibiorstwa.

Transkrypt:

Optymalizacja komunikacji w systemach rozproszonych i równoległych Szkolenie PCSS, 16.12.2001

literatura W. Gropp, E. Lusk, An Introduction to MPI, ANL P.S. Pacheco, A User s Guide to MPI, 1998 Ian Foster, Designing and Building Parallel Programs, Addison-Wesley 1995, http://www-unix.mcs.anl.gov/dbpp/ 2

literatura J. Dongarra, I. Foster, G. Fox, W. Gropp, K. Kennedy, L. Torczon, A. White, The Sourcebook of Parallel Computing, Morgan Kaufmann 2002 J.J. Dongarra, S.W. Otto, M. Snir, D. Walker, An Introduction to the MPI Standard, ORNL 1995 3

literatura W. Gropp, E. Lusk, T. Sterling, Beowulf Cluster Computing, Second Edition, The MIT Press, 2003 4

literatura W. Gropp, E. Lusk, R. Thakur, Advanced Features of the Message Passing Interface, The MIT Press 1999 W. Gropp, E. Lusk, A. Skjellum, Portable Parallel Programming with the Message Passing Interface, 2nd edition, The MIT Press 1999 5

literatura P.S. Pacheco, Parallel Programming with MPI, Morgan Kaufmann 1996 W. Gropp, E. Lusk, R. Thakur, Using MPI-2. Advanced Features of the Message-Passing Interface, The MIT Press, 1999 6

literatura Neil MacDonald, Elspeth Minty, Mario Antonioletti, Joel Malard, Tim Harding, Simon Brown, Writing Message-Passing Parallel Programs with MPI. Course Notes. Edinburgh Parallel Computing Centre, The University of Edinburgh, Epic Version. 1995 http://www.epcc.ed.ac.uk/epic/mpi/notes/mpicourse-epic.book_1.html 7

literatura S. Akhter, J. Roberts, Multi-Core Programming. Increasing Performance Through Software Multi-Threading, Intel Press, 2006 O. La adan, A. Barak, Inter Process Communication Optimization in a Scalable Computing Cluster, Hebrew University, Jerusalem 1998 8

literatura R. Chandra, R. Menon, L. Dagum, D. Kohr, D. Maydam, J. McDonald, Parallel Programming in Open MP, Morgan Kaufmann, San Francisco, 2000. B. Chapman, G. Jost, R. van der Pas, Using OpenMP: Portable Shared Memory Parallel Programming, The MIT Press, 2007. http://openmp.org/ 9

optymalizacja komunikacji co to jest optymalizacja komunikacji? jest to minimalizacja liczby przesyłanych komunikatów, albo minimalizacja rozmiaru komunikatu, z jednoczesnym zachowaniem poprzedniej funkcjonalnoci 10

optymalizacja komunikacji jak to mona osign? zmiana przydziału zada do wzłów sieci w celu redukcji narzutu dot. komunikacji komunikacja kolektywna grupowanie danych w jeden komunikat minimalizacja synchronizacji i komunikacji midzy wtkami 11

zmiana przydziału zada [La adan1998] problem przydziału zada do wzłów (task clustering) w celu redukcji narzutu komunikacyjnego, przy utrzymaniu zrównowaenia systemu narzut wie si z przydziałem zada (procesów) do rónych wzłów gdyby te zadania wykonywa na jednym wle, narzut by si zmniejszył 12

zmiana przydziału zada [La adan1998] z drugiej strony obcia to zbytnio konkretny wzeł spowalniajc jego prac naley zachowa kompromis midzy tendencj zrównowaenia obcienia a tendencj do grupowania zada problem przydziału zada do wzłów jest NP-trudny 13

komunikacja kolektywna wykonywana jest przez wszystkie procesy biorce udział w obliczeniach s dwa rodzaje operacji kolektywnych: operacje przekazywania danych, do nowej aranacji danych midzy procesami, np. broadcast, scattering, gathering operacje oblicze kolektywnych (min, max, suma, OR, ) 14

komunikacja kolektywna załómy, e program działa na 8 procesorach wszystkie procesy rozpoczynaj wykonywanie programu prawie jednoczenie jednak po wykonaniu podstawowych zada (wywołampi_init, MPI_Comm_Size i MPI_Comm_rank), proces 0 zbiera dane wejciowe, a procesy od 1 do 7 s bezczynne, czekajc na dane od procesu 0 naley to zmieni, wprowadzajc komunikacj o strukturze drzewiastej 15

komunikacja kolektywna jak rozdziela dane? Jak dzieli zadania bardziej równomiernie midzy procesy? naturalnym rozwizaniem jest struktura drzewiasta procesów, z 0 jako korzeniem 16

struktura drzewiasta procesów 0 0 4 0 2 4 6 0 1 2 3 4 5 6 7 17

w 1 etapie, 0 nadaje dane do 4 0 0 4 0 2 4 6 0 1 2 3 4 5 6 7 18

w drugim etapie, 0 nadaje dane do 2, a 4 nadaje dane do 6 0 0 4 0 2 4 6 0 1 2 3 4 5 6 7 19

w 3 etapie, 0 nadaje do 1,2 nadaje do 3, 4 nadaje do 5, a 6 nadaje do 7 0 0 4 0 2 4 6 0 1 2 3 4 5 6 7 20

komunikacja o strukturze drzewiastej w ten sposób zredukowano pocztkowe rozdzielanie danych z 7 etapów do 3 etapów w ogólnoci, jeeli mamy p procesów, procedura ta pozwala rozdziela dane wejciowe w log 2 (p) etapach, zamiast w p -1 etapów dla duego p, s to due oszczdnoci 21

rozgłaszanie wzorzec komunikacji, angaujcy wszystkie procesy w komunikatorze, jest komunikacj kolektywn czyli komunikacja kolektywna zazwyczaj angauje wicej ni dwa procesy rozgłaszanie jest komunikacj kolektywn, w której jeden proces nadaje te same dane do kadego procesu 22

rozgłaszanie [Dongarra1995] 23

rozgłaszanie w MPI int MPI_Bcast(void* message, int count, MPI_Datatype datatype, int root, MPI_Comm comm) nadaje kopi danych w message z procesu root do kadego procesu w komunikatorze comm powinien by wywołany przez wszystkie procesy w komunikatorze z tymi samymi argumentami dla root i comm skutkiem tego, komunikat rozgłaszania nie moe by odbierany przez MPI_Recv 24

rozgłaszanie w MPI parametry count i datatype maj te same funkcje co w MPI_Send i MPI_Recv: okrelaj rozmiar komunikatu jednak inaczej ni w funkcjach od punktu do punktu, MPI wymaga, aby w komunikacji kolektywnej, count i datatype były takie same we wszystkich procesach w komunikatorze przyczyna jest taka, e w pewnych operacjach kolektywnych, jeden proces moe odbiera dane od wielu innych procesów, i aby program mógł okreli, ile danych odebrano, potrzebuje całej tablicy statusów zwrotnych 25

redukcja w fazie sumowania wyników proces 0 ma znowu mnóstwo pracy moemy t prac rozdzieli przez odwrócenie strzałek w drzewie, moemy podzieli zadanie obliczenia sumy midzy poszczególne procesy 26

redukcja 0 0 4 0 2 4 6 0 1 2 3 4 5 6 7 27

redukcja w pierwszym etapie proces 1 nadaje swój wynik oblicze do procesu 0, proces 3 nadaje swój wynik do procesu 2, proces 5 nadaje swój wynik do procesu 4, a proces 7 nadaje swój wynik do procesu 6 nastpnie proces 0 dodaje swój wynik do wyniku procesu 1, proces 2 dodaje swój wynik do wyniku procesu 3, itd. 28

redukcja 0 0 4 0 2 4 6 0 1 2 3 4 5 6 7 29

redukcja w drugim etapie proces 2 nadaje sum wyników do procesu 0, proces 6 nadaje sum wyników do procesu 4 proces 0 sumuje swój wynik z sum wyników od procesu 2 proces 4 sumuje swój wynik z sum wyników otrzyman od procesu 6 30

redukcja w trzecim etapie proces 4 nadaje swoj sum (wyniki od procesów 4, 5, 6 i 7) do procesu 0 proces 0 dodaje swoj sum (wyniki od procesów 0, 1, 2 i 3) do sumy otrzymanej od procesu 4 31

redukcja pojawia si pytanie, czy struktura drzewiasta optymalnie wykorzystuje topologi maszyny? to zaley od maszyny, najlepiej to sprawdzi, uruchamiajc MPI obliczenie sumy globalnej jest przykładem klasy komunikacji kolektywnej, zwanej operacj redukcji 32

operacja redukcji w tej operacji wszystkie procesy w komunikatorze wnosz dane, które s przekształcane za pomoc operacji binarnej (dodawanie, max, min, logiczne and) funkcja MPI wykonujca operacj redukcji to: 33

operacja redukcji int MPI_Reduce(void* operand, void* result, int count, MPI_Datatype datatype, MPI_Op op, in root, MPI_Comm comm) MPI_Reduce przekształca argumenty operacji zapamitane w *operand stosujc operacjop i zapamituje wynik w *result w procesie root zarówno operand jak i count odnosz si do lokalizacji pamici okrelanej przez count i typ datatype 34

operacja redukcji MPI_Reduce musi by wywołane przez wszystkie procesy w komunikatorze comm, acount, datatype, i op musz by takie same w kadym procesie 35

operacja redukcji na przykład: int MPI_Reduce(&integral, &total, 1, MPI_FLOAT, MPI_SUM, 0, MPI_COMM_WORLD); co odpowiada składni: int MPI_Reduce(void* operand, void* result, int count, MPI_Datatype datatype, MPI_Op op, in root, MPI_Comm comm) 36

inne funkcje komunikacji kolektywnej MPI_Barrier MPI_Gather MPI_Scatter MPI_Allgather MPI_Allreduce 37

funkcja MPI_Barrier int MPI_Barrier(MPI_Comm comm) MPI_Barrier zapewnia mechanizm synchronizacji wszystkich procesów w komunikatorze comm kady proces blokuje si (pauzuje) dopóki kady proces w komunikatorze comm nie wywoła MPI_Barrier 38

funkcja MPI_Gather int MPI_Gather(void* send_buf, int send_count, MPI_Datatype send_type, void* recv_buf, int recv_count, MPI_Datatype recv_type, int root, MPI_Comm comm) kady proces wcomm nadaje zawarto bufora send_buf do procesu o numerze root proces root konkatenuje odebrane dane w porzdku okrelanym przez numery procesów w buforze recv_buf, tzn. po danych od procesu 0 s dane od procesu 1, a nastpnie dane od procesu 2, itd. argumenty recv s istotne tylko w procesie root argument recv_count wskazuje liczb elementów odebranych od kadego procesu 39

funkcja MPI_Gather [Dongarra1995] 40

funkcja MPI_Scatter int MPI_Scatter(void* send_buf, int send_count, MPI_Datatype send_type, void* recv_buf, int recv_count, MPI_Datatype recv_type, int root, MPI_Comm comm) proces o numerze root rozsyła zawarto bufora send_buf midzy procesami zawarto bufora send_buf jest podzielona na p segmentów, z których kady składa si z send_count elementów pierwszy segment przekazany jest do procesu 0, drugi do procesu 1, itd. argumenty send s istotne jedynie w procesie root 41

funkcja MPI_Allgather int MPI_Allgather(void* send_buf, int send_count, MPI_Datatype send_type, void* recv_buf, int recv_count, MPI_Datatype recv_type, int root, MPI_Comm comm) zbiera zawarto kadego bufora send_buf w kadym procesie efekt jest taki sam, jak sekwencji p wywoła MPI_Gather, z których kade ma inny proces jako root 42

funkcja MPI_Allgather [Dongarra1995] 43

zbiór funkcji MPI_Gather [Dongarra1995] 44

funkcja MPI_Allreduce MPI_Allreduce(void* operand, void* result, int count, MPI_Datatype datatype, MPI_Op op, in root, MPI_Comm comm) zapamituje wynik operacji redukcjiop w buforze result kadego procesu 45

grupowanie danych dla komunikacji nadawanie komunikatu jest kosztown operacj, std im mniej komunikatów nadanych, tym lepsza efektywno programu w naszym przykładzie programu trapezowego, komunikaty s przesyłane oddzielnie (za pomocmpi_send i MPI_Recv, albo za pomocmpi_bcast) 46

grupowanie danych dla komunikacji MPI zapewnia trzy mechanizmy do grupowania pojedynczych elementów danych w jeden komunikat, s to: parametr count do rónych podprogramów wyprowadzane typy danych MPI_Pack/MPI_Unpack 47

parametrcount zauwa, e funkcje MPI_Send i MPI_Recv, MPI_Bcast i MPI_Reduce maj argumenty count i datatype te parametry pozwalaj uytkownikowi grupowa dane majce ten sam typ podstawowy w jeden komunikat warunkiem jest, aby dane były zapamitane w cigłych lokacjach pamici elementy tablicy s pamitane w cigłych lokacjach pamici, moemy wic przesła np. podzbiór tablicy 48

przykład przesłania podzbioru tablicy float vector[100] int tag, count, dest, source; MPI_Status status; int p; int my rank;... 49

przykład przesłania podzbioru tablicy if (my_rank == 0) {... /* Initialize vector and send */ tag = 47; count = 50; dest = 1; MPI_Send(vector + 50, count, MPI_FLOAT, dest, tag,mpi_comm_world); 50

przykład przesłania podzbioru tablicy }else {/*my_rank == 1 */ } tag = 47 count = 50; source = 0 MPI_Recv(vector+50, count, MPI_FLOAT, source, tag, MPI_COMM_WORLD, &status); 51

parametrcount to nie pomaga w programie trapezowym dane a, b, n nie s pamitane w cigłych lokacjach pamici nawet gdy deklarujemy po kolei: float a; float b: int n; i deklarujemy n jako float 52

wyprowadzane typy danych konstruktory wyprowadzanych typów danych: gdy róne typy danych: MPI_Type_Struct gdy równe typy danych: MPI_Type_contiguous MPI_Type_vector MPI_Type_indexed 53

MPI_Pack/MPI_Unpack MPI_Pack - jawne zapamitanie danych niecigłych MPI_Unpack kopiowanie danych z bufora cigłego do niecigłych lokacji pamici 54

minimalizacja komunikacji midzy wtkami [Akhter2006] standard OpenMP powstał w 1997 jako API dla pisania przenonych aplikacji wielowtkowych w procesorach wielordzeniowych został wykorzystany do poprawy efektywnoci programów 55

wtek wtek to minimalny element dajcy si wykona (i uszeregowa), zawiera wskanik do strumienia rozkazów wykonujcych wtek, informacj o stanie procesora, i wskanik do stosu czasami nazywany lekkim procesem 56

wtek wtek naley wpierw utworzy majc wtki, mona nimi zarzdza mona si midzy nimi komunikowa mona je synchronizowa 57

komunikacja midzy wtkami [Akhter2006] dwa wtki, które rezyduj w tym samym procesie i komunikuj si za pomoc komunikatów, stosuj komunikacj wewntrzprocesow dwa wtki, które rezyduj w rónych procesach i komunikuj si za pomoc komunikatów, stosuj komunikacj midzyprocesow 58

komunikacja midzy wtkami [Akhter2006] wykonanie wtku jest sterowane przez programist funkcjami: SuspendThread, ResumeThread, TerminateThread komunikacj midzy wtkami zapewniaj Windows Events zdarzenia te naley wpierw utworzy 59

synchronizacja wtków sekcja krytyczna: kod dostpny tylko dla pewnych wtków w danym czasie semafor: struktura danych ograniczajca dostp do danej sekcji krytycznej mutex: semafor gwarantujcy wyłczny dostp do sekcji krytycznej tylko jednemu wtkowi 60

optymalizacja efektywnoci programów OpenMP zapewnia szereg narzdzi do ułatwienia programowania równoległego opartego na wtkach OpenMP zapewnia funkcje do synchronizacji wtków, zarzdzania wtkami, prywatyzacji danych 61

podział pracy w regionach równoległych [Chandra2001] konstrukcja parallel w OpenMP jest prostym sposobem zrealizowania równoległego wykonania pracy zapewnia ona powtarzalne wykonanie tego samego kodu na wielu wtkach jest te uyteczne przy podziale pracy midzy wiele wtków 62

podział pracy midzy wiele wtków [Chandra2001] albo za pomoc osobnych wtków pracujcych na rónych czciach współdzielonej struktury danych albo za pomoc osobnych wtków wykonujcych całkowicie odmienne zadania podamy teraz kilka sposobów jak to zrobi w OpenMP 63

podział pracy midzy wiele wtków przedstawimy trzy róne sposoby uzyskania podziału pracy midzy wtki pierwszy przykład pokazuje jak stworzy kolejk zada równoległych obsługiwanych przez wiele wtków drugi przykład pokazuje jak mona rcznie podzieli prac midzy wtki, wykorzystujc identyfikator kadego wtku w zespole 64

podział pracy midzy wiele wtków oba przykłady łcznie pokazuj, w jakich sytuacjach programista rcznie dzieli prac midzy wtki w zespole na koniec przedstawiamy pewne konstrukcje OpenMP dedykowane do podziału pracy midzy wtki konstrukcje te przyjły nazw konstrukcji współdzielcych wtki 65

kolejka zada równoległych jest to współdzielona struktura danych zawierajca list zada do wykonania zadania mog mie róny rozmiar i rón złoono zalenie od aplikacji moe to by np. proste przetwarzanie ptli albo złoona procedura graficzna 66

kolejka zada równoległych niezalenie od rozmiaru i złoonoci, zadania w kolejce maj nastpujce cechy: wiele zada moe by przetwarzane współbienie przez wiele wtków, z konieczn koordynacj realizowan przez jawne konstrukcje synchronizacji co wicej, dane zadanie moe by przetwarzane przez dowolny wtek z zespołu 67

kolejka zada równoległych w takim modelu kolejki zada łatwo implementuje si równoległo tworzymy zespół równoległych wtków, kady z wtków pobiera i wykonuje zadania ze współdzielonej kolejki zada w przykładzie mamy funkcj zwracajca indeks kolejnego zadania i podprogram przetwarzajcy dane zadanie 68

kolejka zada równoległych w tym przykładzie jest prosta kolejka zada, składajca si z indeksu do identyfikacji zadania funkcja get_next_task zwraca nastpny indeks do przetwarzania, a podprogram process_task pobiera indeks i wykonuje obliczenie z nim zwizane 69

kolejka zada równoległych kady wtek pobiera i przetwarza zadania, tak długo a wszystkie zadania zostan przetworzone, wtedy region równoległy si koczy i główny wtek powraca do przetwarzania szeregowego 70

implementacja kolejki zada [Chandra2001]! Funkcja do obliczenia indeksu! Nastpnego zadania do przetworzenia integer function get_next_task() common /mycom/ index integer index 71

implementacja kolejki zada [Chandra2001]!$omp critical! Sprawd czy nie jeste poza zadaniami if (index.eq. MAX) then else endif!$omp end critical return get_next_task = 1 index = index + 1 get_next_task = index end 72

implementacja kolejki zada [Chandra2001] program TaskQueue integer myindex, get_next_task!$omp parallel private (myindex) myindex = get_next_task() do while (myindex.ne. 1) call process_task (myindex) myindex = get_next_task() enddo!$omp end parallel end 73

implementacja kolejki zada przykład ten wiadomie uproszczono, zawiera on jednak wszystkie niezbdne składniki kolejki zada i mona go bez problemu uogólni na bardziej złoone algorytmy 74

podział pracy wykorzystujcy numer wtku [Chandra2001] region równoległy jest wykonywany przez zespół wtków, którego rozmiar jest okrelany albo przez programist, albo przez implementacj opart na domylnych regułach 75

podział pracy wykorzystujcy numer wtku [Chandra2001] liczb wtków w biecym zespole wtków mona okreli z wntrza regionu równoległego, wywołujc program biblioteki OpenMP: integer function omp_get_num_threads() 76

podział pracy wykorzystujcy numer wtku wtki w zespole równoległym numerowane s od 0 do liczby wtków -1 numer ten stanowi unikalny identyfikator wtku i mona go wyznaczy wywołujc program biblioteczny: integer function omp_get_thread_num() 77

podział pracy wykorzystujcy numer wtku funkcja omp_get_thread_num zwraca warto całkowit, która jest identyfikatorem wywołujcego wtku funkcja ta zwraca inn warto kiedy jest wywoływana przez inny wtek wtek główny ma identyfikator 0, a wtki podrzdne maj identyfikatory z zakresu od 1 do liczba wtków -1 78

podział pracy wykorzystujcy numer wtku poniewa kady wtek moe wyznaczy swój numer, mamy sposób na podział pracy midzy wtki mona zatem znajc liczb wtków podzieli prac na tyle czci ile jest wtków co wicej, kady wtek moe wyznaczy swoj cz pracy 79

podział pracy wykorzystujcy numer wtku [Chandra2001]!$omp parallel private(iam) nthreads = omp_get_num_threads() iam = omp_get_thread_num() call work(iam, nthreads)!$omp end parallel powyszy program ilustruje ide podziału pracy wykorzystujcego numer wtku 80

podział pracy wykorzystujcy numer wtku Kady wtek okrela nthreads (całkowit liczb wtków w zespole) i iam (jego ID w tym zespole wtków) podprogram work stosujeiam inthreads do wyznaczenia czci pracy przydzielonej temu wtkowi iam i wykonuje t cz pracy 81

podział pracy wykorzystujcy numer wtku kady wtek musi mie swój unikalny identyfikator wtku, std iam jest deklarowany jako prywatny dla kadego wtku 82

konstrukcje współdzielce wtki sporód kilku moliwoci przedstawimy jedn konstrukcj, mianowicie dyrektywdo. Dyrektywa ta np. poprzedza ptldo, uwalniajc programist od rcznego przydziału czci pracy w ptli poszczególnym wtkom 83

zastosowanie dyrektywy do [Chandra2001] program omp_do integer iarray(n)!$omp parallel...!$omp do do i = 1, N iarray(i) = i * i enddo!$omp enddo!$omp end parallel end 84

wnioski przedstawilimy podstawowe kwestie dotyczce optymalizacji komunikacji w systemach rozproszonych i równoległych istnieje potrzeba kontynuacji analizy optymalizacji komunikacji zwłaszcza w obszarze aplikacji wielowtkowych 85