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

Podobne dokumenty
Problemy współbieżności

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

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

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

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

Wprowadzenie do programowania współbieżnego

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

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

Systemy operacyjne III

SOP2 - semafory. grudzień

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

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Temat zajęć: Tworzenie i obsługa wątków.

Systemy Operacyjne synchronizacja i komunikacja procesów

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

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

synchronizacji procesów

synchronizacji procesów

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

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

Programowanie Równoległe i Rozproszone

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

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

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

Problemy czytelników i pisarzy oraz 5 ucztujących filozofów

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

Semafory. // G - globalna dla wszystkich. // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end loop sekcja_krytyczna(i); G := 0;

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

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

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

Synchronizacja procesów i wątków

1 Podstawowe definicje i pojęcia współbieżności

4. Procesy pojęcia podstawowe

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

Synchronizacja procesów

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

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

Synchronizacja procesów

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

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

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

WYKŁAD 4 SEMAPHORES (CIĄG DALSZY) Przykład 6 Problem czytelników i pisarzy. Wykład 4 strona 1/24

9. Problem wzajemnego wykluczania i sekcji krytycznej

4. Procesy pojęcia podstawowe

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

Monitory. Jarosław Kuchta

Programowanie współbieżne Wykład 4. Rafał Skinderowicz

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Klasyczne problemy synchronizacji

Systemy operacyjne. Zajęcia 11. Monitory

Gdy kilka procesów czyta a przynajmniej jeden dokonuje zapisu wynik odczytu zależeć może od sposobu realizacji przeplotu.

ξ II.UWr Wprowadzenie do STM

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

Mogą pracować w środowisku: Scentralizowanym -mikrokontroler Rozproszonym sieć sterująca, systemy hierarchiczne. Komunikacja z syst.

Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów współbieżnych.

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Model pamięci. Rafał Skinderowicz

Systemowe mechanizmy synchronizacji procesów

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

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

Systemy operacyjne 2

w odróżnieniu od procesów współdzielą przestrzeń adresową mogą komunikować się za pomocą zmiennych globalnych

Programowanie współbieżne i równoległe. dr inż. Marcin Wilczewski 2013

Programowanie wielowątkowe. Tomasz Borzyszkowski

Spis treści. Księgarnia PWN: Maurice Herlihy, Nir Shavit - Sztuka programowania wieloprocesorowego. Podziękowania Przedmowa...

Historia modeli programowania

Modelowanie procesów współbieżnych

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

Semafory. - aktywne oczekiwanie =GRGDWNRZ\PZVSDUFLHPVSU]WRZ\P 6SHFMDOQDLQVWUXNFMDPDV]\QRZDUHDOL]XMFDDWRPRZ\]DSLVL odczyt, np.

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.

4. Procesy pojęcia podstawowe

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

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.

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

Podstawy współbieżności

Algorytmy dla maszyny PRAM

Programowanie Rozproszone i Równoległe

Program współbieżny jest zbiorem sekwencyjnych PROGRAMOWANIE C++

Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (P)

9. Problem wzajemnego wykluczania i sekcji krytycznej

Język programowania PASCAL

Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.

Zagadnienia zaawansowane. Lech Kruś,

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

Modele programowania równoległego. Pamięć współdzielona Rafał Walkowiak dla III roku Informatyki PP

Programowanie współbieżne Wykład 5. Rafał Skinderowicz

Pojęcie bazy danych. Funkcje i możliwości.

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

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Zaawansowane programowanie w C++ (PCP)

Systemy Operacyjne 2: Wątki pthreads. dr inż. Arkadiusz Chrobot

Synchronizacja procesów

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Lock Manager Deadlock Źródła Jak starczy czasu. Dreadlocks. Konrad Błachnio MIMUW 19 maja 2010

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

Wielozadaniowość w systemie Microsoft Windows

Metody optymalizacji soft-procesorów NIOS

Podstawy programowania. Wykład 1 Wstęp. Krzysztof Banaś Podstawy programowania 1

Transkrypt:

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

Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np. komputery macierzowe) realizowana programowo (bariera, sekcja krytyczna, operacje atomowe) wzajemne wykluczanie sekcja krytyczna protokoły wejścia i wyjścia z sekcji krytycznej cechy rozwiązań zagadnień synchronizacji: pożądane bezpieczeństwo i żywotność, uczciwość możliwe błędy zakleszczenie, zagłodzenie Krzysztof Banaś Obliczenia równoległe 2

