lato 2014,, Wydział Elektroniki i Technik Informacyjnych
Wykład (poniedziałek 10:15) dr inż. Jacek Naruniec, dr inż. Maciej Sypniewski Laboratoria (3-godzinne) w 08 Środy 12:15 Projekt Punktacja: Laboratorium (L) Projekt (P) Egzamin (E) Suma = (L + P + E)*0.8 5*10 punktów - 25 punktów - 50 punktów 2
Zaliczenie po przekroczeniu progu 50 p. i min. 25 punktów za egzamin, dalsze progi standardowe Laboratorium można oddać maksymalnie tydzień po terminie bez utraty punktów (o ile jest to możliwe ze względów sprzętowych) Za każdy kolejny tydzień opóźnienia laboratorium 2 punkty straty Ostateczny termin oddania projektu do końca sesji 3
Wykład: Wprowadzenie do programowania współbieżnego: (4h) (JN) Technologie obliczeń równoległych: (4h) (MS) przegląd Podstawy projektowania algorytmów równoległych: (2h) (JN) Programowanie procesorów graficznych: (6h) (JN+MS) CUDA, OpenCl, C++AMP Proste przykłady realizacji obliczeń na platformach GPU: (2h) (MS) od rozwiązania prostego po zoptymalizowane Wprowadzenie do analizy danych multimedialnych: (2h) (JN) Wybrane algorytmy wspomagające analizę danych multimedialnych: (6h) (JN) Algorytm FDTD analizy elektromagnetycznej: (4h) (MS) 4
Laboratorium Szczegóły będą określone w czasie trwania semestru, ogólnie: Realizacja matematycznych algorytmów obliczeniowych 1 (MS). Realizacja matematycznych algorytmów obliczeniowych 2 (JN). Algorytmy filtracji obrazów - CPU (JN). Algorytmy filtracji obrazów - GPU (JN). Uproszczony algorytm FDTD GPU (MS) Co najmniej jedno laboratorium na NVIDIA Grid Co najmniej jedno laboratorium na obliczeniach w chmurze 5
Projekt "System analizy obrazu" "Gra interaktywna" Porównanie wydajności obliczeniowej algorytmów FDTD realizowanych w różnych technologiach GPU Projekty samodzielne, można zaproponować (a nawet wskazany jest) własny temat. 6
Literatura podstawowa: 1. Notatki wykładowe. 2. Dokumentacja technologii CUDA, OpenCL i C++AMP. Literatura dodatkowa: 1. W. Malina, M. Smiatacz: "Metody cyfrowego przetwarzania obrazów", EXIT, 2005 2. A. Grama: "Introduction to Parallell Computing", Pearson, 2003. 3. R. Wyrzykowski: "Klastry komputerów PC i architektury wielordzeniowe: budowa i wykorzystanie", AOW Exit, 2009. 4. R.O. Duda: "Pattern Classification (2nd Edition)", Wiley-Interscience, 2000. 5. R.Gaster i inni: Heterogeneous Computing with OpenCL ] 7
1. Zapoznanie się z możliwościami najnowszych technologii przetwarzania równoległego. 2. Zdobycie doświadczenia w implementacji wielowątkowych aplikacji w najnowszych technologiach umożliwiających współbieżność. 8
[źródło: http://www.piotrowice.katowice.pl/wp-content/uploads/2009/11/katowice_satelitarne.jpg] 9
Zadanie znajdź część wspólną tak, aby stworzyć obraz panoramiczny Wymagania podpikselowa dokładność (do ułamka piksela) [źródło: http://www.piotrowice.katowice.pl/wp-content/uploads/2009/11/katowice_satelitarne.jpg] 10
Typowa droga postępowania: wykryj punkty charakterystyczne (np. narożniki, T punkty SIFT, SURF, itp.), określ charakterystykę każdego z punktów, znajdź przekształcenie jednego z obrazów, które da najlepsze dopasowanie jak największej liczby punktów. Jacek Naruniec 11
Znajdź przekształcenie (translację, rotację, skalowanie), które najlepiej wpasuje oba obrazy na siebie. [źródło: http://www.piotrowice.katowice.pl/wp-content/uploads/2009/11/katowice_satelitarne.jpg] 12
Detekcja punktów szczególnych (SIFT) dla danych obrazów: ok. 27 sekund dla jednego procesora ok. 7 sekund dla czterech procesorów (3GHz) Obrazy były zmniejszone do wielkości ~1000x500 Oryginalne obrazy były wielkości ~3000x2000 Inne typowe wielkości takich obrazów to np. 17000x17000 pikseli, czyli ok. 500x większa powierzchnia niż 1000x500! 13
SLAM - Simultaneous localization and mapping automatyczne tworzenie map otoczenia przez robot wymaga szybkiego przetwarzania chmur punktów w celu lokalizacji jeszcze nieznanych terenów chmura może przykładowo zawierać 500000 punktów 14
Inne przykładowe problemy wymagające szybkich, równoległych obliczeń: przepowiadanie pogody, sztormów analiza danych finansowych wyszukiwanie informacji (data mining) kryptologia przetwarzanie danych radarowych modelowanie zjawisk fizycznych modelowanie urządzeń gry komputerowe W przetwarzaniu obrazów: trenowanie złożonych algorytmów klasyfikacyjnych filtracje obrazów operacje macierzowe/wektorowe (podstawowe, czy też transformaty) detekcja/śledzenie obiektów w czasie rzeczywistym programy graficzne 15
Przyspieszenie obliczeń możemy Z osiągnąć np. poprzez: optymalizację algorytmów zrównoleglenie zdań eliminowanie wąskich gardeł minimalizację dostępu IO minimalizację komunikacji między procesami 16
Zgodnie z prawem Moora (współzałożyciel Intela) liczba tranzystorów w układzie scalonym będzie podwajać się co 2 lata. W 2006 roku sam Moore stwierdził, że za 2 czy 3 lata prawo przestanie obowiązywać. Informacje producentów sprzętu (m.in. Intela) zaprzeczają temu i twierdzą, że trend będzie się utrzymywał. 17
[źródło: http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html] 18
[źródło: http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html] 19
Blue Gene (IBM) konstrukcje superkomputerów przetwarzających petabajty operacji / s stosowane, m.in. w symulacji wybuchów jądrowych (USA): testowanie nowych broni, symulowanie podziemnych wybuchów jądrowych. [https://asc.llnl.gov/publications/sequoia2012.pdf] 20
Ranking superkomputerów (www.top500.org) Z Rmax maksymalna wydajność otrzymana dla biblioteki LINPACK Rpeak teoretyczna szczytowa wydajność Cores liczba rdzeni 21
Obliczenia w chmurze. Z udostępniane wirtualne środowisko pracy do wykonywania obliczeń płacimy za określoną liczbę wykorzystywanych maszyn w czasie nie mamy fizycznego kontaktu ze sprzętem skalowalność! Amazon EC2 Google Cloud Windows Azure 22
Pamięć podręczna (cache) Szybka pamięć zawierająca najczęściej używane instrukcje, dane oraz odwzorowania adresów wirtualnych na adresy fizyczne. Prowadzi do minimalizacji dostępu do powolnych pamięci. Szybsza od pamięci w której znajdują się pełne dane. Może być wielopoziomowa (L1, L2, L3) CPU 0x25? 0x33 Cache Adres wartość 0x25 0x33 0x28 0xff 0x01 0x00 RAM Adres wartość 0x00 0x02 0x01 0x00 0x02 0x00 0x03 0x82 0x04 0xcd 0x05 0xff 23
Pamięć wirtualna odwzorowuje ciągłe, wirtualne adresy na fizyczne adresy w pamięci umożliwia, m.in. wykorzystanie przestrzeni dyskowej jako pamięci programu Pamięć wirtualna Adres 0x00 RAM 0x01 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A Dysk twardy 0x0B 24
Pamięć dzielona (shared) pamięć, do której wspólny dostęp ma wiele wątków aplikacji, jeden wątek może rezerwować obszar pamięci, inne korzystają z tego samego wątka. należy pamiętać (w szczególności przy GPU), że nie zawsze tworząc oddzielne podzadania mamy dostęp do tych samych obszarów pamięci! Wątek 1 Pamięć dzielona Adres wartość Wątek 3 0x00 0x02 0x01 0x00 0x02 0x00 0x03 0x82 0x04 0xcd 0x05 0xff Wątek 2 Wątek 4 25
Architektury komputerów: Single Instruction Single Data stream (SISD) (pojedyncza instrukcja, pojedynczy strumień danych) Najprostsza architektura procesorów nie umożliwiająca prawdziwej równoległości procesów. Natura sekwencyjna. jednostka sterująca instrukcja procesor dane pamięć 26
Architektury komputerów: Multiple Instruction Single Data stream (MISD) (wiele instrukcji, pojedynczy strumień danych) Wiele operacji operujących na tych samych danych. W praktyce w większości niespotykane niepraktyczne ze względu na czasy dostępu do pamięci. instrukcja 1 procesor jednostka sterująca dane dane pamięć instrukcja 2 procesor 27
Architektury komputerów: Single Instruction Multiple Data stream (SIMD) (pojedyncze instrukcje, wiele strumieni danych) Wiele procesorów w ramach jednej instrukcji przetwarza wiele danych. Powszechnie stosowane, np. SSE, SEE2, AVX, w GPU. jednostka sterująca instrukcja procesor dane 1 dane 2 pamięć instrukcja procesor 28
Architektury komputerów: Multiple Instruction Multiple Data stream (MIMD) (wiele instrukcji, wiele strumieni danych) Wiele procesorów przetwarza wiele danych przy pomocy różnych instrukcji. Spotykane np. w popularnych PCtach wielordzeniowych. jednostka sterująca Instrukcja 1 procesor dane 1 dane 2 pamięć Instrukcja 2 procesor 29
Proces: Jest to program dla którego system przygotowuje oddzielny zestaw zasobów, w tym pamięć, licznik rozkazów. Rozpoczyna się wywołaniem głównego wątku procesu. Wątek: Proces może wywołać wątki, które dzielą ze sobą zasoby systemowe i pamięć wirtualną. Każdy wątek ma swój unikalny identyfikator. 30
Wielozadaniowość (multitasking) pozwala na wykonywanie wielu zadań jednocześnie. nie musi oznaczać przetwarzania równoległego! jeśli mamy więcej zadań niż procesorów, zwykle przyjmowana jest zasada timeslicing, czyli przydzielanie po krótkim okresie czasu procesora każdemu zadaniu na zmianę czasy powinny być na tyle małe, aby nawet na procesorze jednordzeniowym mieć wrażenie jednoczesnego wykonania wielu zadań. procesor do zadania przydziela planista (sheduler), zgodnie z priorytetami 31
Przykład (multitasking): Zadanie wyświetlania (W), złożona operacja Załóżmy jeden procesor i zadania W i L występujące zawsze po sobie (jeden proces) wolny komputer czas [ms] 10 20 30 40 50 60 70 zadanie L(1) W(1) W(2) L(1) W(1) W(2) L(1) Zadanie kroku czasowego ligiki (L), szybka operacja szybki komputer czas [ms] 10 20 30 40 50 60 70 zadanie L(1) W(1) W(2) L(1) W(1) W(2) L(1) W(1) W(2) L(1) 32
Przykład (multitasking): Zadanie wyświetlania (W), złożona operacja Załóżmy jeden procesor i zadania W i L występujące w oddzielnych wątkach wolny komputer czas [ms] 10 20 30 40 50 60 70 zadanie L(1) W(1) L(1) W(2) L(1) W(1) L(1) Zadanie kroku czasowego ligiki (L), szybka operacja szybki komputer czas [ms] 10 20 30 40 50 60 70 zadanie L(1) W(1) W(2) L(1) W(1) W(2) L(1) W(1) W(2) L(1) 33
Wieloprocesorowość (multiprocessing) pozwala na wykonywanie wielu zadań jednocześnie na osobnych procesorach. rzeczywiste przetwarzanie równoległe wymaga obecności więcej niż jednego procesora time-slicing w przypadku większej liczby zadań niż procesorów 34
Przykład (multiprocessing): Zadanie wyświetlania (W), złożona operacja Załóżmy dwa procesory i zadania W i L występujące w oddzielnych wątkach wolny komputer czas [ms] 10 20 30 40 50 60 70 Procesor 1 L(1) L(1) L(1) L(1) Procesor 2 W(1) W(2) W(1) W(2) W(1) W(2) W(1) Zadanie kroku czasowego ligiki (L), szybka operacja szybki komputer czas [ms] 10 20 30 40 50 60 70 Procesor 1 L(1) L(1) L(1) L(1) Procesor 2 W(1) W(2) W(1) W(2) W(1) W(2) W(1) W(2) W(1) W(2) W(1) W(2) W(1) W(2) 35
Ziarnistość zadań określa nam liczbę i wielkość przetwarzanych zadań: drobnoziarniste: duża liczba małych zadań Przykład: obrót obrazu o wysokości h, szerokości w, gdzie dla każdego piksela tworzymy oddzielny wątek, otrzymując w*h procesów. Każdy wątek odczytuje wartość jednego piksela, znajduje jego nową pozycję i wpisuje ją do nowej tablicy zawierającej obrócony obraz. jeden wątek Czy taki algorytm byłby efektywny czy może lepiej podzielić obraz na większe bloki? 36
Ziarnistość zadań określa nam liczbę i wielkość przetwarzanych zadań: gruboziarniste: mała liczba dużych zadań Przykład: obrót obrazu o wysokości h, szerokości w, gdzie dla każdego bloku pikseli tworzymy oddzielny wątek, otrzymując w*h/(powierzchnia bloku) procesów. Każdy wątek odczytuje wartość pikseli bloku, znajduje ich nową pozycję i wpisuje je do nowej tablicy zawierającej obrócony obraz. jeden wątek Który algorytm będzie efektywniejszy? Na to pytanie odpowiemy sobie później. 37
Ziarnistość zadań określa nam liczbę i wielkość przetwarzanych zadań: Często specyfika aplikacji wymusza ziarnistość zadań. Bywa, że w jednej aplikacji mamy wymuszoną mieszaną ziarnistość. [źródło: R.Gaster i inni: Heterogeneous Computing with OpenCL ] 38
Dekompozycję pojedynczych zadań na podzadania mogące być wywołane równolegle można przedstawić w postaci grafów zależności zadań. W grafie tym węzeł będzie oznaczał zadanie, natomiast połączenie zależność. Kolejne zadanie nie może zostać wykonane dopóki wszystkie wchodzące do niego zależności nie są spełnione. Przykład: rozwiązanie równania macierzowego Y ( AB CD EF ) G HI AB CD EF (AB +CD+EF)G HI (AB +CD+EF)G + HI 39
Inny przykład: detekcja twarzy od szczegółu do ogółu 1 1. Pozyskanie obrazu wejściowego. 2. Detekcja konturów. 3. Detekcja punktów szczególnych w konturach. 4. Wybranie z wybranych punktów tych, które odpowiadają określonej części twarzy (oko, oko, nos, usta). 5. Wybranie kombinacji części twarzy tworzących całą twarz. 3 4 2 5 40
Ścieżka krytyczna jest to określona ścieżka w grafie zadań, której opóźnienie będzie oznaczać opóźnienie całego systemu. jest to najdłuższa ważona ścieżka grafu niewielkie opóźnienie pozostałych elementów nie wpłynie na długość wykonania procesu AB (8) CD (8) EF (10) (AB +CD+EF)G (40) HI (10) (AB +CD+EF)G + HI (10) 41
Zdarzenie synchroniczne Będziemy tutaj rozumieli jako funkcję, która po wywołaniu zwraca sterowanie do wywołującego wątku dopiero w momencie wykonania pełnej operacji. Zdarzenie asynchroniczne Będziemy tutaj rozumieli jako funkcję, która po wywołaniu zwraca sterowanie do wywołującego wątku natychmiast. Zakończenie zadania jest zwykle sygnalizowane przez określone zdarzenie. 42
Architektury heterogeniczne architektury komputerów przystosowane do rozwiązywania zadań o różnej naturze, np. o różnej ziarnistości. złożone z różnych podsystemów przykładem może być połączenie CPU z FPGA bądź CPU z GPGPU (General Purpose computing on Graphical Processing Unit). Współczesne komputery pozwalają na równoległe wykonywanie zadań GPU i CPU CPU zadania sekwencyjne GPU zadania silnie równoległe 43
Architektury heterogeniczne Cel naukowy stworzyć taką obsługę systemową, która dla zaprojektowanych zadań sama wybierze które urządzenie jest najlepsze dla danego zadania. CPU zadania sekwencyjne GPU zadania silnie równoległe 44
Problem pisarz/czytelnik Metody tworzenia wątków i synchronizacji między nimi. 45