GPGPU General-Purpose computing on the GPU. Piotr Stańczyk

Podobne dokumenty
Sortowanie - wybrane algorytmy

Programowanie procesorów graficznych GPGPU

Julia 4D - raytracing

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

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

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

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu

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

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Plan wykładu. Akcelerator 3D Potok graficzny

Algorytmy sortujące 1

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

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

Przegląd architektury PlayStation 3

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

INFORMATYKA SORTOWANIE DANYCH.

Przyspieszanie sprzętowe

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

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

Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Podstawy Informatyki Systemy sterowane przepływem argumentów

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

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

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Architektura Procesorów Graficznych

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.

Karty graficzne możemy podzielić na:

Obliczenia Wysokiej Wydajności

Sortowanie. Bartman Jacek Algorytmy i struktury

Analiza algorytmów zadania podstawowe

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza i obróbka obrazu

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

Architektura systemów komputerowych Ćwiczenie 3

Obliczenia Wysokiej Wydajności

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

Struktury Danych i Złożoność Obliczeniowa

Grafika komputerowa. Grafika komputerowa. Grafika komputerowa

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

Introduction to Computer Science

Zasady analizy algorytmów

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Złożoność obliczeniowa zadania, zestaw 2

Algorytmy dla maszyny PRAM

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

Nowoczesne technologie przetwarzania informacji

Grafika Komputerowa Materiały Laboratoryjne

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

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Opis efektów kształcenia dla modułu zajęć

Podstawy Informatyki. Sprawność algorytmów

która metoda jest najlepsza

Budowa Mikrokomputera

Sortowanie bąbelkowe

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

Architektura von Neumanna

i3: internet - infrastruktury - innowacje

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy i Struktury Danych

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych

Architektura mikroprocesorów TEO 2009/2010

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

16. Taksonomia Flynn'a.

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

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

Moc płynąca z kart graficznych

Filtrowanie tekstur. Kinga Laurowska

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Sortowanie przez scalanie

Procesory. Schemat budowy procesora

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

Organizacja pamięci w procesorach graficznych

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

BIBLIOTEKA PROGRAMU R - BIOPS. Narzędzia Informatyczne w Badaniach Naukowych Katarzyna Bernat

Bartłomiej Filipek

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

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

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

Algorytmy sortujące i wyszukujące

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

Klasyfikacja systemów komputerowych. Architektura von Neumanna. dr inż. Jarosław Forenc

Implementacje algorytmów oddziałujących cząstek na architekturach masywnie równoległych

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

PROBLEMY NIEROZSTRZYGALNE

Podstawy Informatyki. Metody dostępu do danych

Tadeusz Pankowski

Zadania domowe. Ćwiczenie 2. Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL

Tesla. Architektura Fermi

Transkrypt:

GPGPU General-Purpose computing on the GPU Piotr Stańczyk

GPGPU Brak wzrostu prędkości procesorów w ostatnim okresie Wprowadzanie technologii wielordzeniowej (Hyper Threading, Core Duo ) zrównoleglenie obliczeń sposobem zwiększenia mocy obliczeniowej Karty graficzne mają większą moc obliczeniową niż procesory (50GB / 8.5 GB, 240 / 25 GFLOPS) (NVIDIA GeForce 7900 GTX / dual-core 3.7 GHz Intel Pentium Extreme Edition 965) Coroczny wzrost mocy obliczeniowej kart graficznych kształtuje się na poziomie 1.7 2.3 razy (dla procesorów zwykło być 1.4) Każdy nowo-zakupiony komputer ma szybki GPU

GPGPU Dawniej karty graficzne pozwalały tylko na rysowanie trójkątów (teksturowane etc ) Z czasem wprowadzono możliwość programowalności: vertex-shader fragment-shader geometry-shader

CPU vs GPU CPU: Rozbudowana logika sterowania Optymalizacje wykonywanie kodu w innej kolejności wczesne przewidywanie zachować pętli GPU: Uproszczona logika (ulega zmianie) Obliczenia sekwencyjne w obrębie jednostek (odstępstwa w przypadku odwołań do tekstur - asynchroniczne) Główne problemy wydajnościowe pamięć. Rdzenie procesorów muszą synchronizować pamięć Karty graficzne stosują inne podejście

GPU flow control Predication ewaluowanie wszystkich gałęzi a następnie przypisanie wyniku z odpowiedniej gałęzi SIMD (Single Instruction Multiple Data) wszystkie jednostki wykonują te same instrukcje MIMD (Multi Instruction Multiple Data) jednostki niezależne od siebie (GeForce 6,7, NV-40, G70, Quadro)

CPU vs GPU: pamięć podręczna CPU - pamięć podręczna L1 / L2 rzędu megabajtów, GPU wykorzystywana do samplowania tekstur, wielkość rzędu kilkuset bajtów. CPU -> Read/Write, GPU -> Read Wykorzystanie GPU jest szczególnie efektywne w przypadku obliczeń wektorowych z sekwencyjnym dostępem do pamięci.

