implementacja algorytmów na procesory kart graficznych
TRANSCRIPT
1
Implementacja algorytmów na procesory kart
graficznych
mgr inż. Krzysztof WegnerKatedra Telekomunikacji
Multimedialnej i MikroelektronikiPolitechnika Poznańska
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.
2NVIDIA GeForce GTX 285ATI Radeon 4850
Możliwości GPU Akceleracja 2D
Rysowanie figur Warstwy i kafelki Podwójne buforowanie
Akceleracja 3D Mapowanie wypukłości Efekty cząsteczkowe Pixel Shader Vertex Shader Transform & Lighting HDR
3
Możliwości GPU Filtrowanie anizotropowe Full Scene Anti-Aliasing Obliczanie fizyki gry – NVIDIA PhysX
Bardzo duża moc obliczeniowa
4
Możliwości wykorzystania
W celu renderowania grafiki GPU
W celu obliczeń ogólnego przeznaczenia GPGPU
5
Architektura Karty Graficznej
Potok przetwarzający
Porównanie kart graficznych
AIT Radeon HD 4850
NVIDIA GeForce GTX285
Ilość tranzystorów 965 milionów 1400 milionówTechnologia wykonania 55nm 65nmIlość procesorów strumieniujących 800 240Ilość jednostek teksturujących 40 80Częstotliwość GPU 625 MHz 648 MHzWydajność zmiennoprzecinkowa 1 Tflops 1.063 TflopsWielkość pamięci 512MB GDDR3 1024MB GDDR3Przepustowość pamięci 200 GB/s 155 GB/s
7
Dostępne zasoby Zmienne - Pamięć
Bufor wierzchołków(x y z, nx ny nz, t s, r g b a) 8 x Float32 + 4 x Int32
Bufor tekstury (RGBA) 4 x Float32 4 x Int32
Buffor ramki Jednostki Obliczeniowe
Vertex Sheader Pixel Sheader
8
Filozofia wykorzystania GPU
Zapis danych w teksturze lub układzie wierzchołków (Array to Texture)
Ograniczenie pojedynczej tekstury do rozmiaru 8192x8192 punktów
Ograniczenie do 32 tekstur9
Tablica
Tekstura
Filozofia wykorzystania GPU
Zaprogramowanie 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ń
10
Języki programowania Wszystkie języki oparte o język C OpenGL 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
11
Filozofia wykorzystania GPU
Wykonanie 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
12
Dodawanie 2 wektorówCPU
Umieszczenie danych w 2 tablicach A i B
Programfloat* add(float* A,float* B){ for(coords=0; coords<9<coords+) C[coords] = A[coords]+B[coords]; return C;}
GPU Umieszczanie danych w 2
teksturach A i B
Shadervoid add(void){ coords = gl_TexCoord[0].xy; gl_FragColor.r = rect(A, coords) +
rect(B, coords);}
13
1 2 3 4 5 6 7 8 9A
2 4 6 8 2 4 6 8 2B
1 2 34 5 67 8 9
2 4 68 2 46 8 2
A B
Dodawanie 2 wektorówCPU
Wywołanie obliczeńC=add(A,B);
Czas Obliczeń 9 taktów
GPU Wywołanie obliczeń GL_Draw_Quad(); Read_FrameBuffer(C);
Czas Obliczeń 1 takt
14
1 2 3 4 5 6 7 8 9A
2 4 6 8 2 4 6 8 2B1 2 34 5 67 8 9
2 4 68 2 46 8 2
A B3 6 9 1
2 7 10
13 16
11C
3 6 912 7 10
13 16 11
C
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 Operacje typu output = f(input(i),input(j)) Realizacja na PixelShader
15
Wyznaczanie maksimum Operacja typu Gather –
zbieranie/grupowianie Implementacja na pixel shader Oczywiste podejście
16
2 4 5 49 8 7 32 4 1 06 5 3 8
Tekstura wejściowa
9
Tekstura wyjściowa
Pixel Shader
16 taktów
Nie wszystkiejednostki obliczeniowe
wykorzystane
Wyznaczanie maksimum Podejście zrównoleglone
17
2 4 5 49 8 7 32 4 1 06 5 3 8
Tekstura wejściowa
9 76 8
Tekstura tymczasowa
9
Tekstura wyjściowa
Pixel Shader
4 takty
Pixel Shader
4 takty
8 taktów zamiast 16Przyśpieszenie x2
RóżniceCPU
Struktury Danych Zmienna 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
GPU 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
18
Zalety GPU Wykorzystanie zalet przetwarzania
równoległego Wielokrotne przyśpieszenie obliczeń Możliwość użycia „darmowej” mocy
obliczeniowej komputera
19
Wady GPU Konieczność innego podejścia do typowych
problemów Koniecznoś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ć20
Implementacja na GPU Wyznaczanie mapy głębi
21
Widok 10Tekstura 1
Widok 7Tekstura 2
Koszt dopasowaniaTekstura 3
Monochromatyczna mapa zakodowana w
składowych RGBA kliku punktów tekstury
Pixel ShaderProste odejmowanie
4 punktów
Jeden przebiegJeden render
Implementacja na GPU Miękka segentacja
22
Widok 10Tekstura 1
Miękkie Segmenty widoku 10Tekstura 4
Zapisane jako wektory kolumnowePixel ShaderWyznaczenie
segmentu
danego punktu
Wykonywane w n przebiegach
Każda linie oddzielnie
Implementacja na GPU Pasowanie segmentów i wyznaczanie
głębi
23
Koszt dopasowaniaTekstura 3
Miękkie Segmenty widoku 10Tekstura 4
Miękkie Segmenty widoku 7Tekstura 5
Wstępna mapa głębiTekstura 6
Pixel ShaderWyznaczanie
najlepszego dopasowania
danego punktu
Implementacja na GPU Porównanie szybkości algorytmu na
CPU i GPU
24
ATI NVIDIA CPU20x20 20,436 -------- 193,37930x30 37,628 50,591 383,65440x40 62,073 89,950 693,675
Dziękuje za uwagę Pytania?
25