Model pamięci Problem synchronizacji operacji na zmiennych dotyczy takich problemów jak np.: kiedy kompilator może dokonywać operacji wyłącznie na rejestrach, a kiedy musi dokonać zapisu do pamięci jak utrzymać spójność kopii danych w pamięci podręcznej z wartością w pamięci głównej czy kompilator i procesor mogą zmieniać kolejność wykonywanych operacji (w tym operacji zapisu i odczytu) W obliczeniach sekwencyjnych zagadnienie synchronizacji operacji na kopiach wartości zmiennych jest problemem głównie wydajności kompilatory i procesory są zobowiązane działać tak, aby efekt działania systemu komputerowego był zgodny z zapisem w kodzie źródłowym (czyli złudzeniem istnienia tylko jednej kopii danych) nie dotyczy to działania debugerów, które śledzą nie ostateczne efekty działania kodu, ale stan systemu po każdej linii kodu Krzysztof Banaś Obliczenia równoległe 3

Model pamięci W obliczeniach równoległych zagadnienie synchronizacji operacji na kopiach wartości zmiennych wpływa na poprawność programów: brak wymuszenia operacji zapisu może powodować, że różne wątki widzą różne wartości tej samej zmiennej wspólnej rozmaite środowiska wprowadzają dodatkowe konstrukcje (memory fences, operacje flush) wymuszające zapis do pamięci niejawne wymuszenie zapisu jest także związane z szeregiem operacji synchronizacji (bariery, protokoły sekcji krytycznych) W miejsce dotychczasowych umownych (C,C++) lub mało ścisłych specyfikacji (Java) wprowadza się w ostatnich latach w językach programowania ścisły model pamięci regulujący powyższe kwestie Środowiska programowania równoległego wprowadzają także własne modele spójności pamięci Krzysztof Banaś Obliczenia równoległe 4

Modele spójność pamięci Modele spójności pamięci model spójności sekwencyjnej (sequential consistency) modele spójności osłabionej (relaxed consistency) Paradoks pracy współczesnych procesorów procesory ze względu na optymalizacje (kompilatora, samego procesora) nie spełniają prostych modeli spójności, np. spójności sekwencyjnej Krzysztof Banaś Obliczenia równoległe 5

