PARADYGMATY I JĘZYKI PROGRAMOWANIA. Programowanie współbieżne... (w13)



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

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

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

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

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

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

Operacje grupowego przesyłania komunikatów

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

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

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

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

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

Operacje kolektywne MPI

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

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

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

Komunikacja kolektywna w środowisku MPI

O superkomputerach. Marek Grabowski

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

Metody Metody, parametry, zwracanie wartości

Programowanie współbieżne i rozproszone

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

Algorytmy i Struktury Danych

Message Passing Interface

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

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Współbieżność w środowisku Java

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

HPC na biurku. Wojciech De bski

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

Nowoczesne technologie przetwarzania informacji

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

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

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

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

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wstęp do programowania 2

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

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

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Programowanie w standardzie MPI

Programowanie Współbieżne

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Rozszerzenia MPI-2 1

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Architektury systemów równoległych

PRZEWODNIK PO PRZEDMIOCIE

Kurs programowania. Wykład 8. Wojciech Macyna

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

Przetwarzanie Równoległe i Rozproszone

Task Parallel Library

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

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

Mechanizmy pracy równoległej. Jarosław Kuchta

Jak wygląda praca na klastrze

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

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Literatura. 3/26/2018 Przetwarzanie równoległe - wstęp 1

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

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

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

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

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

Podstawy Programowania C++

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Klient-Serwer Komunikacja przy pomocy gniazd

Enterprise, czyli instytutowy klaster obliczeniowy

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Podstawy współbieżności

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Zaawansowany kurs języka Python

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

4. Procesy pojęcia podstawowe

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Programowanie współbieżne... (w14)

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe

4. Funkcje. Przykłady

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Podstawy programowania w języku C

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Programowanie współbieżne Wykład 11 Wprowdzenie do MPI. Rafał Skinderowicz

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

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

System operacyjny MACH

Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system.

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Transkrypt:

PARADYGMATY I JĘZYKI PROGRAMOWANIA Programowanie współbieżne... (w13)

Treść 2 Wstęp Procesy i wątki Szybkość obliczeń prawo Amdahla Wyścig do zasobów Synchronizacja i mechanizmy synchronizacji semafory monitory inne mechanizmy synchronizacji MPI Podstawy Przykłady OpenMP Podstawy

3 Wstęp

Do czego potrzebujemy OR? 4 Aplikacje CAD/CAM Przewidywanie pogody Systemy inteligentne Modelowanie (ekonomia, planowanie itd) Opracowywanie danych satelitarnych (...) Projektowanie obwodów VLSI Problemy energetyki jądrowej Reakcje chemiczne i jądrowe Aktywność sejsmiczna Ziemi Problemy genetyki inne

Prawo Amdahla 5 Gene Amdahl, 1967 Przyspieszenie obliczeń współbieżnych S apple f + gdzie f = część (<1) odpowiadająca obliczeniom sekwencyjnym (1- f odpowiada tej części programu, ktora daje sie uwspółbieżnić). 1 (1 f) n

Prawo Amdahla 6 Obliczenia na n procesorach: n liczba procesorów T całkowity czas obliczeń na 1 procesorze f*t czas obliczeń sekwencyjnych na 1 procesorze (1- f)*t czas obl. równoległych na 1 procesorze (1- f)*t/n czas obl. równoległych na n procesorach Przyspieszenie obliczeń ( czas obl. 1proc./czas obl. nproc. ): S apple Stąd prawo Amdahla. T ft + (1 f)t n

Prawo Amdahla 7 S f=0.01 80 60 f=0.02 40 20 f=0.10 200 400 600 800 1000 n

Przykład. Iloczyn skalarny 8 1 proces Suma: s = P N i=1 x iy i Czas 1 operacji + : Liczba operacji +: N- 1; czas obliczeń: 2 procesy Suma: Czas obliczeń: T 1 =(N s = P N/2 i=1 x iy i + P N i=n/2+1 x iy i T 2 =(N/2 1) t + t + C t 1) t Jeśli gdzie C jest czasem przesyłania wyniku częściowego czas komunikacji Przyspieszenie: c<< t S = T 1 /T 2 = N 1 N/2+C/ t! 2

Przykład. Iloczyn skalarny 9 P procesorów. Zakładamy, że P = N, S P = T 1 (qc całkowity czas komunikacji). Kładąc otrzymamy Nawet dla =0 T P = (N 1) t q t+qc S P = N 1 (1+ )log 2 P = P 1 (1+ )log 2 P S P = P 1 log 2 P <P N =2 q C/ t