Dostęp p do pamięci - GeForce vs P4

GPU ograniczenia Brak prawdziwego stosu / nie można realizować rekurencji Brak zmiennych całkowitoliczbowych / operacji na bitach Brak typów wskaźnikowych Brak możliwości zapisu pamięci pod danym indeksem (adresem) Ciężko zastosować GPU do problemów niezwiązanych z grafiką Wszystko musi znaleźć się najpierw w pamięci GPU (problematyczne przeplatanie obliczeń GPU->CPU- >GPU) Pisząc dowolny algorytm z wykorzystaniem GPU musimy myśleć o nim przez pryzmat rysowania trójkątów

CPU vs GPU organizacja pamięci

CPU vs GPU scatter / gather scatter (rozproszenie) -> odpowiada wykonaniu operacji postaci a[i] = x gather (gromadzenie) -> odpowiada wykonaniu operacji postaci x = a[i] CPU pozwala wykonywać zarówno scatter jak i gather GPU nie wspomaga scatter (ze względu na efektywność / model pamięci podręcznej) gather na GPU można realizować przy użyciu odczytu z tekstury

Scatter -> Gather W wielu przypadkach można zmodyfikować algorytm w celu wyeliminowania scatter

GPU model obliczeń Vertex stream Wypełniany przez CPU (w nowych kartach graficznych też przez GPU) Fragment stream Generowany przez rasterizer, zawiera interpolowane wartości wierzchołków Frame buffer stream Wypełniany przez Fragment Processor, dane trafiają do Frame Buffer a. Nowe karty graficzne wspomagają do 16 buforów wynikowych Texture stream (1D, 2D, 3D, cube maps) Read only, Radom access, dostępne dla Fragment shaderów (i vertex shaderów w nowych kartach)

GPGPU jak używau ywać? Specjalistyczne języki programowania Cg (OpenGL) HLSL (DirectX) OpenGL Shading Language Podobne do C/C++ Ograniczenia wynikające z architektury GPU Udostępniają biblioteki matematyczne (normalizacja wektorów, interpolacje ) Wsparcie dla zmiennych całkowitoliczbowych Brook rozszerzenie ANSI C o obliczenia wektorowe mapowane automatycznie na GPU Ostatnio widziałem pewne moduły dla.net

Poszukiwanie maksimum macierzy log n razy wykonujemy następujące kroki: Umieszczamy macierz w teksturze Rysujemy kwadrat wykorzystując fragment-shader samplujący teksturę w czterech sąsiadujących polach i zwracający jako wynik największy element używamy bufora docelowego jako tekstury dla kolejnego przebiegu Czas działania O(max(log(n), n / p))

Sumy prefiksowe Podejście klasyczne Algorytm działający w czasie O(log(n)) Problem: - i-ta faza algorytmu wykonuje pracę O(n), z czego O(n/2 i ) jest użyteczne - karty graficzne nie posiadają n procesorów dla dowolnego n

Sumy prefiksowe Redukcja Zachowujemy wyniki częściowe Druga faza: Praca całkowita O(n), czas O(n/p)

Wspomaganie teselacji Proces polegający na generowaniu reprezentacji graficznej krzywych zadanych wzorami Wykorzystanie w systemach grafiki wektorowej (PDF, PS, OpenVG) Klasyczne podejście: wyznaczanie kolejnych punktów należących do krzywej, przybliżenie przy użyciu odcinków.

Wspomaganie teselacji Najczęściej stosowanymi krzywymi są łuki eliptyczne oraz krzywe Bezier (2 ego i 3 ego stopnia) Krzywa Bezier 2 stopnia: x(t) = A x (1-t)^2 + B x (1-t)*t + C x *t^2 y(t) = A y (1-t)^2 + B y (1-t)*t + C y *t^2

Wspomaganie teselacji Teselacja krzywej Bezier 2 ego stopnia: Podejście klasyczne (przybliżenie odcinkami) Wykorzystanie tekstury (zakładamy przekształcenia afiniczne krzywych) f(u,v) = u 2 v Podejście wymaga wygenerowania tekstury

Wspomaganie teselacji Podejście z teksturą nie działa dla krzywych 3 ego stopnia Można jednak wykorzystać fragment-combiner do wyliczenia przynależności każdego piksela do krzywej. Więcej informacji: http://research.microsoft.com/~cloop/loopblinn05.pdf

Diagramy Voronoi Dla danego zbioru punktów chcemy wyznaczyć dyskretny diagram Voronoi

Diagramy Voronoi

Diagramy Voronoi Zwiększenie dokładności wykonanie kroku o wielkości 1 dwukrotnie etc

Bump mapping vs. displacement mapping Bump mapping polega na dodaniu do tekstury dodatkowego kanału (wysokości), który pozwala na zwiększenie szczegółowości generowanych obrazów, bez zwiększenia liczby rysowanych trójkątów Problem: generowana geometria cały czas jest płaska

