T1 T2

background image

Programowanie współbieżne

Wprowadzenie do programowania współbieżnego.

Podstawowe pojęcia programowania współbieżnego.

Prowadzący: dr inż. Dariusz Pierzchała

dariusz.pierzchala@wat.edu.pl

background image

Literatura przedmiotu

1. Literatura obowiązkowa
1.1. M. Ben-Ari: „Podstawy programowania współbieżnego i rozproszonego”, WNT, Warszawa 2009.
1.2. M. Ben-Ari: „Podstawy programowania współbieżnego i rozproszonego”, WNT, Warszawa 1996, sygn.

53403.

1.3. A. Karbowski, E. Niewiadomska-Szynkiewicz: „Programowanie równoległe i rozproszone”, Oficyna

Wydawnicza PW, Warszawa 2009.

1.4. Z. Weiss, T. Gruźlewski: „Programowanie współbieżne i rozproszone w przykładach i zadaniach”,

WNT, Warszawa 1993.

1.5. W. Stallings: „Systemy operacyjne. Struktura i zasady budowy”, PWN, Warszawa 2006 (niniejsza

książka została również wydana przez Wydawnictwo Robomatic w 2004 roku pt. „Systemy

operacyjne”).

1.6. A. Silberschatz, P. B. Galvin: „Podstawy systemów operacyjnych”, WNT, Warszawa 1993, 2000, 2005

- sygn. 56239, 51409 i in.

1.7. A.S. Tanenbaum: „Systemy operacyjne”, Helion, 2010.
1.8. B. Goetz i in.: „Java. Współbieżność dla praktyków”, Helion, 2007.
1.9. M. Herlihy, N. Shavit: „Sztuka programowania wieloprocesorowego”, PWN, 2010.

2. Literatura uzupełniająca
2.1. J. Berdychowski, G. Bliźniuk: „Techniki programowania”, skrypt WAT, sygn. S-53260.
2.2. G. Gębal: „Programowanie współbieżne w Adzie”, Wydawnictwo Stachowski, 1999.
2.3. B. Goodheart, J. Cox: „Sekrety magicznego ogrodu. UNIX® System V Wersja 4 od środka”, WNT,

Warszawa 2001.

2.4. U. Vahalia: „Jądro systemu UNIX. Nowe horyzonty”, WNT, Warszawa, 2001.
2.5. J. Richter: „Programowanie aplikacji dla Microsoft Windows”, Wydawnictwo RM, 2002.
2.6. C. Breshears: „The Art of Concurrency”, O’Reilly, 2009.
2.7. D. Harel: „Rzecz o istocie informatyki. Algorytmika”, WNT, 1992 i późn.
2.8. S. Wrycza, B. Marcinkowski, K. Wyrzykowski: „Język UML 2.0”, Helion, 2005.
2.9. J. Richter, Ch. Nasarre: „Windows via C/C++”, Microsoft Press, 2007.
2.10. J. Duffy: „Concurrent Programming on Windows”, Addison-Wesley, 2009.
2.11. Z. Huzar, Z. Fryźlewicz, I. Dubielewicz, B. Hnatk: „Ada 95”, Helion, Gliwice 1998.

background image

Literatura przedmiotu

background image

Podstawowe pojęcia programowania współbieżnego

4

Klasyczne (sekwencyjne) ujęcie

programu komputerowego

Program komputerowy składa się z opisu (deklaracji)
danych oraz wykonywalnych instrukcji (zapisanych w
języku programowania);

Instrukcje te wykonywane są przez procesor (komputer);

W trakcie wykonywania programu niezbędne do realizacji
dane przechowywane są w pamięci (podręcznej,
wewnętrznej, zewnętrznej);

Jak może (lub powinien) być
konstruowany program,
gdy mamy do dyspozycji
więcej niż jeden procesor?

Architektura wg von Neumanna

Spójrzmy na typowe zadania (logistyczne, matematyczne)

background image

Podstawowe pojęcia programowania współbieżnego

5

Transport towarowy

1 auto x 25 ton x 5 godz.

czy…

5 aut x 25 ton x 1 godz.?

background image

Podstawowe pojęcia programowania współbieżnego

6

Algorytmy obliczania całki

oznaczonej

sekwencyjny

czy

równoległy?

Każde pole może
być wyznaczone
przez jeden lub
wiele procesorów
(jednocześnie)

Każde pole może
być wyznaczone
przez jeden lub
wiele procesorów
(jednocześnie)

background image

Podstawowe pojęcia programowania współbieżnego

7

Rodzaje równoległości

Równoległość procesowa - zbiór współpracujących
elementów, z których każdy jest dość złożony i działa w sposób
zbliżony, ale niekoniecznie identyczny z innymi;
Przykłady:

działanie supermarketu, banku, poczty - wiele kas (okienek),

budowa - wielu murarzy, malarzy, tynkarzy, itp.

transport – konwój ciężarówek jednocześnie wiozących
ładunek;

Obok równoległości procesowej wyróżnia się także:

równoległość tablicową (np. musztra, aerobik) - pełna
synchronizacja działań,

równoległość potokową (np. taśma produkcyjna) - jednoczesne
wykonywanie kolejnych etapów złożonego procesu

;

background image

Podstawowe pojęcia programowania współbieżnego

8

„Równoległe” ujęcie procesu

(programu)

Podsumowując - z jednej strony wiemy, że:

Wiele problemów (z różnych dziedzin życia) jest ze swej
natury „równoległych”;

Jeśli programy komputerowe muszą oczekiwać na dane,
może to powodować wytracanie czasu procesora;

Z drugiej zaś strony:

Aktualne ceny i dostępność sprzętu o architekturze
wieloprocesorowej, a także szybkie sieci komputerowe
wymusiły rozwój algorytmów, protokołów, narzędzi, języków
pozwalających na „zrównoleglenie” części zadań – tym
samym przyspieszenie ich realizacji;

Niezbędne jest „zrównoleglenie” działania programów!

Pojęcie „równolegle” jest abstrakcyjnie – nadamy mu znaczenia w czasie zajęć.

Pojęcie „równolegle” jest abstrakcyjnie – nadamy mu znaczenia w czasie zajęć.

background image

Podstawowe pojęcia programowania współbieżnego

9

Rodzaje równoległości (1/2)

Równoległość na poziomie bitów (ang. bit-level
parallelizm
) –zwiększanie długości słowa procesora wpływa
na liczbę instrukcji potrzebnych do wykonania operacji na
zmiennych, których wielkość jest większa niż długość słowa.

Równoległość na poziomie instrukcji (ang. instruction
level parallelizm
) – techniki implementowane zazwyczaj
przez kompilator i wykorzystujące specjalną budowę
mikroprocesorów, które umożliwiają uruchamianie niezależnych
od siebie instrukcji równocześnie – np. potokowość,
wykonywanie poza kolejnością, wykonywanie spekulatywne.

Równoległość na poziomie danych (ang. data
parallelizm
) – ten sam zbiór instrukcji jest jednocześnie
wykonywany na wielu blokach danych – np. przetwarzanie
SIMD.

background image

Podstawowe pojęcia programowania współbieżnego

10

Rodzaje równoległości (2/2)

Równoległość na poziomie pętli (ang. loop-level
parallelizm
) –iteracje pętli w kodzie wykonywalnym
rozdzielane są między dostępnymi jednostkami
obliczeniowymi - np. model obliczeniowy OpenMP.