Współbieżność 10 Współbieżność wiele kontekstów obliczeniowych jednocześnie wielowątkowość; wielozadaniowość dodatkowe procesory; szybkość komputery rozproszone; internet Różne poziomy zrównoleglania różne poziomy ziarnistości n instruction Level Parallelism n vector parallelism n thread- level parallelism

Wyścig do zasobów 11 Wyścig do zasobów ma miejsce jeśli działają co najmniej dwa niezsynchronizowane procesy i wynik obliczeń zależy od kolejności ich działania Czasami wyścig do danych nie zagraża wynikom obliczeń (np. pobieranie zadań z kolejki) W ogólności, wyścig do zasobów jest niepożądany i należy go kontrolować

Wyścig do zasobów 12 Przykład Dwa procesy dzielą pamięć, zwiększając o 1 wartość zmiennej X. Większość procesorów nie wykonuje operacji arytmetycznych bezpośrednio na pamięci. Każdy z procesorów wykonuje operacje: LOAD X INC STORE X Jaki będzie wynik obliczeń jeśli początkowa wartość X=0, a procesy działąją równolegle? Czy wynikiem końcowym będzie 1, czy 2? Przykład wielowątkowości: serwery sieciowe

Architektura 13 Dwa główne typy architektury dzielona pamięć wiele procesorów jedna pamięć; OpenMP każdy procesor posiada własną pamięć komunikaty; MPI

Jaguar & Titan 14 http://computing.ornl.gov/ http://top500.org Titan is a Cray XK7 system that contains 18,688 nodes, each built from a 16- core AMD Opteron 6274 processor and an NVIDIA Tesla K20X GPU accelerator. Titan also has 710 terabytes of memory. The OLCF is home to Titan, the world s most powerful supercomputer for open science with a theoretical peak performance exceeding 20 petaflops (quadrillion calculations per second). That kind of computational capability almost unimaginable is on par with each of the world s 7 billion people being able to carry out 3 million calculations per second. Image courtesy Oak Ridge National Laboratory.

Synchronizacja 15 Tak, czy owak synchronizacja pracy wątków, czy procesów jest podstawą obliczeń równoległych Synchronizację zapewnia język programowaia (najczęściej programista) Języki i rozszerzenia Java, C# MPI (Message Passing Interface) wywołania zdalne procedur; dostępność: Fortran, C++; wszystkie platformy Biblioteki: POSIX pthreads biblioteki sieciowe

Narodziny i śmierć wątków 16 Systemy programowania współbieżnego pozwalają kreować i niszczyć wątki Składnia instrukcji jest różna w różnych systemach Przykład, instrukcje do OpenMP #pragma omp parallel for for (int i = 0; ji < 3; i++) { print ( thread %d \n, i); } C# Parallel.For(0, 3, i => { Console.WriteLine( Thread + i); }) Trzeci argument Parallel.For jest delegatem, tutaj wyrażeniem lambda.

Narodziny i śmierć wątków 17 Java class ImageRenderer extends Thread {... ImageRenderer( args ) { // konstruktor } public void run() { // kod wątku } }... ImageRenderer rend = new ImageRenderer (arg_konstruktora) Wątek uruchamia polecenie rend.start(), łączy rend.join() Podobnie w C#

18 Synchronizacja Podstawy

Synchronizacja 19 Operacje atomowe lub opóźnienie operacji do chwili gdy spełnione są określone warunki (np. zrealizowanie obliczania tablicy elementów) wykluczanie tylko jeden wątek działa w tzw. sekcji krytycznej synchronizacja warunkowa wątki czekaja na spełnienie określonego warunku barriers

Mechanizmy synchronizacji 20 Semafory (Dijkstra, 1968): semafor licznik o dwóch operacjach P i V (P passeren = dun. przejść, V vrijgeven = zwolnić; Algol 68: down i up). Wątek, który wywołuje P automatycznie zmniejsza licznik o 1 i czeka do momentu gdy licznik będzie nieujemny. Wątek, wywołujący V, zwiększa licznik o 1 i w ten sposób aktywuje wątek oczekujący (jeśli taki jest); semafor binarny;

Mechanizmy synchronizacji 21 Monitory (Hansen, 1973; Hoare 1974): moduł lub obiekt, posiadajacy pewne operacje, stan wewnętrzny i jakies zmienne, określające warunki. W danej chwili może byc wykonywana tylko jedna operacja. Wątek, wywołujący zajęty monitor, jest automatycznie wstawiany do kolejki wątków oczekujacych (kolejka wejściowa) do czasu gdy monitor sie zwolni.

Zakleszczenie, impas 22 Nieumiejętne posługiwanie się semaforami lub monitorami może prowadzić do zakleszczenia (deadlock)

Synchronizacja w Java 23 Instrukcja synchronized synchronized (obiekt_dzielony) { // sekcja krytyczna } metoda wait() pozwala zawiesić dzialanie wątku do odpowiedniego momentu. while (!warunek) { wait(); } Wątek zawieszony może być aktywowany przez inne wątki, wywołujące metode notify() lub notifyall().

Atomowość inaczej (TM) 24 Organizacja atomowych operacji w programach jest skomplikowana Lepiej: system zarządza konkurującymi wątkami TM transactional memory; analogicznie, jak w przypadku transakcyjnych baz danych (atomowość, spójność, izolacja, trwałość) Podstawowa idea (TM). W programie: atomic { -- kod do wykonania }

25 DPM Data Parallel Model

Data Parallel Model (DPM) 26 Operacje na zbiorach danych (np na tablicach) Zespół zadań (program) operuje na wspólnej strukturze danych, a każde zadanie pracuje nad częścią danych. Zadania wykonują te same operacje na danych. Przykład. Utworzyć tablicę Y mnożąc elementy tablicy X przez pi (3.1415...) a) na 1 procesorze b) na 4 procesorach c) dla n procesorów.

