Przetwarzanie Równoległe i Rozproszone

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

Programowanie procesorów graficznych GPGPU

Tesla. Architektura Fermi

i3: internet - infrastruktury - innowacje

Programowanie Współbieżne

Programowanie kart graficznych

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

Przetwarzanie Równoległe i Rozproszone

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Algorytmy i Struktury Danych

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

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

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

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka

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

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

Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1

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

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

Numeryczna algebra liniowa

Programowanie aplikacji równoległych i rozproszonych

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

Architektury komputerów Architektury i wydajność. Tomasz Dziubich

Moc płynąca z kart graficznych

Programowanie CUDA informacje praktycznie i. Wersja

Nowoczesne technologie przetwarzania informacji

Algorytmy dla maszyny PRAM

Programowanie CUDA informacje praktycznie i przykłady. Wersja

16. Taksonomia Flynn'a.

Projektowanie i analiza algorytmów

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

Algorytmy i Struktury Danych

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

Architektura komputerów

Programowanie kart graficznych

Architektura komputerów

Programowanie procesorów graficznych GPGPU

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

Obliczenia Wysokiej Wydajności

Programowanie równoległe Wprowadzenie do OpenCL. Rafał Skinderowicz

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.

XIII International PhD Workshop OWD 2011, October 2011 REALIZACJA OBLICZEŃ W ARCHITEKTURZE MASOWO RÓWNOLEGŁEJ W HETEROGENICZNYCH SYSTEMACH

Systemy wbudowane. Uproszczone metody kosyntezy. Wykład 11: Metody kosyntezy systemów wbudowanych

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

CUDA. cudniejsze przyk ady

dr inż. Jarosław Forenc

Klasyfikacja systemów komputerowych. Architektura von Neumanna Architektura harwardzka Zmodyfikowana architektura harwardzka. dr inż.

CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie. W prezentacji wykorzystano materiały firmy NVIDIA (

Architektura komputerów

Programowanie współbieżne Wprowadzenie do programowania GPU. Rafał Skinderowicz

Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych

Przetwarzanie Rozproszone i Równoległe

Budowa komputera Komputer computer computare

Klasyfikacje systemów komputerowych, modele złożoności algorytmów obliczeniowych

Analiza efektywności przetwarzania współbieżnego

Architektury Komputerów. Tomasz Dziubich p.530, konsultacje czwartek i 11-12, dziubich@eti.pg.gda.pl

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

Programowanie PKG - informacje praktycznie i przykłady. Wersja z Opracował: Rafał Walkowiak

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

Budowa i użytkowanie klastrów w opaciu o układy Cell BE oraz GPU

CUDA jako platforma GPGPU w obliczeniach naukowych

Architektura von Neumanna

Projektowanie. Projektowanie mikroprocesorów

Podstawy Informatyki Systemy sterowane przepływem argumentów

Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej

Architektura komputerów

Programowanie kart graficznych. Sprzęt i obliczenia

ROZPROSZONY SYSTEM DO KRYPTOANALIZY SZYFRÓW OPARTYCH NA KRZYWYCH ELIPTYCZNYCH

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

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Budowa i zasada działania komputera. dr Artur Bartoszewski

Dr inż. hab. Siergiej Fialko, IF-PK,

Zarządzanie pamięcią w systemie operacyjnym

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

Zastosowanie technologii nvidia CUDA do zrównoleglenia algorytmu genetycznego dla problemu komiwojażera

Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1

Zarządzanie pamięcią operacyjną

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

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Praca dyplomowa magisterska

Architektura mikroprocesorów TEO 2009/2010

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Podstawy informatyki. System operacyjny. dr inż. Adam Klimowicz

Architektura komputerów

ZASADY PROGRAMOWANIA KOMPUTERÓW

Obliczenia Wysokiej Wydajności

CUDA. obliczenia na kartach graficznych. Łukasz Ligowski. 11 luty Łukasz Ligowski () CUDA 11 luty / 36

Metody Programowania

SYSTEMY OPERACYJNE WYKLAD 6 - wątki

Larrabee GPGPU. Zastosowanie, wydajność i porównanie z innymi układami

Modelowanie rynków finansowych z wykorzystaniem pakietu R

4. Procesy pojęcia podstawowe

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

Podstawy OpenCL część 2

Programowanie GPU jako procesora ogólnego przeznaczenia.

Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo.

Automatyzacja procesu tworzenia sprzętowego narzędzia służącego do rozwiązywania zagadnienia logarytmu dyskretnego na krzywych eliptycznych

Transkrypt:

POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI I TECHNOLOGII INFORMACYJNYCH Przetwarzanie Równoległe i Rozproszone www.pk.edu.pl/~zk/prir_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl

Wykład 17: Architektury GP-GPUs i programowanie CUDA/OpenCL Rys historyczny Opis architektur GPUs (procesor wielościeżkowy SIMD, Nvidia Fermi, NVIDIA Kepler) Charakterystyka NVIDIA GPUs Wprowadzenie do programowania CUDA Synchronizacja i organizacja pamięci dzielonej (SM) Przykład mnożenia dwóch wektorów Szeregowanie wątków CUDA Efektywny dostęp do pamięci Wprowadzenie do Open CL

Rys historyczny Od akceleracji grafiki w procesorach GPU do obliczeń naukowych i naukowej symulacji w GP-GPU Optymalizacja dla dużej liczby danych i wydajnych obliczeń zmienno-przecinkowych wykonywanych przez bardzo wiele wątków i rdzeni Wielordzeniowość w GPU wcześniej i w szerszym zakresie niż w CPU Skrajna pracochłonność programowania dla celów pozagraficznych w środowiskach DirectX i Open GL Odpowiedź - nowe środowiska programowania : CUDA (Compute Unified Device Architecture, 2007) OpenCL (Open Computing Language, 2008, Apple/ Intel/AMD-ATI/NVIDIA) - oba na bazie języka C

Architektury GPUs Paralelizm danych GPU odpowiada charakterowi obliczeń numerycznych w naukowej symulacji (np. algorytmy iteracyjne dla systemów równań liniowych) GPU składa się z kilku wielościeżkowych procesorów SIMD, które są niezależnymi rdzeniami procesorów MIMD, przetwarzającymi niezależne sekwencje instrukcji. Liczba SIMD w jednym GPU zależy od modelu GPU Każdy SIMD ma kilka jednostek funkcyjnych FU, które wykonują tą samą instrukcję na różnych danych Każda FU posiada oddzielny zbiór rejestrów danych pobierających dane z pamięci globalnej GPU (off-chip) W nowszych GPUs istnieje hierarchia pamięci cache

Architektury GPUs procesor SIMD 16 function units (rdzeń + rejestry + load-store unit) Każda FU posiada jednostkę całkowito-liczbową (INT unit) oraz zmienno-przecinkową (FP unit) Kilka niezależnych wątków SIMD (!) z niezależnymi zbiorami rejestrów, szeregowanych przez SIMD thread scheduler (rekompensuje to opóźnienia przy transferze danych) Score board śledzi numery instrukcji w każdym wątku SIMD oraz informacje dot. obecności operandów w rejestrach (rozmiar SB ogranicza ilość wątków SIMD, dla architektury Fermi 32) Jednostka adresowa zapewnia dostęp do pamięci lokalnej i globalnej

Architektury GPUs procesor SIMD

Schemat blokowy procesora SIMD w architekturze NVIDIA Fermi

Schemat blokowy GTX 480 w architekturze NVIDIA Fermi

Charakterystyka NVIDIA GTX 480 (Fermi)

Schemat blokowy procesora SIMD w architekturze NVIDIA Kepler

Schemat blokowy klastra przetwarzania grafiki (GPC) w architekturze NVIDIA Kepler

Schemat blokowy GTX 680 w architekturze NVIDIA Kepler

Charakterystyka NVIDIA GTX 680 (Kepler)

Charakterystyka zbiorcza NVIDIA GPUs

Środowiska programowania GPUs środowiska programowania dostarczają model programowania adekwatny dla GPUs oba nowe środowiska dzielą dany program na program dla CPU (host program), zawierający operacje we/wy i/lub interakcję z użytkownikiem, i program dla GPU (device program), zawierający wszystkie obliczenia na GPU Zarządzanie wątkami odbywa się przez ich pogrupowanie, co ułatwia synchronizację

CUDA: grid wątków i bloki wątków

Program CUDA: dodawanie dwóch wektorów

CUDA: organizacja pamięci

Program CUDA: mnożenie dwóch wektorów

Ilustracja mnożenia dwóch wektorów

Opis mnożenia dwóch wektorów

CUDA: szeregowanie wątków Zwykle liczba wątków przekracza liczbę jednostek wykonawczych (function units) Przydział niezależnych bloków wątków gridu do jednostek (niezależne wykonanie) Duże bloki wątków są dalej dzielone (warps obecnie 32 wątki) i szeregowane w oparciu o zakresy indeksów wątków (threadidx) puste wątki wirtualne Warps są wykonywane w modelu obliczeń CUDA: SIMT Model SIMT jest efektywny, gdy wątki są tak samo sterowane (co nie jest regułą w przypadku konstrukcji warunkowych) Różne ścieżki sterowania wątków w warp spowalniają obliczenia

Efektywny dostęp do pamięci Dostęp do globalnej pamięci jest kosztowny Niezbędne jest kopiowanie danych do pamięci dzielonej lub rejestrów Efektywne kopiowanie sąsiednich danych przy jednokrotnym dostępie do pamięci (coalescing) Sąsiednie identyfikatory wątków muszą mieć dostęp do sąsiednich komórek pamięci zawierających dane (np. w tablicy jednowymiarowej) W tablicy 2-wymiarowej występuje sąsiedztwo w wierszach, ale nie w kolumnach, które znajdują się w odległych miejscach pamięci - stąd konieczność stosowania specjalnej techniki zwanej kafelkowaniem (tiling)

Program CUDA: mnożenie macierzy

Program CUDA: mnożenie macierzy

Program CUDA: mnożenie macierzy technika tiling

Program CUDA: mnożenie macierzy technika tiling

Wprowadzenie do OpenCL Metody pozwalające przyporządkować zadania do zaadresowanych wprost komponentów heterogenicznych platform sprzętowych (od laptopów do węzłów superkomputera) Platforma OpenCL składa się z jednego hosta i co najmniej jednego urządzenia wykonującego obliczenia Aplikacja OpenCL składa się z programu hosta i zbioru jąder (kernels) zaimplementowanych w języku OpenCL-C Program host wywołuje jądra do obliczeń na jednym z urządzeń, czemu towarzyszy generacja przez runtime system globalnej przestrzeni indeksowej, nazywanej NDRanges (N-dimentional index space, N=1, 2, 3)

OpenCL - NDRanges Dla każdego punktu przestrzeni indeksowej, nazywanego work item wykonywana jest jedna instancja jądra work items korespondują z wątkami CUDA, różnica polega na możliwości ich adresowania przez globalne indeksy w NDRanges work items można pogrupować w work groups posiadające ten sam rozmiar jako NDRanges w każdym rozmiarze (dimension) rozmiary (sizes) NDRanges muszą być podzielne przez liczbę work groups

OpenCL - synchronizacja work groups posiadają identyfikator grupy, a składowe work items identyfikator lokalny w swoich grupach NDRanges przypominają grid w CUDA, a work groups przypominają bloki w CUDA identyfikacja work items za pomocą dwóch identyfikatorów grupy i lokalnego LUB identyfikatora globalnego w NDRanges (brak w CUDA) bariera synchronizacyjna barrier() odnosi się TYLKO do work items w grupie (powód wprowadzenia grup) OpenCL stosuje równoległy model SIMD lub SPMD (wszystkie work items wykonują tą samą operację na różnych danych)

OpenCL: hierarchia pamięci W Open CL występuje 5 rodzajów pamięci: - pamięć hosta dla programu hosta, oraz - pamięci globalna, stała, lokalna i prywatna w urządzeniu (Computing Device) Program host dynamicznie alokuje przestrzeń w pamięci globalnej GPU (dostęp przez programy hosta i urządzenia), co odpowiada global memory w CUDA Pamięć stała (constant) : RW dla hosta, R dla programu CD, w odróżnieniu od CUDA program host może dynamicznie alokować również pamięć constant Pamieć lokalna : RW dla work items w jednej grupie, odpowiada SM w CUDA Pamięć prywatna : dla pojedynczego work item

OpenCL: hierarchia pamięci

OpenCL przykład dodawania 2 wektorów - deklaracja jądra vectoradd : _kernel zamiast _global w CUDA (suma wektorów a i b, wynik w c) - każdy work item ma globalny identyfikator get_global_id(0) i oblicza dokładnie jeden element wektora wyniku

OpenCL: kolejki rozkazów W Open CL przyporządkowanie obliczeń do urządzeń jest określone za pomocą kolejki rozkazów (command queue) W kolejce dla urządzenia występują : wywołania jąder, operacje alokacji pamięci, operacje kopiowania i synchronizacji są wykonywane kolejno Task parallelism wiele kolejek rozkazów Poprawna interakcja pomiędzy kolejkami jest zapewniona w OpenCL poprzez koncepcję zdarzeń (events) inicjowanych przez rozkazy z kolejki

Literatura 1. Rauber T., Ruenger G.: Parallel programming for multicore and cluster systems, 2nd ed., Springer 2012 2. Schematy procesorów GPU internet.