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

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

Programowanie procesorów graficznych GPGPU

Programowanie procesorów graficznych GPGPU

Moc płynąca z kart graficznych

Wstęp do obliczeń równoległych na GPU

Programowanie aplikacji równoległych i rozproszonych

Operacje grupowego przesyłania komunikatów. Krzysztof Banaś Obliczenia równoległe 1

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

Programowanie równoległe Optymalizacja dostępu do pamięci GPU Elementarne algortymy równoległe. Rafał Skinderowicz

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

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

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

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

CUDA. cudniejsze przyk ady

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Przetwarzanie Równoległe i Rozproszone

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

Numeryczna algebra liniowa

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

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

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

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

Algorytmy dla maszyny PRAM

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

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

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

i3: internet - infrastruktury - innowacje

Tesla. Architektura Fermi

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

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

Programowanie kart graficznych. Architektura i API część 2

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

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Przykładem jest komputer z procesorem 4 rdzeniowym dostępny w laboratorium W skład projektu wchodzi:

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

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

Numeryczna algebra liniowa. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

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

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

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

Materiały pomocnicze do laboratorium. 1. Miary oceny efektywności 2. Mnożenie macierzy 3. Znajdowanie liczb pierwszych

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

Analiza efektywności przetwarzania współbieżnego

tablica: dane_liczbowe

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

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

Równoległe algorytmy sortowania. Krzysztof Banaś Obliczenia równoległe 1

10/14/2013 Przetwarzanie równoległe - wstęp 1. Zakres przedmiotu

2 Przygotował: mgr inż. Maciej Lasota

ROZPROSZONY SYSTEM DO KRYPTOANALIZY SZYFRÓW OPARTYCH NA KRZYWYCH ELIPTYCZNYCH

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Operacje grupowego przesyłania komunikatów

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

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

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

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

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

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

CUDA ćwiczenia praktyczne

Zasady analizy algorytmów

Programowanie Równoległe wykład, CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

Zad. 3: Układ równań liniowych

ZASTOSOWANIE PROGRAMOWANIA LINIOWEGO W ZAGADNIENIACH WSPOMAGANIA PROCESU PODEJMOWANIA DECYZJI

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wydajność programów sekwencyjnych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

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

Nowoczesne technologie przetwarzania informacji

Podstawy Informatyki Systemy sterowane przepływem argumentów

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

Programowanie Współbieżne

Programowanie CUDA informacje praktycznie i przykłady. Wersja

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Wprowadzenie do GPGPU

Symulacja obliczeń kwantowych

Wprowadzenie do GPGPU

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

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

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

Zadania na zaliczenie przedmiotu Przetwarzanie równoległe Zebrał dla roku.ak. 2015/2016 Rafał Walkowiak,

Programowanie CUDA informacje praktycznie i. Wersja

Programowanie dynamiczne

PARADYGMATY PROGRAMOWANIA Wykład 3

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Programowanie kart graficznych

Obliczenia równoległe

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Podstawy OpenCL część 2

Podstawy programowania w języku C

Programowanie Współbieżne. Algorytmy

Lista. Algebra z Geometrią Analityczną. Zadanie 1 Przypomnij definicję grupy, które z podanych struktur są grupami:

Zaawansowane algorytmy i struktury danych

Algorytmy i Struktury Danych. Anna Paszyńska

Wskaźniki. Programowanie Proceduralne 1

Język programowania PASCAL

MATLAB tworzenie własnych funkcji

Transkrypt:

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

Projektowanie kerneli Zasady optymalizacji: należy maksymalizować liczbę wątków (w rozsądnych granicach, granice zależą też od możliwości sprzętu) globalna liczba wątków jest ograniczona (także indywidualnie dla każdego wymiaru przestrzeni wątków) liczba wątków w grupie jest ograniczona liczba grup jest ograniczona (także indywidualnie dla każdego wymiaru przestrzeni wątków) liczba grup aktywnych jest ograniczona:» przez ograniczoną liczbę rejestrów CU» przez ograniczony rozmiar pamięci wspólnej CU» przez możliwości sprzętu optymalny dobór podziału pracy na wątki może być bardzo złożony i różny dla każdego GPU można próbować rozwiązać problem analitycznie zdarza się, że konieczne są eksperymenty Krzysztof Banaś Obliczenia równoległe 2

