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

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

Wprowadzenie do programowania współbieżnego

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

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

Klasyczne problemy współbieżności. Problem producenta i konsumenta Problem czytelników i pisarzy Problem pięciu filozofów

O superkomputerach. Marek Grabowski

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

Algorytmy i Struktury Danych

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

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

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

Analiza efektywności przetwarzania współbieżnego. Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak Grudzień 2015

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

3URJUDPRZDQLHZVSyáELH*QHZVWS

4. Procesy pojęcia podstawowe

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

4. Procesy pojęcia podstawowe

Analiza efektywności przetwarzania współbieżnego

Wprowadzenie do OpenMP

Nowoczesne technologie przetwarzania informacji

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

Przetwarzanie Równoległe i Rozproszone

Programowanie Równoległe i Rozproszone

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

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

Podstawy programowania komputerów

Równoległe algorytmy sortowania. Krzysztof Banaś Obliczenia równoległe 1

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

4. Procesy pojęcia podstawowe

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

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

ANALIZA EFEKTYWNOŚCI MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

Programowanie współbieżne Wykład 7. Iwona Kochaoska

SOP2 - semafory. grudzień

Modelowanie procesów współbieżnych

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

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

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

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Wyklad 11 Języki programowania równoległego

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

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne

Open MP wer Rafał Walkowiak Instytut Informatyki Politechniki Poznańskiej Wiosna

EFEKTYWNOŚĆ MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

Programowanie Rozproszone i Równoległe

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

Zadania na zaliczenie przedmiotu Przetwarzanie równoległe Zebrał dla roku.ak. 2015/2016 Rafał Walkowiak,

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

PRZEWODNIK PO PRZEDMIOCIE

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

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Programowanie Współbieżne. Algorytmy

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Nazwa Wydziału Nazwa jednostki prowadzącej moduł Nazwa modułu kształcenia Kod modułu Język kształcenia Efekty kształcenia dla modułu kształcenia

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix)

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

Systemy operacyjne III

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

16. Taksonomia Flynn'a.

PROBLEMY NIEROZSTRZYGALNE

Wstęp do programowania 2

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

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

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.

Algorytm. a programowanie -

OpenMP. Programowanie aplikacji równoległych i rozproszonych. Wykład 2. Model programowania. Standard OpenMP. Dr inż. Tomasz Olas

Wprowadzenie do zrównoleglania aplikacji z wykorzystaniem standardu OpenMP

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

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

Programowanie współbieżne i rozproszone

HPC na biurku. Wojciech De bski

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Elementy składowe: Przenośność oprogramowania Model SPMD Szczegółowe wersje (bindings) dla różnych języków programowania

Obliczenia iteracyjne

Program jest więc strukturą statyczną zapisaną na jakimś nośniku. Natomiast proces jest wykonującym się programem.

Akademia Techniczno-Humanistyczna w Bielsku-Białej

TEORETYCZNE PODSTAWY INFORMATYKI

Systemy Operacyjne synchronizacja i komunikacja procesów

Obliczenia równoległe

Programowanie równoległe

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Metodyka i Technika Programowania 1

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

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

Programowanie i techniki algorytmiczne

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Programowanie Równoległe i Rozproszone. Algorytm Kung a. Algorytm Kung a. Programowanie Równoległe i Rozproszone Wykład 8. Przygotował: Lucjan Stapp

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Zaawansowane algorytmy i struktury danych

Systemy operacyjne. Systemy operacyjne. Systemy operacyjne. Zadania systemu operacyjnego. Abstrakcyjne składniki systemu. System komputerowy

Instrukcja projektowa cz. 2

Pytania przykładowe (z ubiegłych lat) na zaliczenie przedmiotu Przetwarzanie równoległe Przygotował Rafał Walkowiak Poznań 3.01.

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

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4

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

Transkrypt:

Równoległość i współbieżność Wykonanie sekwencyjne. Poszczególne akcje procesu są wykonywane jedna po drugiej. Dokładniej: kolejna akcja rozpoczyna się po całkowitym zakończeniu poprzedniej. Praca współbieżna polega na tym, że składające się na nią zjawiska, czynności i działania odbywają się równocześnie. Istotny jest przy tym punkt widzenia obserwatora. Wykonanie współbieżne. Kolejna akcja rozpoczyna się przed zakończeniem poprzedniej. Nie mówimy nic na temat tego, czy akcje te są wykonywane w tym samym czasie czy też w przeplocie. Wykonanie równoległe. Kilka akcji jest wykonywanych w tym samym czasie. Jest to "prawdziwa" współbieżność, możliwa do uzyskania na komputerze z wieloma procesorami. 1

Dlaczego warto i należy rozważać programy współbieżne? Niektóre problemy są z natury współbieżne, ich rozwiązania dają się łatwo i elegancko wyrazić w postaci niezależnie wykonujących się procedur. Współczesne systemy operacyjne zezwalają na uruchamianie wielu procesów jednocześnie. Malejące ceny sprzętu sprzyjają powstawaniu architektur wieloprocesorowych, w których można uzyskać prawdziwą współbieżność, tzn. wykonywać jednocześnie wiele procesów na różnych procesorach. Rozpowszechnienie się sieci komputerowych. 2

Przykłady prac, które można realizować równolegle 1. Podstawienie X = 3 <- 1 procesor Y = 4 <- 2 procesor Uwaga instrukcji: X = 3 Y = X nie można w bezpośredni sposób zrównoleglić 2. Obliczenie wartości wyrażenia a*b + (c+d)*(e-f) 3

3. Sortowanie tablicy liczb qsort(dół, góra): jeżeli dół góra // nie więcej niż jeden element nie rób nic koniec // cel: podzielić tablicę ze względu na środek. filter() // cel: posortować rekurencyjnie nowe przedziały qsort(dół, środek-1) qsort(środek+1, góra) 4

4. Sumowanie elementów tablicy 5

Rozszerzająca się równoległość Polepszenie rzędu wielkości np. złożoności czasowej wymaga wzrostu liczby procesorów. Sumowanie równoległe: aby otrzymać złożoność czasową O(log n) potrzebujemy n/2 procesorów. Mając do dyspozycji tylko n. n procesorów, złożoność czasowa będzie też rzędu Liczbę procesorów potrzebną do wykonania algorytmu równoległego, nazywamy złożonością rozmiaru. 6

Złożoność iloczynowa Iloczyn czasu wykonania i rozmiaru (liczby potrzebnych procesorów). dla pełnego sumowania równoległego: O(log n) * O(n) = O(n log n) dla sumowania niepełnego : O( n ) * O( n ) = O(n) dla równoległego sortowania szybkiego: O(n) * O(n) = O(n 2 ) dla sekwencyjnego sortowania szybkiego: 1 * O(n log n) = O(n log n) optymalne sortowanie sieciowe : O(n) * O(log n) = O(n log n) Dla złożoności iloczynowej prawdziwe pozostaje dolne ograniczenie dla danego problemu, wyliczone przy założeniu sekwencyjności obliczeń. 7

Prawo Amdahla 1 Przyspieszenie uzyskiwane na n procesorach wynosi 1 S S +, n gdzie S jest częścią kodu, która nie może być wykonana równolegle. Przykłady: Jeżeli na czteroprocesorowym komputerze uruchomimy program, który aż w 95% może być wykonywany równolegle, uzyskamy nieco ponad trzyipółkrotne przyspieszenie. Jeżeli na szesnastoprocesorowym komputerze uruchomimy program, który tylko w 80% może być wykonany równolegle, zaobserwujemy zaledwie czterokrotny przyrost prędkości wykonania! W granicy, gdy 1 n, przyspieszenie wynosi S. Np. S = 25% = 1/4, przyspieszenie maksymalnie 4 krotne, niezależnie od liczby procesorów. 8

Systemy rozproszone Składniki współbieżne są fizycznie od siebie oddalone. Pojawia się problem komunikacji między składnikami systemu (procesorami). Przykład: tani hotel jedna łazienka na piętro, wielonarodowi goście, zimny korytarz. Jak sprawić, żeby każdy gość miał możliwość skorzystania z prysznica? Zasób krytyczny każdy proces potrzebuje go na wyłączność przez jakiś czas. Przykłady: prysznic, drukarka, stacja dysków itp. Problemy do rozwiązania: Zapobieganie zastojom (sytuacjom, w której żaden procesor nie może działać dalej) Zapobieganie zagłodzeniom (jeden lub więcej procesor, ale nie wszystkie, nie mogą działać dalej) 9