Równoległość na poziomie zadania (ang. task
parallelizm
) –obliczenia realizowane są przez wiele
jednostek obliczeniowych realizujących różne procesy
sekwencyjne na tych samych lub różnych danych.

background image

Podstawowe pojęcia programowania współbieżnego

11

Równoległość na poziomie

(pod)zadania

Algorytm sekwencyjny:

Algorytm równoległy:

START

STOP

Krok_1

Krok_2

Krok_4

Krok_6

Krok_3

Krok_5

START

STOP

Krok_1

Krok_2

Krok_3

Krok_4

Krok_5

Krok_6

Krok_2 i
Krok_4 nie
mogą być od
siebie
zależne!

background image

Podstawowe pojęcia programowania współbieżnego

12

Przykład - pierwiastki równania

kwadratowego

START

STOP

=b

2

-4ac

x

1

=(-b-sqrt())/2a

x

2

=(-b+sqrt())/2a

Wypisz x

1

, x

2

START

STOP

=b

2

-4ac

x

1

=(-b-sqrt())/2a

x

2

=(-b+sqrt())/2a

Wypisz x

1

, x

2

Algorytm sekwencyjny: Algorytm

równoległy:

background image

Podstawowe pojęcia programowania współbieżnego

13

Przykład – sortowanie tablicy N liczb

Algorytm sekwencyjny:

Algorytm sekwencyjny:

procedure sort (i, j)
begin
...
m := (i+j) div 2;

sort (i, m);
sort (m+1, j);

merge (i, m, j);
end

Algorytm równoległy:

procedure sort (i, j)
begin
...
m := (i+j) div 2;

cobegin

sort (i, m);
sort (m+1, j);

coend

merge (i, m, j);
end

cobegin

” i „

coend

” - specjalne instrukcje – kod między nimi wykonuje się

współbieżnie

background image

Podstawowe pojęcia programowania współbieżnego

14

Programowanie współbieżne

Programowanie współbieżne (M. Ben-Ari) - zbiór technik i
notacji programistycznych służących do wyrażania potencjalnej
równoległości oraz do rozwiązywania zagadnień związanych
z powstającymi przy tym problemami: synchronizacji i
komunikacji.

Programowanie współbieżne pozwala rozważać równoległość
algorytmu obliczeniowego bez wdawania się w szczegóły
implementacyjne

(liczba procesorów, model procesu, model pamięci,

implementacja obiektów synchronizacji, algorytm wznawiania
procesów, mechanizmy komunikacji, itp.)

.

W istocie implementacja rzeczywistej równoległości
(programowanie równoległe) jest zagadnieniem związanym z
zasobami systemu komputerowego i w zasadzie niezależnym
od programowania współbieżnego.

background image

Podstawowe pojęcia programowania współbieżnego

15

Programowanie:

- współbieżne, - równoległe, -

rozproszone

PROGRAMOWANIE

ROZPROSZONE

(distributed)

PROGRAMOWANIE

RÓWNOLEGŁE

(parallel)

PROGRAMOWANIE

WSPÓŁBIEŻNE

(concurrent)

background image

Podstawowe pojęcia programowania współbieżnego

16

Programowanie:

- współbieżne, - równoległe, -

rozproszone

- Architektura sprzętowa

Systemy z pamięcią

współdzieloną

Wieloprocesory

Systemy ściśle powiązane

Systemy rozproszone

Multikomputery

Systemy luźno powiązane

background image

Podstawowe pojęcia programowania współbieżnego

17

Odmiany programowania

współbieżnego

(z pominięciem programowania równoległego)

Programowanie współbieżne

Klasyczne

programowanie współbieżne

(systemy z pamięcią współdzieloną)

Współbieżność rozproszona

(systemy wieloprocesorowe

z pamięcią lokalną -

systemy rozproszone)

background image

Podstawowe pojęcia programowania współbieżnego

18

Współbieżność klasyczna i

rozproszona

Klasyczne programowanie współbieżne - polega na
dekompozycji problemu na wiele elementów
oprogramowania, które są wykonywane przez pewną liczbę
procesorów z pamięcią współdzieloną, tzw. systemy ściśle
powiązane, inaczej systemy wieloprocesorowe.

Współbieżność rozproszona - polega na dekompozycji
problemu na wiele elementów oprogramowania, które są
wykonywane przez pewną liczbę niezależnych procesorów
(własny zegar taktujący
i pamięć operacyjna) komunikujących się poprzez sieć
połączeń
(np. sieć lokalna, przełącznica krzyżowa, itp.), czyli tzw.
systemy luźno powiązane, inaczej systemy rozproszone.

background image

Podstawowe pojęcia programowania współbieżnego

19

Programowanie współbieżne

na tle innych dziedzin informatyki

Języki
programowania

Języki
programowania

Systemy

Systemy

operacyjne

operacyjne

Systemy

Systemy

operacyjne

operacyjne

Programowanie

Programowanie

współbieżne

współbieżne

• Większość języków programowania nie posiada mechanizmów

programowania współbieżnego (równoległego);

• Pra–język C także nie został zaprojektowany do programowania

zadań do współbieżnej realizacji - jednakże jako język systemu
Unix może wywoływać funkcje systemowe;

• Pierwszym językiem dedykowanym była Ada (~1980r.);

• Kolejnym istotnie ważnym językiem (poza laboratoryjnymi

rozwiązaniami) stała się Java;

• Większość języków programowania nie posiada mechanizmów

programowania współbieżnego (równoległego);

• Pra–język C także nie został zaprojektowany do programowania

zadań do współbieżnej realizacji - jednakże jako język systemu
Unix może wywoływać funkcje systemowe;

• Pierwszym językiem dedykowanym była Ada (~1980r.);

• Kolejnym istotnie ważnym

językiem (poza laboratoryjnymi

rozwiązaniami)

stała się Java

;

background image

Podstawowe pojęcia programowania współbieżnego

20

Języki i środowiska programowania współbieżnego

Z konstrukcjami programowania

współbieżnego -

Concurrent Pascal, Concurrent C, CSP, Ada,

Modula, Java, C#, Linda, Occam, Orca

Umożliwiające programowanie

współbieżne (C/C++, Delphi Pascal).

Język programowania nie zawiera

mechanizmów synchronizacji procesów, lecz

pozwala wykorzystywać obiekty synchronizacji

dostarczane przez system operacyjny

Środowiska i biblioteki programowania

równoległego i rozproszonego -

PVM, MPI, OpenMP, CUDA

background image

Podstawowe pojęcia programowania współbieżnego

21

Program sekwencyjny – program

współbieżny

background image

Podstawowe pojęcia programowania współbieżnego

22

Program sekwencyjny

Program sekwencyjny:

realizacja pojedynczego ciągu instrukcji;

zbiór operacji całkowicie uporządkowany w czasie.

Działanie programu sekwencyjnego polega na wykonywaniu
kolejnych kroków obliczeń zgodnie z przyjętym algorytmem
rozwiązania, przy czym warunkiem koniecznym wykonania
następnego kroku jest zakończenie kroku poprzedniego.

W dowolnej chwili czasu jest wykonywany dokładnie jeden i
tylko jeden krok (instrukcja) algorytmu.

Należy zwrócić uwagę, że wyniki procesów sekwencyjnych można

zawsze odtworzyć na podstawie danych wejściowych.
„Ta własność procesów sekwencyjnych wraz z ich szczególną
prostotą powoduje że są one ważnymi składnikami służącymi do
budowy obliczeń współbieżnych.” –

Per Brinch Hansen „Podstawy systemów

operacyjnych”, WNT 1979, str. 44

