Implementacja algorytmów na procesory kart graficznych

1 Implementacja algorytmów na procesory kart graficznychm...
Author: Krysia Lubczyński
0 downloads 1 Views

1 Implementacja algorytmów na procesory kart graficznychmgr inż. Krzysztof Wegner Katedra Telekomunikacji Multimedialnej i Mikroelektroniki Politechnika Poznańska Seminarium „Przetwarzanie obrazów i multimedia”, kwiecień 2009

2 Karta Graficzna GPU Podstawowym zadaniem karty graficznej jest przechowywanie informacji o tym jak powinien wyglądać obraz na ekranie monitora i odpowiednim sterowaniu monitorem. Nowoczesne procesory graficzne udostępniają wiele funkcji ułatwiających i przyśpieszających tworzenie obrazu. ATI Radeon 4850 NVIDIA GeForce GTX 285

3 Możliwości GPU Akceleracja 2D Rysowanie figur Warstwy i kafelkiPodwójne buforowanie Akceleracja 3D Mapowanie wypukłości Efekty cząsteczkowe Pixel Shader Vertex Shader Transform & Lighting HDR

4 Bardzo duża moc obliczeniowaMożliwości GPU Filtrowanie anizotropowe Full Scene Anti-Aliasing Obliczanie fizyki gry – NVIDIA PhysX Bardzo duża moc obliczeniowa

5 Możliwości wykorzystaniaW celu renderowania grafiki GPU W celu obliczeń ogólnego przeznaczenia GPGPU Zastosowanie jednostek obiczeniowych

6 Architektura Karty GraficznejPotok przetwarzający

7 Porównanie kart graficznychAIT Radeon HD 4850 NVIDIA GeForce GTX285 Ilość tranzystorów 965 milionów 1400 milionów Technologia wykonania 55nm 65nm Ilość procesorów strumieniujących 800 240 Ilość jednostek teksturujących 40 80 Częstotliwość GPU 625 MHz 648 MHz Wydajność zmiennoprzecinkowa 1 Tflops 1.063 Tflops Wielkość pamięci 512MB GDDR3 1024MB GDDR3 Przepustowość pamięci 200 GB/s 155 GB/s

8 Dostępne zasoby Zmienne - Pamięć Jednostki ObliczenioweBufor wierzchołków(x y z, nx ny nz, t s, r g b a) 8 x Float x Int32 Bufor tekstury (RGBA) 4 x Float32 4 x Int32 Buffor ramki Jednostki Obliczeniowe Vertex Sheader Pixel Sheader

9 Filozofia wykorzystania GPUZapis danych w teksturze lub układzie wierzchołków (Array to Texture) Ograniczenie pojedynczej tekstury do rozmiaru 8192x8192 punktów Ograniczenie do 32 tekstur Tablica Tekstura

10 Filozofia wykorzystania GPUZaprogramowanie jednostek Pixel Shader i Vertex Shader Shader Model 4.0 Do 4096 instrukcji Do 4096 zmiennych lokalnych Wykorzystanie języków wysokiego poziomu Równoległość wykonywania obliczeń

11 Języki programowania Wszystkie języki oparte o język COpenGL Shader Language GLSL Stworzony przez OpenGL ARB Część API OpenGL 2.0 High Level Shader Language HLSL Stworzony przez Microsoft Część API DirectX C for Graphics Stworzony przez NVIDIE razem z Microsoft’em

12 Filozofia wykorzystania GPUWykonanie obliczeń następuje podczas renderowania obrazu Na ekranie rysuje się wielki prostokąt pokrywający obszar docelowej tablicy co inicjuje obliczenia Odczytuje się bufor ramki zawierający wynik obliczeń zaszyty w wyrenderowanym obrazie