DPM, przykład 27 Przykład (data parallel model), 4 procesory 34 PARALLEL COMPUTING ARRAY X, Y x1 x2.. x20 x21 x22.. x40 x41 x 42.. x60 x61` x 62.. x80 x x.. x y1 y2.. y20 y21 y22.. y40 y41 y 42.. y60 y61` y 62.. y80 y y.. y 81 82 100 81 82 100 For i:= 1 to 20 do Begin X(i):= Y(i)*PI For i:= 21 to 40 do Begin X(i):= Y(i)*PI For i:= 41 to 60 do Begin (Xi):= Y(i)*PI For i:= 61 to 80 do Begin X(i):= Y(i)*PI End; End; End; End; For i:= 81 to 100 do Begin X(i):= Y(i)*PI End; Fig. 1.28 Data Parallel Model!"#$%&'()*%+$,#%'-%$'.$'##'/$0$1/$(2*-3)*/3.4$5$%*%(%.-6$1/$7'*2%$"8$9:$ '6$6;"<.$3.!34=>=?@+$<;%#%$%',;$)#",%663.4$%*%(%.-$<"#A6$".$?B$C36-3.,-$%*%(%.-6$"8$-;%$'##'/6=$:.$6;'#%C (%("#/$'#,;3-%,-2#%6+$'**$-;%$-'6A6$;'7%$',,%66$-"$-;%$C'-'$6-#2,-2#%$-;#"24;$4*"1'*$(%("#/= D.$-;%$"-;%#$;'.C+$3.$-;%$C36-#312-%C$(%("#/$'#,;3-%,-2#%6+$-;%$C'-'$6-#2,-2#%$36$6)*3-$2)$3. )3%,%6+$%',;$)3%,%$#%63C%6$3.$-;%$*",'*$(%("#/$"8$'$-'6A=$9#"4#'((3.4$-;%$C'-'$)'#'**%*$("C%*

DPM, przykład 28 Przykład, n procesorów (zakladamy, że indeksy macierzy są 0,1,...) Deklaracja m, n, p, k Deklaracja X(m), Y(m) Wczytaj X(m) n = liczba_procesorów() //ile elementów macierzy przypada na jeden proces? k = m/n //numer procesu lub procesora: (0,...,p) p = moj_numer() //ustal granice zmienności indeksów macierzy w mojej części istart = p*k; iend =(p+1)*k-1 For i=istart to iend do Begin X(i)=Pi*Y(i) End

Przykład ( 1 procesor) 29 1. Czytaj a() z pliku!! 2. wykonaj obliczenia dla a() od a(i=1) do a(i=6)!! 3. zapisz a() do pliku! we a a wy