background image

Podstawowe pojęcia programowania współbieżnego

23

Program sekwencyjny – sekwencja

procesów

czas

Proces 4

t

4P

P.. 3

t

3P

Proces 2

t

2P

Proces 1

t

1Z

=

t

1P

t

2Z

t

iZ

– czas żądania uruchomienia procesu

t

iP

– czas rozpoczęcia wykonywania procesu

gdzie i - numer procesu

t

3Z

t

4Z

t

S

= t

1

+ t

2

+ t

3

+ t

4

t

1

t

2

t

3

t

4

background image

Podstawowe pojęcia programowania współbieżnego

24

Program sekwencyjny

Program sekwencyjny może być:

skończonyosiąga stan końcowy w czasie
skończonym:

typowy proces usługowy, np. wyliczenie wartości zmiennej;

nieskończonyrealizuje algorytm dopóty, dopóki np.
pracuje sprzęt i środowisko operacyjne (na którym został
uruchomiony) lub nie został spełniony określony
warunek końcowy :

interaktywny program reagujący na polecenia użytkownika
napływające w losowych chwilach;

system operacyjny;

proces w błędnie zdefiniowanej nieskończonej pętli;

background image

Podstawowe pojęcia programowania współbieżnego

25

Program współbieżny

Program współbieżny jest zbiorem programów sekwencyjnych
wykonywanych abstrakcyjnie „równolegle”.

Każdy program sekwencyjny wchodzący w skład programu
współbieżnego będziemy nazywali procesem sekwencyjnym.

Każdy proces sekwencyjny może być realizowany na abstrakcyjnym
(wirtualnym) procesorze – fizycznie występują różne architektury;

Mówimy, że dwa (lub więcej) procesy są współbieżne, jeśli jeden z
nich rozpoczyna się przed zakończeniem drugiego;

W świetle tej definicji proces nieskończony jest współbieżny ze
wszystkimi procesami, które rozpoczęły się od niego później;

Powyższa definicja mówi jedynie o potencjalnej równoległości.

Na poziomie sprzętu równoległość może być rzeczywista lub pozorna.
Gdy liczba procesorów dorównuje lub przewyższa liczbę procesów
sekwencyjnych, to mówimy o równoległości rzeczywistej.
W przeciwnym przypadku mówimy o równoległości pozornej.

background image

Podstawowe pojęcia programowania współbieżnego

26

Program współbieżny

czas

Proces 4

P.. 3

Proces 2

Proces 1

t

1ZP

t

2ZP

t

3ZP

t

4ZP

t

W

<= t

1

+ t

2

+ t

3

+ t

4

t

1

t

2

t

3

t

4

background image

Podstawowe pojęcia programowania współbieżnego

27

Wieloprogramowość - wielozadaniowość

background image

Podstawowe pojęcia programowania współbieżnego

28

Wieloprogramowość i

wielozadaniowość

(z punktu widzenia programowania

współbieżnego)

Wieloprogramowość - jest współbieżnym wykonywaniem
wielu niezależnych programów na jednym procesorze.

Obejmuje ona przełączanie procesora do innego programu,
gdy aktualnie wykonywany zamówi operację WE/WY oraz
systemu
z podziałem czasu procesora.

Pojawienie się wieloprogramowości stworzyło konieczność
synchronizacji pracy programów.

Wielozadaniowość (multitasking) - rozwiązywanie problemu
przez jego dekompozycję na wiele procesów współbieżnych.

Wielozadaniowość jest metodą rozwiązania problemu.

Ziarnistość współbieżności;

Należy zwrócić uwagę na różnice w definicjach powyższych pojęć w

programowaniu współbieżnym oraz systemach operacyjnych.

background image

Podstawowe pojęcia programowania współbieżnego

29

Wieloprogramowość i

wielozadaniowość

Ziarnistość programowania współbieżnego

Ziarnistość obliczeń nie jest pojęciem ścisłym - opisuje liczbę
operacji obliczeniowych między punktami synchronizacji
procesów oraz synchronizacji dostępu do danych (na maszynach
z pamięcią wspólną) lub komunikacji (na maszynach z pamięcią
lokalną).

W przypadku programowania współbieżnego zlicza się operacje
między kolejnymi chwilami synchronizacji lub wymiany
komunikatów.

Im większa jest liczba operacji, tym większa ziarnistość (grube
ziarno, gruboziarnistość - ang. coarse grain).

Ziarnistość mała (drobnoziarnistość - ang. fine grain)
występuje, gdy mała liczba danych przypada na procesor,
natomiast jest duża częstotliwość komunikacji i synchronizacji.

Im „mniejsze” procesy, tym więcej możliwej współbieżności,
ale także większy narzut czasu obsługi.

background image

Podstawowe pojęcia programowania współbieżnego

30

Prawo Amdahl’a (1967)

http://en.wikipedia.org/wiki/File:AmdahlsLaw.svg

Potencjalne możliwe przyśpieszenie S algorytmu jest równe:

n – liczba procesów,
T

1

– czas wykonania (n=1),

T

n

– czas wykonania dla n

procesów,
F – udział części nierównoległej.

Główny zarzut: prawo

Amdahl’a ma zastosowanie
tylko dla aplikacji z
niezmiennym rozmiarem
zadania

background image

Podstawowe pojęcia programowania współbieżnego

31

Zasady: (1) dekompozycji, (2)

abstrakcji

(3) sprzyjania naturalnym ludzkim

własnościom

„Dostatecznie zadawalający model

funkcjonowania obiektów i systemów świata

rzeczywistego”

powstaje poprzez zastosowanie zasad:

Zasada dekompozycji - rozdzielenie złożonego problemu na podproblemy,

które można rozpatrywać i rozwiązywać niezależnie od siebie i niezależnie od

całości  procesy sekwencyjne;

Zasada abstrakcji - eliminacja, ukrycie lub pominięcie mniej istotnych

szczegółów rozważanego przedmiotu lub mniej istotnej informacji;

wyodrębnianie cech wspólnych i niezmiennych dla pewnego zbioru bytów i

wprowadzaniu pojęć lub symboli oznaczających takie cechy

stany i oddziaływania procesów;

Zasada sprzyjania naturalnym ludzkim własnościom - dopasowanie

modeli pojęciowych i modeli realizacyjnych systemów do wrodzonych ludzkich

własności psychologicznych, instynktów oraz mentalnych mechanizmów

percepcji i rozumienia świata.

Powyższe zasady + (4-ta) zasada ponownego użycia

podstawowe

zasady inżynierii oprogramowania!

background image

Podstawowe pojęcia programowania współbieżnego

32

Abstrakcja programowania

współbieżnego (1/2)

Dwiema najważniejszymi technikami stosowanymi przy
tworzeniu abstrakcji programistycznych są:

modularność (hermetyzacja, enkapsulacja),

współbieżność.

Programowanie współbieżne jest abstrakcją stworzoną w
celu modelowania i wnioskowania o dynamicznym
zachowaniu programów.

Abstrakcja programowania współbieżnego polega na
modelowaniu i badaniu przeplatanych ciągów wykonań
atomowych instrukcji procesów sekwencyjnych.

background image

Podstawowe pojęcia programowania współbieżnego

33

Abstrakcja programowania

współbieżnego (2/2)

Abstrakcja programowania współbieżnego obejmuje:

1.

model wzajemnych oddziaływań procesów,

2.

instrukcje atomowe,

3.

czas,

4.

przeplot,

5.

poprawność programu.

background image

Podstawowe pojęcia programowania współbieżnego