13 Dodawanie 2 wektorów CPU GPU Umieszczenie danych w 2 tablicach A i BProgram float* add(float* A,float* B) { for(coords=0; coords<9 C[coords] = A[coords]+B[coords]; return C; } Umieszczanie danych w 2 teksturach A i B Shader void add(void) { coords = gl_TexCoord[0].xy; gl_FragColor.r = rect(A, coords) rect(B, coords); } A 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 2 4 6 8 B 2 4 6 8 A B

14 Dodawanie 2 wektorów CPU GPU Wywołanie obliczeń Czas ObliczeńC=add(A,B); Czas Obliczeń 9 taktów Wywołanie obliczeń GL_Draw_Quad(); Read_FrameBuffer(C); Czas Obliczeń 1 takt A 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 2 4 6 8 B 2 4 6 8 C 3 6 9 12 7 10 13 16 11 A B 3 6 9 12 7 10 13 16 11 C

15 Podstawowe operacje Każdy algorytm można rozbić na następujące operacje Scater – Rozpraszanie Operacje typu output[j] = f(input); Realizacja na VertexShader Gather – Zbieranie/grupowianie output = f(input(i),input(j)) Realizacja na PixelShader

16 jednostki obliczenioweWyznaczanie maksimum Operacja typu Gather – zbieranie/grupowianie Implementacja na pixel shader Oczywiste podejście Pixel Shader 16 taktów 2 4 5 9 8 7 3 1 6 9 Tekstura wejściowa Tekstura wyjściowa Nie wszystkie jednostki obliczeniowe wykorzystane

17 Wyznaczanie maksimum 8 taktów zamiast 16 Przyśpieszenie x2Podejście zrównoleglone Pixel Shader 4 takty Pixel Shader 4 takty 2 4 5 9 8 7 3 1 6 9 7 6 8 9 Tekstura wejściowa Tekstura tymczasowa Tekstura wyjściowa 8 taktów zamiast 16 Przyśpieszenie x2

18 Różnice CPU GPU Struktury Danych Funkcje Sekwencyjne wykonanieZmienna globalna/lokalna Tablica Z tablicy można czytać i pisać do niej jednocześnie A[i] = A[i]+B[i] Funkcje Dozwolone wywołanie funkcji Dozwolone skoki warunkowe Wskaźniki Sekwencyjne wykonanie Struktury Danych Tylko zmienna lokalna Tekstura / Bufor Wierzchołków Z tekstury można tylko czytać lub tylko do niej pisać A[i] = A’[i]+B[i] Vertex/Pixel Shader Dozwolone wywołanie funkcji Brak skoków warunkowych Brak wskaźników Równoległe wykonanie

19 Zalety GPU Wykorzystanie zalet przetwarzania równoległegoWielokrotne przyśpieszenie obliczeń Możliwość użycia „darmowej” mocy obliczeniowej komputera

20 Wady GPU Konieczność innego podejścia do typowych problemówKonieczności pisania programów w innym języku Brak elastyczności struktury karty graficznej Stały schemat przepływu danych Problem z załadowaniem danych do tekstury Nie wszystkie algorytmy da się zrównoleglić

21 Proste odejmowanie 4 punktówImplementacja na GPU Wyznaczanie mapy głębi Pixel Shader Proste odejmowanie 4 punktów Widok 7 Tekstura 2 Widok 10 Tekstura 1 Monochromatyczna mapa zakodowana w składowych RGBA kliku punktów tekstury Jeden przebieg Jeden render Koszt dopasowania Tekstura 3

22 Implementacja na GPU Miękka segentacja Pixel ShaderWyznaczenie segmentu danego punktu Zapisane jako wektory kolumnowe Miękkie Segmenty widoku 10 Tekstura 4 Widok 10 Tekstura 1 Wykonywane w n przebiegach Każda linie oddzielnie

23 Implementacja na GPU Pasowanie segmentów i wyznaczanie głębiPixel Shader Wyznaczanie najlepszego dopasowania danego punktu Koszt dopasowania Tekstura 3 Miękkie Segmenty widoku 10 Tekstura 4 Wstępna mapa głębi Tekstura 6 Miękkie Segmenty widoku 7 Tekstura 5

24 Implementacja na GPU Porównanie szybkości algorytmu na CPU i GPU ATINVIDIA CPU 20x20 20,436 193,379 30x30 37,628 50,591 383,654 40x40 62,073 89,950 693,675

25 Dziękuje za uwagę Pytania?