Model pamięci OpenCl Krzysztof Banaś Obliczenia równoległe 3

Projektowanie kerneli Zasady optymalizacji: opóźnienie w dostępie do pamięci jest ukrywane przez współbieżne wykonywanie wielu wątków na pojedynczym PE wiele grup wątków na jednym CU bardzo duże grupy wątków (z rozmiarem będącym wielokrotnością warp/wavefront) obowiązują standardowe zasady: usuwanie zależności danych, zasobów redukcja złożoności wyrażeń (strength reduction) operacje / (dzielenie całkowite) i %(modulo) są zazwyczaj kosztowne minimalizacja liczby operacji optymalizacja dostępu do pamięci Krzysztof Banaś Obliczenia równoległe 4

OpenCL zależności zasobów Krzysztof Banaś Obliczenia równoległe 5

Przykład mnożenie macierz wektor Prosta strategia: jeden wątek jeden element wektora wyniku dla dużych wektorów oznacza rozmiar grupy 1 czy dostęp do tablicy M jest optymalny? kernel void mat_vec_1_kernel( const global float* M, uint width, uint height, const global float* V, global float* W) { uint j = get_global_id(0); const global float* row = M + j * width; float dotproduct = 0; for (uint i = 0; i < width; ++i) dotproduct += row[i] * V[i]; W[j] = dotproduct; } Krzysztof Banaś Obliczenia równoległe 6

Przykład mnożenie macierz wektor Modyfikacja: jeden wątek wiele elementów wektora wyniku zwiększenie rozmiaru grupy, liczba grup dobierana dowolnie dostęp do M nie zmieniony kernel void mat_vec_2_kernel( const global float* M, uint width, uint height, const global float* V, global float* W) { for (uint j = get_global_id(0); j < height; j += get_global_size(0)){ const global float* row = M + j * width; float dotproduct = 0; for (uint i = 0; i < width; ++i) dotproduct += row[i] * V[i]; W[j] = dotproduct; } Krzysztof Banaś Obliczenia równoległe 7

Przykład mnożenie macierz wektor Modyfikacja dostępu do M jeden wiersz dla grupy wątków, wiele wierszy na grupę kolejne wątki w grupie czytają kolejne wyrazy M konieczność redukcji kernel void mat_vec_3_kernel(... ) { for (uint j = get_group_id(0); j < height; j += get_num_groups(0)) { const global float* row = M + j * width; float sum = 0.0; for (uint x = get_local_id(0); x < width; x += get_local_size(0)) sum += row[x] * V[x]; // REDUKCJA... } Krzysztof Banaś Obliczenia równoległe 8

Redukcja GPU Redukcja naiwna redukcja wątki zapisują wynik do tablicy pojedynczy wątek sumuje wyrazy tablicy konieczność synchronizacji działania redukcja właściwa rozmaite warianty wykorzystania drzewa redukcji Krzysztof Banaś Obliczenia równoległe 9

Redukcja GPU Krzysztof Banaś Obliczenia równoległe 10

Redukcja GPU Wariant 1: standardowe drzewo redukcji partialdotproduct[get_local_id(0)] = sum; for (uint stride = 1; stride < get_local_size(0); stride *= 2) { barrier(clk_local_mem_fence); uint index = 2 * stride * get_local_id(0); if (index < get_local_size(0)) { partialdotproduct[index] += partialdotproduct[index + stride]; } } Krzysztof Banaś Obliczenia równoległe 11

GPU memory banks Krzysztof Banaś Obliczenia równoległe 12

Redukcja GPU Krzysztof Banaś Obliczenia równoległe 13

Redukcja GPU Wariant 2: optymalny dostęp do pamięci lokalnej (wspólnej) kolejne wątki uzyskują dostęp do kolejnych komórek pamięci partialdotproduct[get_local_id(0)] = sum; for (uint stride = get_local_size(0)/2; stride > 0; stride /= 2) { barrier(clk_local_mem_fence); if (get_local_id(0) < stride) { partialdotproduct[get_local_id(0)] += partialdotproduct[get_local_id(0)+stride]; } } ciąg dalszy kodu iloczynu macierz wektor if (get_local_id(0) == 0) W[y] = partialdotproduct[0]; barrier(clk_local_mem_fence); Krzysztof Banaś Obliczenia równoległe 14