Bump mapping vs. displacement mapping Displacement mapping próba uzyskania realistycznej, trójwymiarowej tekstury (tak jak poprzednio wykorzystując dodatkowy kanał). Pomysł 1 wykorzysać vertex shader Problem, nie jesteśmy w stanie dodawać nowych wierzchołków, dostęp do tekstury jest ograniczony Pomysł 2 zastosować fragment shader Ekeftywny dostęp do tekstury, lecz brak możliwości generowania geometrii poza obszarem renderowanego trójkąta

Displacement mapping

Bump mapping vs. displacement mapping

Kompresja fraktalna Podział obrazu na obszary tej samej wielkości (n x n) Wyznaczenie domen (2n x 2n) Dla każdego obszaru wyznaczenie najbardziej podobnej domeny (downfiltered) z dokładnością do skali i przesunięcia APE100/Quadries SIMD (512 procesorów o mocy 25.6 GFLOPS), rysunek 256x256 w czasie 2 sekund PIV 3.2 GHz -> 280 sekund Geforce 6800 -> 1 sekunda

Sortowanie Brak możliwości wykonywania scatter konieczność korzystania z gather Do sortowania można stosować sieci sortujące Łączenie CPU-GPU daje najszybsze i najtańsze algorytmy do sortowania baz danych

Sortowanie sieci bitoniczne Do sortowania często stosowane są modyfikacje sieci bitonicznych

Sortowanie sieci bitoniczne

Sortowanie sieci bitoniczne Złożoność czasowa sortowania: Bitonic-sorter[n] -> O(log(n)) D(Sorter[n]) = D(Sorter[n/2]) + log(n) => O(log 2 (n)) Plus: teoretycznie możemy sortować dane w czasie O(log 2 (n)) Minus: Sieć składa się z O(n*log 2 (n)), co nie jest optymalne. W praktyce karta graficzna nie ma O(n) procesorów. Plus2: Istnieją sieci o wielkości O(n*log(n)) i głębokości O(log(n)) Minus2: Sieci te są bardzo skomplikowane i niepraktyczne

Sortowanie - modyfikacja Wykorzystując kartę graficzną mamy nieco więcej swobody... Symujacja opisanej sieci sortującej na maszynie 1-procesorowej zajmie O(n*log 2 (n)) Dokonajmy drobnych zmian w algorytmie

Sortowanie - modyfikacja Poniższy Half-cleaner dokonuje zamiany miejscami pierwszych lub ostatnich k elementów czyszczonych połówek. Wartość parametru k można wyznaczyć w czasie log(n) stosując wyszukiwanie binarne (e i i-ty element na wejściu): binarnie poszukujemy pozycji k dla której e k e k +n/2 zmienia znak (e k e k +n/2 ma przeciwny znak od e k +1 e k +n/2+1 Jeśli element e k > e k +n/2 to zamieniamy k = k pierwszych par w.p.p zamieniamy k = n k ostatnich par

Sortowanie - modyfikacje Wyznaczenie zamiany trwa O(log(n)) Zamiana trwa O(k) (pesymistycznie O(n)) Aby to poprawić, reprezentujemy wektor wejściowy w postaci pełnego drzewa binarnego + elementu wolnego e n

Sortowanie - modyfikacje Wyznaczanie wartości k + zamiana wygląda teraz tak: korzeń > element wolny? (a) Zamiana korzenia z elementem wolnym p <= lewy syn korzenia, q <= prawy Dla i = 1.. log(n) 1 p > q? Zamień p z q Jeśli (a) to zamień lewych synów p i q, wpp prawych Zastąp p i q odpowiednimi (lewymi bądź prawymi synami) Czas wykonania fazy half-clean wynosi O(log(n)) Utraciliśmy charakter sieci, redukując liczbę wszystkich operacji do O(n*log(n))

Sortowanie - zrównoleglenie Nasz algorytm wykonuje: log(n) poziomów scalania każdy scalanie składa się log(k) faz półczyszczenia każda faza półczyszczenia zawiera log(m) przejście po drzewie Sumaryczna praca to O(n*log(n)), zatem dla doskonałej maszyny p-procesorowej EREW możemy uzyskać czas O(n*log(n)/p) Dla karty graficznej mamy pewne ograniczenia

Sortowanie - zrównoleglenie Wszystkie procesory w karcie graficznej wykonują ten sam algorytm (z dokładnością do danych) W koszt czasowy wlicza się inicjalizacja strumieni Wszystkich strumieni jest log(n 3 ) Zatem posiadając p = o(n/log 2 (n)) procesorów możemy uzyskać złożoność czasową O(n*log(n) / p) Trzeba jeszcze obejść problemy z sekwencyjnością i brakiem możliwości wykonywania operacji scatter

GPGPU inne zastosowania Grafika, grafika, grafika Setki aplikacji dla obliczeń fizycznych Kompresja obrazu (metody fraktalowe) http://www.gpgpu.org/