34

Proces a wątek (1/2)

Abstrakcja procesu sekwencyjnego jest fizycznie realizowana
przez:

Proces (systemu operacyjnego):

program z danymi wykonywany pod kontrolą systemu
operacyjnego, posiadający przydzielone zasoby (pamięć,
urządzenia we/wy) i rywalizujący o dostęp do procesora; 

Wątek (thread) – lekki proces (lightweight process):

część programu, która może być wykonywana niezależnie od
innych części;

kod i dane są często współdzielone między wątkami;

każdy wątek posiada własny wirtualny procesor;

pracą wątków steruje planista wątków (thread scheduler);

wiąże się z tym pojęcie wielowątkowści (multithreading);

Uwaga – np. w Java każdy program jest wielowątkowy!

background image

Podstawowe pojęcia programowania współbieżnego

35

Proces a wątek 2/2

W

ą

te

k

g

łó

w

n

y

Proces

W

ą

te

k

W

ą

te

k

W

ą

te

k

W

ą

te

k

Zasoby

Zasoby

W

ą

te

k

Zasoby

I/O

Gotowy do uruchomienia (ang. ready to run)

Zawieszony (ang. suspended)

Wznowiony (ang. resumed)

Zablokowany (ang. blocked)

Zakończony (ang. terminated)

Działający (ang. running)

Zazwyczaj jest również wątkiem kończącym wykonywanie

programu

Jest to wątek, od którego pochodzą inne wątki

„potomne”

background image

Podstawowe pojęcia programowania współbieżnego

36

Model wzajemnych oddziaływań

procesów (1/4)

Zajmujemy się abstrakcjami, w których procesy ze sobą
współpracują lub między sobą współzawodniczą;

Współpraca wymaga od procesów komunikowania się
wykonanie jednego wymaga informacji wytworzonej w innym;

Współzawodnictwo wymaga wzajemnego wykluczania;

W ogólności różne procesy wykonywane jednocześnie na wielu

niepołączonych procesorach (komputerach), niezależnie od
siebie, także można nazwać współbieżnymi
– takie przypadki nie są jednak dla nas interesujące, gdyż nie
wymagają dodatkowych mechanizmów ani na wielu procesorach
ani na jednym (wystarcza cykliczne przełączanie przez system
operacyjny);

background image

Podstawowe pojęcia programowania współbieżnego

37

Model wzajemnych oddziaływań

procesów (2/4)

Powyższy rysunek odpowiada teoretycznemu spojrzeniu na

program współbieżny. Rzeczywisty obraz programu jest uzależniony
od zastosowanego języka programowania, systemu operacyjnego,
bibliotek i/lub obiektów synchronizacji.

proces

sekwencyjny

proces

sekwencyjny

proces

sekwencyjny

proces

sekwencyjny

program współbieżny

współdzielony

zasób

komunikat

próba

zajęcia

próba

zajęcia

background image

Podstawowe pojęcia programowania współbieżnego

38

Model wzajemnych oddziaływań

procesów (3/4)

(

wg M. Ben-Ari

)

Komunikacja (kooperacja):

występuje, gdy procesy realizują oddzielne zadania, lecz w sumie
działają, aby osiągnąć wspólny cel;

w trakcie działania procesy mogą chcieć przesłać dane;

wymaga to uporządkowania w czasie (synchronizowania), np.
dane procesu P1 muszą być utworzone zanim zostaną wykorzystane w
P2;

Współzawodnictwo:

dwa procesy ubiegają się o ten sam zasób – np. obliczeniowy,
dostęp do pewnej komórki pamięci lub kanału komunikacyjnego;

współzawodnictwo zawsze wymaga synchronizacji, w tym
rozwiązania problemu wzajemnego wykluczania;

Synchronizacja w komunikacji nie musi wymagać wzajemnego
wykluczania;

background image

Podstawowe pojęcia programowania współbieżnego

39

Wzajemne oddziaływania procesów

(4/4)

(

William Stalling „Systemy operacyjne”, Wyd.

Robomatic, 2004

)

Stopień zależności

Relacje

Wpływ jednego

procesu na inny

Potencjalne

sposoby

sterowania

Procesy niezależne od
siebie

Rywalizacja
(współzawodnictwo)

1. Wynik jednego procesu
nie zależy od działań
pozostałych
2. Możliwe jest
oddziaływanie na tempo
wykonywania procesu

1. Wzajemne
wykluczanie
2. Blokowanie (zasoby
wymienne)
3. Zagłodzenia

Procesy pośrednio
zależne od siebie
(poprzez obiekty
współdzielone)

Współpraca poprzez
wspólne
wykorzystywanie
obiektów

1. Wynik jednego procesu
może zależeć od danych
otrzymanych od innych
2. Możliwy jest wpływ na
tempo wykonywania
procesu

1. Wzajemne
wykluczanie
2. Blokowanie (zasoby
wymienne)
3. Zagłodzenia
4. Zachowanie spójności
danych

Procesy bezpośrednio
zależne od siebie
(korzystanie z
elementarnych procedur
komunikacyjnych)

Współpraca poprzez
komunikację

1. Wynik jednego procesu
może zależeć od danych
otrzymanych od innych
2. Możliwy jest wpływ na
tempo wykonywania
procesu

1. Blokowanie (zasoby
wyczerpywalne)
2. Zagłodzenia

background image

Podstawowe pojęcia programowania współbieżnego

40

Instrukcje atomowe (1/3)

Przez instrukcje atomowe rozumie się podzbiór wybranych
rozkazów procesora realizujących algorytm współbieżny.

Wymaganie atomowości instrukcji odnosi się do koncepcji, w
której operacje na obiekcie wykonuje się jako sekwencje,
charakteryzujące się dwiema cechami:

1.

niepodzielności – stan „przed” i stan „po”,

2.

nieprzerywalności – jeżeli się rozpoczęła, to musi się

zakończyć.

Atomowość instrukcji oznacza, że niezależnie od sposobu
implementacji instrukcji w procesorze jest ona wykonywana
w całości
.

W trakcie jej wykonywania nie są obsługiwane żadne
przerwania.

Instrukcje atomowe są bardzo ważnym założeniem
programowania współbieżnego, gdyż pozwalają osiągnąć
jednoznaczność wyniku instrukcji.

background image

Podstawowe pojęcia programowania współbieżnego

41

Instrukcje atomowe – przykłady -

poziom CPU (2/3)

Procesor UltraSPARC:

-

ldstub (load and store unsigned byte),

-

cas (compare and swap),

-

swap (swap byte locations).

Procesor Intel Pentium:

-

cmpxchgl (compare/exchange long; CAS – compare-and-

swap).

Procesor Alpha AXP:

-

ldl_l/stl_c (load-linked/store-conditioanal LL/SC).

Procesor IBM PowerPC:

-

lwarx/stwcx (load-linked/store-conditioanal LL/SC).

Procesor MIPS:

-

ll/sc (load-linked/store-conditioanal LL/SC).

Procesor ARM:

-

ldrex/strex (load-linked/store-conditioanal LL/SC).

background image

Podstawowe pojęcia programowania współbieżnego

42

Instrukcje atomowe – przykłady

– języki programowania (3/3)

W języku Java pakiet java.util.concurrent.atomic
dostarcza atomowych typów danych:
AtomicBoolean,
AtomicInteger,
AtomicLong,
AtomicReference

Metoda compareAndSet() w Java implementuje prymityw
synchronizacyjny CAS (porównaj aktualną wartość z zadaną
i jeśli są równe, to podstaw nową wartość);