Wzajemne wykluczanie wątków Zamki (locks, sygnalizatory dostępu, blokady, flagi) int zamek=0; procedura_wątek(){ while (zamek!= 0) {} // aktywne czekanie (busy wait) zamek = 1; sekcja_krytyczna(); zamek = 0; } Krzysztof Banaś Obliczenia równoległe 6

Wzajemne wykluczanie wątków Zamki (locks, sygnalizatory dostępu, blokady) int zamek=0; procedura_wątek(){ while (zamek!= 0) {} // aktywne czekanie (busy wait) zamek = 1; sekcja_krytyczna(); zamek = 0; } Problemy: aktywne czekanie zużywa zasoby komputera procedura nie jest bezpieczna ani nie zapewnia żywotności Krzysztof Banaś Obliczenia równoległe 7

Wzajemne wykluczanie wątków Jak rozwiązać problem protokołów wejścia i wyjścia dla sekcji krytycznej: bardziej rozbudowane algorytmy wiele zmiennych, wiele zapisów, wiele odczytów wsparcie sprzętowe odpowiednie rozkazy procesora wsparcie systemowe procedury systemowe zaimplementowane przy użyciu wsparcia sprzętowego odpowiednie API implementacja wykorzystująca procedury systemowe Krzysztof Banaś Obliczenia równoległe 8

Wzajemne wykluczanie wątków Specyfikacja POSIX: muteks mutual exclusion tworzenie muteksa int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex attr_t *mutexattr) zamykanie muteksa int pthread_mutex_lock(pthread_mutex_t *mutex) próba zamknięcia muteksa (jeśli muteks wolny działa jak pthread_mutex_lock, jeśli zajęty procedura wraca natychmiastowo, zwraca 0 jeśli muteks typu reentrant został zamknięty przez ten sam wątek, zwraca EBUSY w pozostałych przypadkach) int pthread_mutex_trylock(pthread_mutex_t *mutex) otwieranie muteksa int pthread_mutex_unlock(pthread_mutex_t *mutex) odpowiedzialność za poprawne użycie muteksów (gwarantujące bezpieczeństwo i żywotność) spoczywa na programiście Krzysztof Banaś Obliczenia równoległe 9

Stosowanie zamków Podstawowe typy muteksów: jednorazowy (typ w POSIX: PTHREAD_MUTEX_NORMAL, PTHREAD_MUTEX_DEFAULT) wielokrotnego wejścia (reentrant, PTHREAD_MUTEX_RECURSIVE) muteks posiada zmienną zliczającą zamknięcia przez wątek Wskazówki praktyczne stosowania zamków (muteksów, semaforów, zmiennych warunku itp.): jeśli to możliwe eliminować użycie zamków przez modyfikacje algorytmów, jeśli nie da się wyeliminować, minimalizować liczbę zamków i częstotliwość ich używania zakładać zamki we właściwej kolejności w każdym wątku w celu uniknięcia zakleszczenia dla każdego zamknięcia umieścić we właściwym miejscu otwarcie uwzględnić różnice w przypadku stosowania wątków o wielokrotnym wejściu (reentrant locks) Krzysztof Banaś Obliczenia równoległe 10

Współbieżne struktury danych Alternatywą do stosowania dostępu do struktur danych wewnątrz sekcji krytycznej jest projektowanie współbieżnych struktur danych, czyli struktur, do których dostęp jest bezpieczny z poziomu wielu współbieżnie wykonywanych wątków Implementacja współbieżnych struktur danych może korzystać z dowolnych technik gwarantowania bezpieczeństwa i żywotności (np. programowej pamięci transakcyjnej lub innych złożonych algorytmów, ewentualnie technik omawianych na poprzednich slajdach) Obiektowe języki programowania i związane z nimi biblioteki zawierają wiele współbieżnych struktur danych, których stosowanie ma ułatwić programistom tworzenie poprawnych i wydajnych programów równoległych Krzysztof Banaś Obliczenia równoległe 11

Problemy współbieżności Problem producentów i konsumentów Problem czytelników i pisarzy Problem ucztujących filozofów (pięciu): filozof: albo je, albo myśli filozofowie siedzą przy stole, każdy ma talerz, pomiędzy każdymi dwoma talerzami leży widelec na środku stołu stoi misa z spaghetti problem polega na tym, że do jedzenia spaghetti potrzebne są dwa widelce (po obu stronach talerza) jak zapewnić przeżycie filozofom? Krzysztof Banaś Obliczenia równoległe 12

Wzajemne wykluczanie wątków Semafory konstrukcja teoretyczna umożliwiająca poprawne rozwiązanie problemu wzajemnego wykluczania semafor jest zmienną globalną, na której można dokonywać dwóch niepodzielnych, wykluczających się operacji, zwyczajowo nazywanych: P (probeer, wait) i V (verhoog, signal) (obie często zaimplementowane w jądrze systemu operacyjnego, gdyż zawierają operacje atomowe) P( int s ){ if( s>0 ) s ; else uśpij_wątek(); } V( int s ) { if( ktoś_śpi() ) obudź_wątek(); else s++; } dodatkowo inicjacja semafora, np. init( int s, int v ) { s=v; } implementacja V decyduje o uczciwości semafora (np. FIFO) wartość s oznacza liczbę dostępów do zasobu np. semafor binarny Krzysztof Banaś Obliczenia równoległe 13

Wzajemne wykluczanie wątków Semafory rozwiązanie problemu ucztujących filozofów rozwiązanie proste dopuszczające blokadę (niepoprawne) widelec[i], i=0..4 // pięć semaforów binarnych dla pięciu widelców // (zainicjowanych wartością 1) wątek_filozof(int i){ // procedura dla i tego filozofa // (pięć współbieżnie realizowanych wątków, i=0..4) for(;;){ myśl(); wait(widelec[i]); wait(widelec[(i+1) mod 5]); jedz(); signal(widelec[i]); signal(widelec[(i+1) mod 5]); } } kiedy nastąpi blokada? Krzysztof Banaś Obliczenia równoległe 14

Wzajemne wykluczanie wątków Semafory rozwiązanie problemu ucztujących filozofów rozwiązanie poprawne, nieco bardziej skomplikowane widelec[i], i=0..4 // pięć semaforów binarnych dla pięciu widelców // (zainicjowanych wartością 1) pozwolenie // semafor poczwórny (zainicjowany wartością 4) wątek_filozof(int i){ // procedura dla i tego filozofa // (pięć współbieżnie realizowanych wątków, i=0..4) for(;;){ myśl(); wait(pozwolenie); wait(widelec[i]); wait(widelec[(i+1) mod 5]); jedz(); signal(widelec[i]); signal(widelec[(i+1) mod 5]); signal(pozwolenie); } } Krzysztof Banaś Obliczenia równoległe 15