Rozwiązywanie problemów związanych z programowaniem równoległym Mamy n procesorów. Każdy z nich wykonuje wielokrotnie pewną własną działalność, po której występuje sekcja krytyczna. Cykl życia i-tego procesora: Powtarzaj bez końca - wykonuj własne czynności - wykonaj sekcję krytyczną Własne czynności każdego z osobna procesora nie mają nic wspólnego z czynnościami pozostałych. Sekcja krytyczna jest sprawą wszystkich procesorów: żadne dwa procesory nie mogą być równocześnie w swoich sekcjach krytycznych problem wzajemnego wykluczania. 10

Rozwiązanie n = 2, procesory P1 i P2 zmienne pomocnicze: X1, X2, Z Z może mieć wartość 1 albo 2 i mogą ją zmieniać oba procesory zmienna dzielona X1, X2 mogą mieć wartości tak lub nie, czytać ją mogą oba procesory, ale zmieniać tylko procesory z odpowiednim indeksem zmienne rozproszone Wartości początkowe: X1 = nie, X2 = nie, Z = 1 lub 2 (bez znaczenia) 11

Procesor P1 Powtarzaj bez końca: - wykonuj własne czynności, aż do momentu w którym wejście do sekcji krytycznej stanie się pożądane - X1 = tak - Z = 1 - czekaj, aż albo X2 = nie, albo Z = 2 (albo obie relacje są spełnione) - wykonaj sekcję krytyczną - X1 = nie 12

Procesor P2 Powtarzaj bez końca: - wykonuj własne czynności, aż do momentu w którym wejście do sekcji krytycznej stanie się pożądane - X2 = tak - Z = 2 - czekaj, aż albo X1 = nie, albo Z = 1 (albo obie relacje są spełnione) - wykonaj sekcję krytyczną - X2 = nie Xi wskaźnik chęci procesora Pi wejścia do sekcji krytycznej Z wskaźnik uprzejmości 13

Zamieńmy dwie linijki w kodzie: Procesor P1 Powtarzaj bez końca: - wykonuj własne czynności, aż do momentu w którym wejście do sekcji krytycznej stanie się pożądane - Z = 1 - X1 = tak - czekaj, aż albo X2 = nie, albo Z = 2 (albo obie relacje są spełnione) - wykonaj sekcję krytyczną - X1 = nie 14

Przykład scenariusza błędu X1 = nie (wartości początkowe) X2 = nie P2: Z = 2 P1: Z = 1 P1: X1 = tak P1: wchodzi do sekcji krytycznej na mocy tego, że X2 = nie P2: X2 = tak P2: wchodzi do sekcji krytycznej na mocy tego, że Z = 1 15

Protokół dla n procesorów Wprowadzamy n poziomów nalegania X[i] Procesor Pi Powtarzaj bez końca: - wykonuj własne czynności, aż do momentu w którym wejście do sekcji krytycznej stanie się pożądane - dla każdego j od 1 do n-1 wykonuj - X[i] = j - Z[j] = i - czekaj, aż albo X[k] < j dla wszystkich k i, albo Z[j] i - wykonaj sekcję krytyczną - X[i] = 0 16

Problem jedzących filozofów Ograniczenia: jeść można tylko przy użyciu dwóch widelców, filozof nie ma dostępu do widelców poza zasięgiem. Jedno z możliwych rozwiązań: odźwierny, który pilnuje, żeby przy stole siedziało co najwyżej n-1 filozofów. Każde rozwiązanie musi opierać się na instytucji odźwiernego bądź na pamięci współdzielonej. 17

Problem czytelników i pisarzy Problem synchronizacji dostępu do jednego zasobu (pliku, rekordu bazy danych) dwóch rodzajów procesów dokonujących i nie dokonujących w nim zmian. W problemie czytelników i pisarzy zasób jest dzielony pomiędzy dwie grupy procesów: czytelnicy wszystkie procesy nie dokonujące zmian w zasobie pisarze pozostałe procesy Jednoczesny dostęp do zasobu może uzyskać dowolna liczba czytelników. Pisarz może otrzymać tylko dostęp wyłączny. Równocześnie z pisarzem dostępu do zasobu nie może otrzymać ani inny pisarz, ani czytelnik, gdyż mogłoby to spowodować błędy. 18