C# dostarcza analogiczną funkcjonalność poprzez metodę
Interlocked.CompareExchange;

background image

Podstawowe pojęcia programowania współbieżnego

43

Czas

Czas wykonania instrukcji na różnych procesorach może
być różny;

Abstrakcja programowania współbieżnego zakłada
ignorowanie czasu;

Niedopuszczalna jest zależność czasowa między
procesami!

Interesuje nas poprawność wykonania ciągu instrukcji;

Na wynik analizy poprawności algorytmu nie ma i nie
może mieć wpływu rzeczywisty upływ czasu;

czas

pobier
z

dodaj

mnóż

zapamięt
aj

pobier
z

dodaj

mnóż

zapamięt
aj

realnie różne czasy
wykonania
modelowo równe
(jednostkowe) czasy
wykonania

background image

Podstawowe pojęcia programowania współbieżnego

44

Przeplot (interleave) (1/3)

Instrukcje atomowe wchodzące w skład wszystkich
procesów programu współbieżnego przeplatają się
między sobą;

Możliwe są dowolne kombinacje ciągu wykonań instrukcji;

Jeżeli rozważymy przypadek dwóch instrukcji I1 i I2 w
dwóch procesach P1 i P2, to muszą one spełniać warunek:

koniec(I1) <= początek(I2)

(„Przypadek 1”)

Wykluczamy „Przypadek 2”

początek(I2) < koniec(I1)

,

gdyż wynik dwu jednocześnie wykonywanych instrukcji
musi być taki sam, jak wynik każdego z dwu możliwych
ciągów uzyskanych przez wykonanie tych instrukcji jedna
po drugiej;

I1

I2

I1

I2

czas

Przypadek 2

Przypadek 1

background image

Podstawowe pojęcia programowania współbieżnego

45

Przeplot (interleave) (2/3)

Procesory, które przetwarzają procesy programu współbieżnego
mogą działać z różną szybkością - powoduje to losowość przeplotu;

Poprawnie skonstruowany program współbieżny musi być
poprawny przy wszystkich przeplotach powstałych na różnych
procesorach;

Niech algorytm procesu sekwencyjnego P1 składa się z instrukcji:
P_1:

i11, i12, i13

Niech algorytm procesu sekwencyjnego P1 składa się z instrukcji:
P_2:

i21, i22, i23

Możliwe są przeploty:
PRZ_1:

i11, i21, i12, i22, i13, i23

PRZ_2:

i21, i22, i11, i12, i13, i23

Przeplot:
PRZ_3:

i11, i22, i21, i12, i23, i13

jest niedopuszczalny (błędny). Dlaczego?

Nie wszystkie przeploty współbieżnych procesów są
dopuszczalne z punktu widzenie oczekiwanego
wyniku.

Stąd potrzeba zarządcy procesów współbieżnych
(planisty) odpowiedzialnego za sterowanie
procesami.

Mając ciągi instrukcji przynależne do zbioru
procesów ma on zadanie skonstruowania
poprawnego przeplotu.

Nie wszystkie przeploty współbieżnych procesów są
dopuszczalne z punktu widzenie oczekiwanego
wyniku.

Stąd potrzeba zarządcy procesów współbieżnych
(planisty) odpowiedzialnego za sterowanie
procesami.

Mając ciągi instrukcji przynależne do zbioru
procesów ma on zadanie skonstruowania
poprawnego przeplotu.

background image

Podstawowe pojęcia programowania współbieżnego

46

Przeplot (interleave) (3/3)

Uwaga:

poprawny program współbieżny działa dobrze dla
każdego przeplotu;

program współbieżny nie działa poprawnie, gdy istnieje
co najmniej jeden przeplot, przy którym dochodzi do
sytuacji błędnej;

Istnienie przeplotu w programach współbieżnych:

implikuje konieczność specyfikacji zbioru poprawnych
przeplotów;

jest przyczyną trudności w badaniu poprawności
programu: formalnym (teoretycznym) oraz praktycznym;

background image

Podstawowe pojęcia programowania współbieżnego

47

Poprawność programu

background image

Podstawowe pojęcia programowania współbieżnego

48

Poprawność programów

(sekwencyjnych)

Pojęcie poprawności programów sekwencyjnych jest następujące:
Program jest poprawny, jeśli:

kończy się (zatrzymuje)

oraz zwraca poprawny wynik;

W przypadku programów współbieżnych jest to słuszne w
ograniczonych przypadkach (np. sortowanie), gdyż cechą wielu
programów współbieżnych (np. systemów operacyjnych, systemów
czasu rzeczywistego) jest to, że działają w nieskończonej pętli;

Istnieją dwie definicje poprawności dla programów sekwencyjnych,
różniące się podejściem co do zakończenia programu.

Przyjmijmy, że:

zmienne wejściowe

x

spełniają warunek P(

x

) – tzw. precondition,

zmienne wejściowe

x

i wyjściowe

y

spełniają warunek Q(

x

,

y

).

background image

Podstawowe pojęcia programowania współbieżnego

49

Częściowa poprawność

Dla dowolnych wartości

a

zmiennych wejściowych definiujemy

Poprawność częściową (lokalną) – partial correctness

:

Jeśli zachodzi P(

a

)

i jeżeli program uruchomiony z

a

jako wartościami zmiennych

wejściowych

x

zatrzymuje się,

to zachodzi Q(

a

,

b

), gdzie

b

są poprawnymi wartościami

zmiennych wyjściowych w chwili jego zakończenia.

Częściowa poprawność zakłada, że jeśli program zatrzyma się,
to odpowiedzi muszą być „poprawne”
.

Przy badaniu poprawności częściowej nie bierze się pod uwagę, czy
program się zakończył czy nie!

Analogią dla częściowej poprawności jest tzw. własność
bezpieczeństwa
(safety) programu współbieżnego - musi być
zawsze spełniona
!

background image

Podstawowe pojęcia programowania współbieżnego

50

Całkowita poprawność

Poprawność całkowita (globalna) – total correctness

:

Każde wykonanie programu kończy się

oraz spełnione są P(

a

) i Q(

a

,

b

);

Całkowita poprawność określa zatem, że program zakończy
swoje działanie i wyniki będą „poprawne” (spełnią
warunek Q)
.

Kończenie się programu dla wszystkich prawidłowych danych
wejściowych (spełniających P(a)) nazywane jest także
warunkiem stopu (stop condition).

W praktyce dowodzi się częściową poprawność programu oraz
spełnienie warunku stopu;

Analogią dla całkowitej poprawności jest tzw. własność
żywotności
(liveness) programu współbieżnego – musi być
kiedyś spełniona (teraz lub w przyszłości);

background image

Podstawowe pojęcia programowania współbieżnego

51

Poprawność programu

współbieżnego

(wg M. Ben-Ari, „Podstawy programowania

współbieżnego i rozproszonego”, WNT, Warszawa 1996 )

Własność bezpieczeństwa

określa własności statyczne

poprawnego
programu współbieżnego – zawsze muszą być spełnione;

Własność żywotności

dotyczy własności dynamicznych –

kiedyś muszą
być spełnione;

poprawność

własność

bezpieczeństwa

wzajemne wykluczanie

(mutual exclusion)

własność żywotności

wykluczenie zagłodzenia

(starvation)

własność uczciwości

(fairness)

brak zakleszczeń

(deadlock)

background image

Podstawowe pojęcia programowania współbieżnego

52

Poprawność programu

współbieżnego