Przykład (3 procesory) 30 1. Czytaj a() z pliku 2. Pobierz rank Proces 0 Proces 1 Proces 2 1. Czytaj a() z pliku 2. Pobierz rank 1. Czytaj a() z pliku 2. Pobierz rank 3. If rank==0 then is=1, ie=2 4. If rank==1 then is=3, ie=4 5. If rank==2 then is=5, ie=6 6. Wykonaj obliczenia od a(is) do a(ie) 7. Zbierz wyniki; proces 0 8. If rank==0 zapisz a() do pliku 3. If rank==0 then is=1, ie=2 4. If rank==1 then is=3, ie=4 5. If rank==2 then is=5, ie=6 6. Wykonaj obliczenia od a(is) do a(ie) 7. Zbierz wyniki; proces 0 8. If rank==0 zapisz a() do pliku 3. If rank==0 then is=1, ie=2 4. If rank==1 then is=3, ie=4 5. If rank==2 then is=5, ie=6 6. Wykonaj obliczenia od a(is) do a(ie) 7. Zbierz wyniki; proces 0 8. If rank==0 zapisz a() do pliku we we we a a a wy

31 MPI Message Passing Interface

MPI 32 MPI message passing interface Standard z lat 90- ch; KLASTRY C/C++ Fortran

Numerologia...J 33 Każdy element logiczny w komputerze posiada własną nazwę, numer: komórka pamięci, dysk, procesor, proces itd. Np. procesy, wątki mają numery 0, 1, 2,... Proces może się dowiedzieć jaki numer posiada (Ogólniej może to być numeracja złożona: numer grupy, podgrupy, itd.)

MPI przykład: Wyślij N liczb int! Example - Send N Integers 34 #include <mpi.h> you = 0; him = 1; MPI_Init(&argc, &argv); include fi le MPI_Comm_rank(MPI_COMM_WORLD, &me); initialize MPI environment get process ID if ( me == 0 ) { process 0 sends error_code = MPI_Send(&data_buffer, N, MPI_INT, him, 1957, MPI_COMM_WORLD); } else if ( me == 1 ) { process 1 receives error_code = MPI_Recv(&data_buffer, N, MPI_INT, you, 1957, MPI_COMM_WORLD, MPI_STATUS_IGNORE); } MPI_Finalize(); leave the MPI environment

MPI - komunikacja 35 Proces 0 you = 0 him = 1 me = 0 MPI_Send MPI_Send N liczb całkowitych odbiorca = him = 1 tag = 1957 MPI_Recv N liczb całkowitych nadawca = you = 0 tag = 1957 Proces 1!! you = 0 him = 1 me = 1 MPI_Recv!!

6 FUNKCJI MPI 36 Proste programy MPI można tworzyć używając tylko sześciu funkcji

6 funkcji MPI (1) 37 MPI_INIT(...) Zainicjuj obliczenia MPI MPI_FINALIZE(...) Zakończ obliczenia MPI

6 funkcji MPI (2) 38 MPI_COMM_SIZE(...) Określ liczbę procesów w komunikatorze MPI_COMM_RANK(...) Określ identyfikator procesu w danym komunikatorze

6 podstawowych funkcji (3) 39 MPI_SEND(...) Wyślij wiadomość do innego procesu MPI_RECV(...) Odbierz wiadomość od innego procesu

Wymiana danych - problemy 40 Proces 0 Proces 1 MPI_send(,1, ) MPI_send(,0, ) MPI_recv(,1, ) MPI_recv(,0, ) Może dojść do impasu (zależy od implementacji). Jeśli komunikaty będą buforowane program może działać. (W standardzie MPI nosi to nazwę unsafe send/recv)

Wymiana danych - problemy 41 Proces 0 Proces 1 MPI_recv(,1, ) MPI_recv(,0, ) MPI_send(,1, ) MPI_send(,0, ) Zakleszczenie (Deadlock). MPI_recv czeka dopóty, dopóki nie wykona się send lub odwrotnie: czeka MPI_send!

Wymiana danych - problemy 42 Proces 0 Proces 1 MPI_send(,1, ) MPI_recv(,0, ) MPI_recv(,1, ) MPI_send(,0, ) OK!

Przykład. Obliczanie π 43 Wyliczyć wartość π według formuły (pokazać najpierw, że formuła jest słuszna): 1 π = 1 + 0 4 x 2 dx

Przykład. π w C (1) 44 #include "mpi.h" #include <math.h> int main(int argc, char *argv[]) { int done = 0, n, myid, numprocs, i, rc; double PI25DT = 3.141592653589793238462643; double mypi, pi, h, sum, x, a; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); while (!done) { if (myid == 0) { printf("enter the number of intervals: (0 quits) "); scanf("%d",&n); } MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) break;

