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

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

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

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

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

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

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

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

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

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

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

Architektury systemów równoległych

Programowanie procesorów graficznych GPGPU

Plan wykładu. Obliczenia równoległe w zagadnieniach inżynierskich. Wykład 1 p. Wzajemne wykluczanie. Procesy współbieżne

4. Procesy pojęcia podstawowe

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

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

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

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

4. Procesy pojęcia podstawowe

Model pamięci. Rafał Skinderowicz

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

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

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

Procesy, wątki i zasoby

Kompilator języka C na procesor 8051 RC51 implementacja

1. Uruchom poniższy program tworzący pojedynczy wątek:

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

4. Procesy pojęcia podstawowe

Przetwarzanie Równoległe i Rozproszone

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

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

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

Wskaźniki w C. Anna Gogolińska

Procesy, zasoby i wątki

Procesy, zasoby i wątki

Procesy, zasoby i wątki

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

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

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

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Plan wykładu. Programowanie aplikacji równoległych i rozproszonych. Wykład 1 p. Wzajemne wykluczanie. Procesy współbieżne

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

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

Programowanie aplikacji równoległych i rozproszonych. Wykład 1

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

Wielozadaniowość w systemie Microsoft Windows

Wykład 4: Klasy i Metody

Implementacje zgodne z tym standardem są nazywane wątkami POSIX lub Pthreads.

Programowanie współbieżne i rozproszone

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

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

Organizacja typowego mikroprocesora

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

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

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

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Podstawy programowania obiektowego

16. Taksonomia Flynn'a.

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

UŻYCIE I ZARZĄDZANIE WĄTKAMI

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

Podstawy programowania współbieżnego. 1. Wprowadzenie. 2. Podstawowe pojęcia

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

Aplikacje w Javie- wykład 11 Wątki-podstawy

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Programowanie niskopoziomowe

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

Czym jest stos i sterta?

Wstęp. Przetwarzanie równoległe. Krzysztof Banaś Obliczenia równoległe 1

DYNAMICZNE PRZYDZIELANIE PAMIECI

Architektura komputerów

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

Projektowanie. Projektowanie mikroprocesorów

Wstęp. Przetwarzanie współbieżne, równoległe i rozproszone

PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP.

Materiały do zajęć VII

Wydajność obliczeń a architektura procesorów. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

UŻYCIE I ZARZĄDZANIE WĄTKAMI

W dowolnym momencie można zmienić typ wskaźnika.

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wskaźniki. Programowanie Proceduralne 1

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

Logiczny model komputera i działanie procesora. Część 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.

Lab 9 Podstawy Programowania

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

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

Model pamięci. Rafał Skinderowicz

PMiK Programowanie Mikrokontrolera 8051

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces

Numeryczna algebra liniowa

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Działanie systemu operacyjnego

Transkrypt:

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

Procesy i wątki Proces: ciąg rozkazów (wątek główny) i ewentualnie inne wątki stos (wątku głównego) przestrzeń adresowa dodatkowe elementy tworzące m.in. kontekst procesu Wątek ciąg rozkazów stos niektóre z elementów tworzących kontekst procesu Tworzenie wątku (Linux): int clone(int (*fn)(void *), void *child_stack, int flags, void *arg) Przyczyna wprowadzenia wątków: łatwość komunikacji przy użyciu pamięci wspólnej i wydajność przełączania kontekstu Krzysztof Banaś Obliczenia równoległe 2

Wątki pthreads Specyfikacja POSIX (IEEE 1003.1, 1995, 2001) Operacje na wątkach: określanie atrybutów ( odłączalność, adres i rozmiar stosu, itp.) tworzenie i uruchamianie (pthread_create) porównywanie identyfikatorów (pthread_equal, pthread_self) zabijanie i przesyłanie sygnałów (pthread_cancel, pthread_kill) odłączanie (pthread_detach) oczekiwanie na zakończenie (pthread_join) int pthread_create(pthread_t *thread, pthread_attr_t *attr, void * (*start_routine)(void *), void * arg) int pthread_join(pthread_t th, void **thread_return) Krzysztof Banaś Obliczenia równoległe 3

Tworzenie wątków main(){ int arg_1, arg_2; wyn_1 = pthread_create(& tid_1, NULL, wątek, &arg_1); wyn_2 = pthread_create(& tid_2, NULL, wątek, &arg_2); wyn_1 = pthread_join( tid_1, NULL); wyn_2 = pthread_join( tid_2, NULL); } void * wątek (void * arg_wsk){ int moj_arg; moj_arg = *( (int *) arg_wsk ); } Krzysztof Banaś Obliczenia równoległe 4

Przesyłanie argumentów do wątków typedef struct { int a; double b;} struktura; main(){ struktura s; s.a = 1; s.b = 3.14; pthread_create(& tid, NULL, funkcja_w, (void *) &s);... } void * funkcja_w (void * arg_wsk){ struktura s_lok = *((struktura *)wsk); // struktura lokalna! // dostęp do zmiennych lokalnych: printf("watek: s_lok.a = %d, s_lok.b = %lf\n", s_lok.a, s_lok.b); // dostęp do zmiennych nie lokalnych kopiowanie wskaźnika z rzutowaniem typu struktura * s_wsk = (struktura *) arg_wsk; printf("zewn.: "s_zewn.a = %d, s_zewn.b = %lf\n, s_wsk >a, s_wsk >b);... } Krzysztof Banaś Obliczenia równoległe 5

Komunikacja między wątkami Komunikacja między wątkami odbywa się głównie za pomocą pamięci wspólnej W celu realizacji modelu SPMD można do wielu wątków wykonujących ten sam kod przesłać inne dane jako argumenty pierwotnie wywoływanej procedury częstym przypadkiem jest przesłanie identyfikatora wątku każdy wątek posiada indywidualny identyfikator i na jego podstawie może: zlokalizować dane, na których dokonuje przetwarzania dane[ f(my_id) ] wybrać ścieżkę wykonania programu if(my_id ==...){...} określić iteracje pętli, które ma wykonać for( i=f1(my_id); i< f2(my_id); i += f3(my_id) ){... } Krzysztof Banaś Obliczenia równoległe 6

Komunikacja między wątkami Komunikacja za pomocą pamięci wspólnej ma charakter rozgłaszania: zapis wartości zmiennej wspólnej przez pojedynczy wątek oznacza możliwość odczytania wartości przez wszystkie wątki intuicyjnie widać, że poprawne działanie komunikacji wymaga synchronizacji działania wątków (zapis musi poprzedzać odczyt) problemy programowania równoległego biorą się między innymi stąd, że pierwotnie w modelach wykonania w językach programowania wszystkie zmienne znajdowały się w pamięci operacyjnej (w pojedynczym egzemplarzu), podczas gdy w rzeczywistości w systemie komputerowym występują w wielu kopiach na różnych poziomach pamięci (rejestry, pamięć podręczna, DRAM) powstaje problem jak synchronizować dostępy do wielu kopii jednej zmiennej Krzysztof Banaś Obliczenia równoległe 7

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 8

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 9

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 10