(m. in. po uwzględnieniu zmian w terminologii)

Zakleszczenie nazywane jest również blokadą (M. Ben-Ari: „Podstawy programowania
współbieżnego i rozproszonego”, WNT, 1996; M. Ben-Ari: „Podstawy programowania
współbieżnego”, WNT, 1989; A. Silberschatz i in.: „Podstawy systemów operacyjnych”, WNT,
1993), impasem (W. Stallings: „Systemy operacyjne. Struktura i zasady budowy”, PWN, 2006),
zastojem (A.S. Tanenbaum: „Rozproszone systemy operacyjne”, PWN, 1997) a nawet martwym
punktem (Z. Weiss, T. Gruźlewski: „Programowanie współbieżne i rozproszone”, WNT, 1993).

poprawność

własność

bezpieczeństwa

wzajemne wykluczanie

własność żywotności

wykluczenie zagłodzenia

własność uczciwości

brak zakleszczeń

(zastojów, impasów,
blokad)

brak lokalnych i/lub
globalnych blokad i
in. (np. livelock
-
uwięzień)

background image

Podstawowe pojęcia programowania współbieżnego

53

Poprawność – bezpieczeństwo i

żywotność

Ilustracją dla własności bezpieczeństwa i żywotności może być
sytuacja na skrzyżowaniu drogowym:

Własność bezpieczeństwa: na poprawnie działającym
skrzyżowaniu nigdy jednocześnie nie znajdą się pojazdy
jadące w kierunkach „wschód-zachód” i „północ-południe”;

Własność żywotności: każdy pojazd, który zamierza
przejechać przez skrzyżowanie, kiedyś przez nie przejedzie;

background image

Podstawowe pojęcia programowania współbieżnego

54

Poprawność – bezpieczeństwo i

żywotność

Dowodzenie poprawności nawet bardzo prostych programów
nie jest rzeczą łatwą, ale dowodzenie własności
bezpieczeństwa i żywotności
jest jeszcze trudniejsze.

Metody dowodzenia poprawności wykorzystują techniki znane z
dowodzenia poprawności algorytmów:

oparte o logikę:

własność częściowej poprawności (logika pierwszego rzędu),

logika Hoare’go,

własność stopu (tzw. całkowita poprawność)

oraz inne:

logiki: temporalna (algorytmy i programy reaktywne), modalna,

specyfikacja algebraiczna,

wykorzystanie modeli abstrakcyjnych (programowanie
obiektowe).

background image

Podstawowe pojęcia programowania współbieżnego

55

Podstawowe problemy synchronizacji w

programowaniu współbieżnym

background image

Podstawowe pojęcia programowania współbieżnego

56

Wykluczanie, zakleszczenia,

zagłodzenia i blokady

w programach współbieżnych

W życiu codziennym powszechna jest rywalizacja o wspólne
zasoby, oczekiwanie aktywne lub pasywne na, rezygnacja z nich
lub zaprzestanie działania w przypadku ich braku;

Np. dwie osoby chcą jednocześnie wykorzystać wspólną łazienka,
telefon, skrzyżowanie, obsługa w okienku (a raczej jej działanie);

Brak rozwiązania tego problemu wyklucza wspólne
funkcjonowanie:

1.

naprzemienne wykonywanie (przeplot) niektórych czynności,

2.

naprzemienne korzystanie z tego samego zasobu;

Rozwiązaniem jest stosowanie:

zwykłej uczciwości i uprzejmości;

dobrych obyczajów i reguł niesformalizowanych;

przepisów, zasad, regulaminów, etc;

stosowanie wzajemnego wykluczania;

background image

Podstawowe pojęcia programowania współbieżnego

57

Wykluczanie, zakleszczenia,

zagłodzenia i blokady

w programach

współbieżnych

Skupmy się na problemach synchronizacji podstawowych
dla teorii i praktyki programowania współbieżnego:

wykluczanie procesu współbieżnego (ang. lockout)

zakleszczenie procesu współbieżnego (ang. deadlock,
tackle)

zagłodzenie procesu współbieżnego (ang. starvation)

blokada procesu współbieżnego (ang. blockade, lock),

background image

Podstawowe pojęcia programowania współbieżnego

58

Problem wzajemnego wykluczania

Problem (i potrzeba) wzajemnego wykluczania w programowaniu
współbieżnym występuje, gdy co najmniej dwa procesy nie mogą:

1.

przeplatać pewnych ciągów instrukcji,

2.

jednocześnie korzystać z tego samego zasobu.

Wspólny zasób nosi nazwę krytycznego;

Schemat pracy procesów współbieżnych wyglądać może następująco:

begin

while true do

begin

• lokalne_obliczenia;
• protokół_wstępny;

sekcja_krytyczna;

• protokół_końcowy;

end

end;

Sekcja_krytyczna to fragment programu, który może być
jednocześnie wykonywany przez co najwyżej jeden proces.

background image

Podstawowe pojęcia programowania współbieżnego

59

Problem wzajemnego wykluczania

Zatem problem wzajemnego wykluczania można zdefiniować:

Zsynchronizować N procesów, z których każdy

w nieskończonej pętli na przemian zajmuje się własnymi obliczeniami

a następnie wykonuje działania na części współdzielonej,

• w taki sposób, aby wykonanie tej części w dwóch lub więcej procesach nie

pokrywało się w czasie;

Należy zapewnić spełnienie zasad:

W sekcji krytycznej może przebywać co najwyżej jeden proces
jednocześnie (bezpieczeństwo).

Każdy proces, który chce wykonać sekcję krytyczną, w
skończonym czasie powinien do niej wejść (żywotność).

Protokoły wstępny i końcowy korzysta z dostępnych mechanizmów
synchronizacyjnych;

W przypadku braku wsparcia ze strony systemu operacyjnego należy
zastosować algorytmy synchronizacyjne, np. algorytm Petersona;

background image

Podstawowe pojęcia programowania współbieżnego

60

Zakleszczenia procesów

współbieżnych

Warunkiem zakleszczenia procesu współbieżnego jest
procesu żądania równoczesnego dostępu do więcej niż
jednego współdzielonego zasobu przez jeden proces.

Proces współbieżny po zajęciu jednego z zasobów
bezskutecznie usiłuje zająć pozostałe z potrzebnych mu
zasobów równocześnie nie zwalniając uprzednio zajętego
zasobu(ów).

W tym czasie każdy z zasobów, który został wywłaszczony
przez zakleszczony proces współbieżny jest blokowany
dla pozostałych procesów oczekujących na ten zasób.

Wyróżnia się:

zakleszczenia symetryczne,

cykle zakleszczeń symetrycznych.

background image

Podstawowe pojęcia programowania współbieżnego

61

Warunki Coffmana – Warunki

konieczne dla wystąpienia

zakleszczenia procesów

Wzajemne wykluczanie (Mutual exclusion condition)

Każdy z zasobów jest w stanie: wolny albo zajęty (przez dokładnie jeden
proces);

Szeregowanie bez wywłaszczania (No prememption condition)

Zasoby nie podlegają wywłaszczeniu - zasób zajęty przez pewien
proces może być zwolniony tylko przez ten sam proces;

Częściowy przydział - przetrzymywanie i oczekiwanie (Wait and hold
condition
)

Proces posiadający pewien zasób może żądać innego zasobu;

Wzajemne czekanie - oczekiwanie cykliczne (Circular wait condition)

Musi istnieć zamknięty łańcuch procesów oczekujących na zasób
zajęty przez następnika (‚1’ na ‚2’…‚i’ na ‚i+1’…‚N’ na ‚1’)