Przykład. π w C (2) 45 } h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <= n; i += numprocs) { x = h * ((double)i - 0.5); sum += 4.0 / (1.0 + x*x); } mypi = h * sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf("pi is approximately %.16f, Error is.16f \n", pi, fabs(pi - PI25DT)); } MPI_Finalize(); return 0;

Komunikacja kolektywna 46 Operacje kolektywne wywoływane są przez wszystkie procesy w komunikatorze MPI_BCAST rozdziela dane z jednego procesu (root) na wszystkie procesory w komunikatorze MPI_REDUCE zbiera dane od wszystkich procesów w komunikatorze I zwraca do jednego procesu W wielu algorytmach numerycznych, SEND/RECEIVE można zastąpić parą BCAST/REDUCE, upraszczając program i podnosząc efektywność

Procedury kolektywne 47 MPI_Bcast(data, count, type, src, comm) Rozesłanie danych z src do wszystkich procesów w komunikatorze. MPI_Gather(in, count, type, out, count, type, dest, comm) Zbieranie danych ze wszystkich węzłów do węzła dest MPI_Scatter(in, count, type, out, count, type, src, comm) Wysłanie (spec) danych z węzła src do wszystkich innych

Procedury kolektywne 48 Dane à Procesy A bcast A A A A Procesy A B C D scatter gather A B C D

Procedury kolektywne 49 Funkcje dodatkowe MPI_Allgather MPI_Gatherv MPI_Scatterv MPI_Allgatherv MPI_Alltoall

Procedury redukcji 50 MPI_Reduce(send, recv, count, type, op, root, comm) Globalna operacja op redukcji; wynik znajduje się w buforze recv procesu root; op może być zdefiniowane przez użytkownika (predefiiowane operacje MPI) MPI_Allreduce(send, recv, count, type, op, comm) Jak wyżej, lecz wynik jest przekazywany do wszystkich procesów komunikatora.

Procedury redukcji 51 dane A0 B0 C0 D0 A0#A1#A2#A3 B0+B1#B2#B3 C0#C1#C2#C3 D0#D1#D2#D3 A1 B1 C1 D1 A2 B2 C2 D2 reduce A3 B3 C3 D3 # jest jednym z operatorów redukcji A0 B0 C0 D0 A1 B1 C1 D1 A2 B2 C2 D2 A3 B3 C3 D3 allreduce A0#A1#A2#A3 B0#B1#B2#B3 C0#C1#C2#C3 D0#D1#D2#D3 A0#A1#A2#A3 B0#B1#B2#B3 C0#C1#C2#C3 D0#D1#D2#D3 A0#A1#A2#A3 B0#B1#B2#B3 C0#C1#C2#C3 D0#D1#D2#D3 A0#A1#A2#A3 B0#B1#B2#B3 C0#C1#C2#C3 D0#D1#D2#D3

Procedury redukcji 52 Procedury dodatkowe MPI_Reduce_scatter(), MPI_Scan() Operacje predefiniowane sum, product, min, max, Operacje definiowane przez użytkownika: patrz opis MPI MPI_Op_create()

Komunikacja kolektywna 53 A B C D allgather A B C D A B C D A B C D A B C D A0 A1 A2 A3 B0 B1 B2 B3 C0 C1 C2 C3 D0 D1 D2 D3 alltoall A0 B0 C0 D0 A1 B1 C1 D1 A2 B2 C2 D2 A3 B3 C3 D3

Komunikacja kolektywna 54 # - operator A B C D scan A A#B A#B#C A#B#C#D A0 A1 A2 A3 B0 B1 B2 B3 C0 C1 C2 C3 D0 D1 D2 D3 reduce scatter A0#B0#C0#D0 A1#B1#C1#D1 A2#B2#C2#D2 A3#B3#C3#D3

55 OpenMP Podstawy

Realizacja OpenMP!" 56 ü Wszystkie wątki mają dostęp do wspólnej pamięci i danych dzielonych ü Dane mogę być prywatne i wspólne ü Dane prywatne dostępne są tylko dla wątku właściciela http://www.openmp.org '()*+,-$+./*0 ü Transfer danych odbywa się bardziej przejrzyście # % & ü Synchronizacja jest wciąż potrzebna lecz jest przeważnie ukryta $ $ $

Literatura 57 Wprowadzenie do obliczeń równoległych. Zbigniew J. Czech. PWN, Warszawa, 2013. Introduction to Parallel Computing. A. Grama, G. Karypis, V. Kumar, B. A. Gupta. Addison- Wesley, 2003. Parallel Programming. Rauber & Ruenger. Springer, 2010.

Za tydzień... 58