Metody programowania równoległego MPI Message Passing Interface (1994 r.) Przesyłanie komunikatów dla poszczególnych procesorów. Biblioteki dla wielu języków programowania (C/C++, Fortran, Ada itp.) Szczególnie nadaje się do systemów rozproszonych. OpenMP (1997 r.) Uwalnia programistę od bezpośredniego sterowania procesorami. Zbiór dyrektyw dla kompilatora, kompilator rozdziela zadania Szczególnie nadaje się do systemów z pamięcią współdzieloną. 19

Przykłady programowania równoległego Przykład 1 int A[1000]; int i; for (i=0; i<1000; i++) A[i] = 100 * i; 1 procesor: for (i=0; i<500; i++) A[i] = 100 * i; 2 procesor: for (i=500; i<1000; i++) A[i] = 100 * i; 20

Realizacja w OpenMP: int A[1000]; int i #pragma omp parallel for private(i) shared(a) for (i=0; i<1000; i++) A[i] = 100 * i; #pragma omp end parallel for 21

Przykład 2 int a; int i; a = 1; for (i=1; i<1000; i++) a = a * i; Próbujemy jak poprzednio: 1 procesor: for (i=1; i<500; i++) a = a * i; 2 procesor: for (i=500; i<1000; i++) a = a * i; 22

Procesor nr 1 może odczytać zmienną a, wyliczyć a*i, a w tym czasie procesor nr 2 może odczytać zmienną a, wyliczyć a*i i zapisać nową wartość do zmiennej a! Zmienna a jest zasobem krytycznym, a operacja jej odczytu, wyliczenia nowej wartości i zapisu jest sekcją krytyczną. 1 procesor: for (i=1; i<500; i++) sekcja krytyczna: a = a * i; 2 procesor: for (i=500; i<1000; i++) sekcja krytyczna: a = a * i; 23

Inne rozwiązanie: 1 procesor: for (i=1; i<500; i++) a1 = a1 * i; 2 procesor: for (i=500; i<1000; i++) a2 = a2 * i; teraz czekamy, aż oba procesory skończą działanie i zwrócą wynik i wykonujemy (na dowolnym z nich) a = a1 * a2 24

Realizacja w OpenMP jest prosta (problem jest bardzo często spotykany): #pragma omp parallel for private(i) shared(a) reduction(*:a) for (i=0; i<1000; i++) a = a * i; #pragma omp end parallel for Przykład 3 wynik1 = jakieś czasochłonne obliczenie nr 1 (niezależne od obliczenia nr 2) zapisz wynik1 do pliku wynik2 = jakieś czasochłonne obliczenie nr 2 (niezależne od obliczenia nr 1) zapisz wynik2 do pliku wynik = wynik1 + wynik2 zapisz wynik do pliku 25

Procesor1: wynik1 = jakieś czasochłonne obliczenie nr 1 (niezależne od obliczenia nr 2) sekcja krytyczna: zapisz wynik1 do pliku Procesor2: wynik2 = jakieś czasochłonne obliczenie nr 2 (niezależne od obliczenia nr 1) sekcja krytyczna: zapisz wynik2 do pliku czekaj na wyniki z poszczególnych procesorów Procesor 1 lub 2 (albo obydwa naraz, nic się złego nie stanie) wynik = wynik1 + wynik2 Procesor 1 lub 2 (ale tylko jeden z nich!) zapisz wynik do pliku 26

Realizacja w OpenMP #pragma omp parallel sections { #pragma omp section wynik1 = obliczenie nr 1 #pragma omp critical zapisz wynik1 do pliku #pragma omp end critical #pragma omp section } wynik2 = obliczenie nr 2 #pragma omp critical zapisz wynik2 do pliku #pragma omp end critical 27

#pragma omp barrier wynik = wynik1 + wynik2 #pragma omp master zapisz wynik do pliku #pragma omp end master #pragma omp end parallel sections 28