Zapobieganie zakleszczeniom jest możliwe, jeśli jeden lub więcej z

warunków koniecznych nigdy nie będzie spełniony.

background image

Podstawowe pojęcia programowania współbieżnego

62

Przykładowe powody braku

żywotności (1/4)

Ac1

Ac2

R1

R2

dostęp

dostęp

żądanie

proces

zakleszczony:

Ac1

background image

Podstawowe pojęcia programowania współbieżnego

63

Przykładowe powody braku

żywotności (2/4)

Symetryczne zakleszczenia procesów

Zakleszczenie symetryczne jest uważane za
klasyczny przykład zakleszczenia:

Ac1

Ac2

R1

R2

żądanie

dostęp

dostęp

procesy

zakleszczone:

Ac1, Ac2

background image

Podstawowe pojęcia programowania współbieżnego

64

Przykładowe powody braku

żywotności (3/4)

procesy

zakleszczone:

Ac1, Ac2, Ac3

Acp

Ac1

R1

R2

Ac2

R3

Ac3

Rp

dostęp

żądanie

background image

Podstawowe pojęcia programowania współbieżnego

65

Przykładowe powody braku

żywotności (4/4)

Cykl zakleszczeń procesów

procesy

zakleszczone:

Ac1, Ac2,

Ac3, ..., Acn

Acn

Ac1

R1

R2

Ac2

R3

Ac3

Rn

żądanie

dostęp

background image

Podstawowe pojęcia programowania współbieżnego

66

Wykluczanie się procesów

współbieżnych

W czasie wykonywania się programu współbieżnego działa
tzw. planista (zarządca);

Jest to składowa oprogramowania systemowego
odpowiedzialna za sprawiedliwe (uczciwe) dopuszczanie do
zasobów procesów oczekujących na ich usługi;

Jeżeli jednak w działającym programie współbieżnym
występują takie procesy, które pomimo dopełnienia
wszelkich warunków niezbędnych dla poinformowania
planisty o tym, że oczekują one na dostęp do zasobów
współdzielonych, takiego dostępu nie otrzymują, to mówi
się o nich, że są wykluczane;

Inaczej o takich procesach mówi się, że są głodzone;

background image

Podstawowe pojęcia programowania współbieżnego

67

Efekt (zjawisko) zagłodzenia

procesu współbieżnego

Głodzenie procesów współbieżnych może być spowodowane
brakiem uczciwości w działaniu planisty lub zakleszczeniami
procesów współbieżnych;

Końcowym stanem nieskończonego wstrzymywania
(blokowania, głodzenia) procesu jest efekt zagłodzenia
(starvation), lub inaczej wykluczenia.

Mimo że możliwość zagłodzenia świadczy o niepoprawności
programu, to czasami jest akceptowane (na przykład
wszędzie tam, gdzie stosuje się kolejkę priorytetową).

Wynika to z faktu, że zagłodzenie jest zwykle mało
prawdopodobne.

background image

Podstawowe pojęcia programowania współbieżnego

68

Oczekiwanie procesu na

wywłaszczenie zasobu

współdzielonego

Blokada procesu

Występują dwa sposoby oczekiwania procesu

współbieżnego na udostępnienie przez „planistę”

współdzielonego zasobu:

aktywne czekanie (ang. busy-waiting) – proces

samoczynnie co pewien interwał czasowy ponawia

swoje żądanie dostępu do zasobu:

trwałe aktywne czekanie – proces ponawia żądania

dostępu aż do skutecznego wywłaszczenia zasobu,

nietrwałe aktywne czekanie – proces ponawia żądanie

dostępu do zasobu określoną liczbę razy, po czym

przechodzi do pasywnego czekania.

pasywne czekanie – proces jednorazowo wysyła do

„planisty” żądanie dostępu do zasobu, po czy przestaje

być aktywny. Jedynie planista jest w stanie ponownie

uaktywnić ten proces.

background image

Podstawowe pojęcia programowania współbieżnego

69

Globalna blokada programu

współbieżnego

Globalna blokada programu współbieżnego (ang. global
deadlock
) występuje wtedy, gdy w programie nie ma takiego
procesu współbieżnego, który nie występowałby w stanie
zagłodzenia albo w stanie zakleszczenia.

Nie można wtedy zidentyfikować w systemie żadnego
procesu współbieżnego, który wykonywałby sensowną pracę.

Zablokowany program współbieżny nie jest poprawny
(bezpieczny, żywotny).

background image

Podstawowe pojęcia programowania współbieżnego

70

Własność uczciwości - rodzaje

Uczciwość słaba - jeżeli proces nieprzerwanie zgłasza
żądanie, to kiedyś będzie ono obsłużone.

Uczciwość mocna - jeżeli proces zgłasza żądanie
nieskończenie wiele razy, to kiedyś będzie ono obsłużone.

Oczekiwanie liniowe - jeżeli proces zgłasza żądanie, to
będzie ono obsłużone zanim dowolny inny proces zostanie
obsłużony więcej niż raz.

FIFO (pierwszy wszedł, pierwszy wyjdzie) - jeżeli proces
zgłasza żądanie, to będzie ono obsłużone przed dowolnym
żądaniem zgłoszonym później.

Uczciwość słaba i mocna ma znaczenie teoretyczne.

W praktyce jest stosowane oczekiwanie liniowe lub FIFO.

Obydwa mogą być implementowane w systemach
scentralizowanych - w systemach rozproszonych występują
problemy z realizacją algorytmu FIFO.

background image

Podstawowe pojęcia programowania współbieżnego

71

Zalecenia i przykłady

background image

Podstawowe pojęcia programowania współbieżnego

72

8 reguł projektowania aplikacji

współbieżnych

(C. Breshears: „The Art of Concurrency”)

Reguła 1 – Zidentyfikuj naprawdę niezależne obliczenia

Reguła 2 – Implementuj współbieżność w możliwie

najwyższej warstwie systemu komputerowego

Reguła 3 – Od początku planuj skalowanie aplikacji, aby

wyzyskiwać możliwość zwiększenia liczby CPU

Reguła 4 – Wykorzystuj biblioteki bezpieczne wątkowo

(ang. thread-safe libraries) gdziekolwiek to możliwe

Reguła 5 – Użyj właściwego modelu wątków (explicit vs.

implicit thread model) – preferuj model typu „implicit

Reguła 6 – Nigdy nie zakładaj określonego porządku

wykonywania instrukcji

Reguła 7 – Używaj zmiennych lokalnych w wątkach lub

kojarz blokady (ang. locks) do określonych danych

Reguła 8 – Odważ się zmienić algorytm dla zwiększenia

szansy na współbieżne wykonywanie

background image

Podstawowe pojęcia programowania współbieżnego

73

Całkowanie numeryczne (numerical

integration)

static long num_rects = 100000;
void main () {
int i;
double mid, height, width, sum = 0.0;
double area;

width = 1.0/(double) num_rects;
for (i = 0; i < num_rects; i++) {

mid = (i + 0.5) * width;
height = 4.0/(1.0 + mid * mid);
sum += height;

}

area = width * sum;

printf("Computed pi = %f\n", area);
}

dx

x

1

0

2

1

4

background image

Podstawowe pojęcia programowania współbieżnego

74

Implicit Threading – ukryta

współbieżność

np. Open MP, Intel Threading

Building Blocks (TBB)

static long num_rects = 100000;

int main(int argc, char* argv[]) {
double mid, height, width, sum = 0.0;
int i;
double area;

width = 1.0/(double) num_rects;

#pragma omp parallel for private(mid, height) reduction(+:sum)

for (i = 0; i < num_rects; i++) {

mid = (i + 0.5) * width;
height = 4.0/(1.0 + mid * mid);
sum += height;

}

area = width * sum;
printf("Computed pi = %f\n", area);
return 0;
}

Zmienna środowiskowa OMP_NUM_THREADS określa liczbę wątków.

background image

Podstawowe pojęcia programowania współbieżnego

75

Explicit Threading – jawna

współbieżność

np. POSIX threads (Pthreads),

Windows Threads

#include <stdio.h>
#include <pthreads.h>

#define NUM_RECTS 100000
#define NUM_THREADS 4

double gArea = 0.0;
pthread_mutex_t gLock;

void *threadFunction(void *pArg) {
int myNum = *((int *) pArg);
double partialHeight = 0.0, lWidth = 1.0 / NUM_RECTS, x;

for (int i = myNum; i < NUM_RECTS; i += NUM_THREADS) {

x = (i + 0.5f) / NUM_RECTS;
partialHeight += 4.0f / (1.0f + x * x);

}

pthread_mutex_lock(&gLock);

gArea += partialHeigth * lWidth;

pthread_mutex_unlock(&gLock);
}

/* cd. następny slajd */

background image

Podstawowe pojęcia programowania współbieżnego

76

Explicit Threading – jawna

współbieżność

np. POSIX threads (Pthreads) – cd.

/* cd. poprzedniego slajdu */
void main () {
pthread_t tHandles[NUM_THREADS];
int tNum[NUM_THREADS];

pthread_mutex_init(&gLock, NULL);
for (int i = 0; i < NUM_THREADS; i++) {

tNum[i] = i;

pthread_create(&tHandles[i], NULL, threadFunction, (void *)&tNum[i]);

}

for (int j=0; j < NUM_THREADS; j++) {

pthread_join(tHandles[j], NULL);

}

pthread_mutex_destroy(&gLock);
printf("Computed pi = %f\n", gArea);
}

background image

Podstawowe pojęcia programowania współbieżnego

77

Podsumowanie

background image

Podstawowe pojęcia programowania współbieżnego

78

Zalety obliczeń współbieżnych

Przyspieszenie obliczeń - możliwość szybszego uzyskania
wyniku niż na najszybszej maszynie sekwencyjnej.

Zwiększenie niezawodności działania lub dokładności
obliczeń.

Możliwość rozwiązania zadań zbyt dużych dla maszyn
sekwencyjnych.

Obliczenia współbieżne pozwalają na lepsze
(efektywniejsze) wykorzystanie instalacji maszyny cyfrowej,
gdyż synchronizacyjne ograniczenia między fizycznymi
składowymi są zredukowane do minimum.

Dostatecznie zadawalający model funkcjonowania
obiektów
i systemów świata rzeczywistego.

background image

Podstawowe pojęcia programowania współbieżnego

79

Wady obliczeń współbieżnych

Konieczność dekompozycji problemu na niezależne od
siebie części mogące być wykonywane równolegle.

Mechanizmy synchronizacji wprowadzają dodatkowy narzut
czasowy na ich obsługę, co przy ich nieumiejętnej
implementacji lub użyciu może nawet doprowadzić do
zwiększenia czasu wykonania obliczeń.

Złożone testowanie programu wymagające uwzględnienia
dynamiki zmian stanów procesów.

Wyniki obliczeń współbieżnych mogą być zależną od czasu
funkcją danych wejściowych. Powtórzenie błędnego
obliczenia, w celu umiejscowienia i poprawienia błędów,
jest prawie niemożliwe.

background image

Podstawowe pojęcia programowania współbieżnego

80

Materiał dodatkowy

background image

Rozwój architektury komputerów

background image

Podstawowe pojęcia programowania współbieżnego

82

Inne definicje blokad

background image

Podstawowe pojęcia programowania współbieżnego

83

Deadlock

, Livelock, Starvation

(wg Richard H. Carver, Kuo-Chung Tai: Modern

Multithreading,

John Wiley&Sons, 2006)

Deadlock – wymaga jednego lub większej liczby na stałe

zablokowanych procesów.

Proces P jest zablokowany jeśli się nie wykonuje i czeka na

zajście pewnego zdarzenia, które nigdy nie zajdzie.

Ex: Załóżmy, że na końcu pracy programu współbieżnego CP

istnieje proces P, który spełnia warunki:

a) proces P jest zablokowany podczas wykonywania pewnego

kodu służącego synchronizacji (np. oczekiwanie na odebranie

wiadomości),

b) proces P pozostaje zablokowany na zawsze, niezależnie od

tego co zrobią inne procesy;

 Proces P jest zakleszczony (ang. deadlocked) a w programie

CP wystąpiło zakleszczenie (ang. deadlock).

background image

Podstawowe pojęcia programowania współbieżnego

84

Deadlock,

Livelock

, Starvation

(wg Richard H. Carver, Kuo-Chung Tai: Modern

Multithreading,

John Wiley&Sons, 2006)

Livelock – analogiczna sytuacja do deadlock’a z aktywnym
czekaniem.

Proces P wykonuje się (albo jest gotowy do działania), nie jest
zablokowany, ale nigdy nie wykona żadnego postępu w
realizacji algorytmu.

Ex: Załóżmy, że istnieje przeplot S programu współbieżnego
CP, dla którego proces P spełnia warunki:

a) proces P nie jest zablokowany ani zakleszczony (ang.

deadlock),

b) proces P nigdy nie wykonana postępu;
 Proces P jest wstrzymywany (ang. livelocked) a w programie

CP wystąpiła blokada (ang. livelock).

background image

Podstawowe pojęcia programowania współbieżnego

85

Deadlock, Livelock,

Starvation

(wg Richard H. Carver, Kuo-Chung Tai: Modern

Multithreading,

John Wiley&Sons, 2006)

Starvation - zagłodzenie.

Ex: Załóżmy, że w programie współbieżnym CP istnieje
przeplot S, dla którego na koniec cyklu są spełnione trzy
warunki:

a) przeplot S zakończył się nieskończenie powtarzanym

wykonaniem kodu spełniającego zasadę uczciwości,

b) istnieje niezakończony proces P, który nie wykonuje postępu

w realizacji alorytmu,

c) proces P nie jest zakleszczony (ang. deadlock), ani

wstrzymywany (ang. livelock);

 Proces P jest zagłodzony (ang. starved) a w programie CP

wystąpiło zagłodzenie (ang. starvation).


Document Outline


Wyszukiwarka

Podobne podstrony:
Liczniki T0 T1 T2
Kopia Testy(T1,T2) poprawki zaoczni do wysłania
LU IV VI Twain Mark T1 Tomek Sawyer za granicą T2 Tomek Sawyer detektywem
2005 t1
T2 1
T2 Układ rzutni Mongea
Mazowieckie Studia Humanistyczne r1996 t2 n1 s165 173
grobnieczui t2
Mazowieckie Studia Humanistyczne r1996 t2 n1 s113 126
Egz T1 2014
Ćwiczenie T1 Transformator trójfazowy, t1 f
Unia Europejska t1.32, Wspólna polityla rolna
T2, Kulturoznawstwo UAM, Tożsamości kulturowe (W)
ZARZĄDZANIE PRODUKCJĄ WYK T1
T1 Identyfikacja
Stel T1 Swiatłowody
T2 geodynamika

więcej podobnych podstron