25
1 Implementacja algorytmów na procesory kart graficznych mgr inż. Krzysztof Wegner Katedra Telekomunikacji Multimedialnej i Mikroelektroniki Politechnika Poznańska

Implementacja algorytmów na procesory kart graficznych

Embed Size (px)

Citation preview

Page 1: Implementacja algorytmów na procesory kart graficznych

1

Implementacja algorytmów na procesory kart

graficznych

mgr inż. Krzysztof WegnerKatedra Telekomunikacji

Multimedialnej i MikroelektronikiPolitechnika Poznańska

Page 2: Implementacja algorytmów na procesory kart graficznych

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

Page 3: Implementacja algorytmów na procesory kart graficznych

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

Page 4: Implementacja algorytmów na procesory kart graficznych

Możliwości GPU Filtrowanie anizotropowe Full Scene Anti-Aliasing Obliczanie fizyki gry – NVIDIA PhysX

Bardzo duża moc obliczeniowa

4

Page 5: Implementacja algorytmów na procesory kart graficznych

Możliwości wykorzystania

W celu renderowania grafiki GPU

W celu obliczeń ogólnego przeznaczenia GPGPU

5

Page 6: Implementacja algorytmów na procesory kart graficznych

Architektura Karty Graficznej

Potok przetwarzający

Page 7: Implementacja algorytmów na procesory kart graficznych

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

Page 8: Implementacja algorytmów na procesory kart graficznych

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

Page 9: Implementacja algorytmów na procesory kart graficznych

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

Page 10: Implementacja algorytmów na procesory kart graficznych

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

Page 11: Implementacja algorytmów na procesory kart graficznych

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

Page 12: Implementacja algorytmów na procesory kart graficznych

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

Page 13: Implementacja algorytmów na procesory kart graficznych

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

Page 14: Implementacja algorytmów na procesory kart graficznych

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

Page 15: Implementacja algorytmów na procesory kart graficznych

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

Page 16: Implementacja algorytmów na procesory kart graficznych

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

Page 17: Implementacja algorytmów na procesory kart graficznych

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

Page 18: Implementacja algorytmów na procesory kart graficznych

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

Page 19: Implementacja algorytmów na procesory kart graficznych

Zalety GPU Wykorzystanie zalet przetwarzania

równoległego Wielokrotne przyśpieszenie obliczeń Możliwość użycia „darmowej” mocy

obliczeniowej komputera

19

Page 20: Implementacja algorytmów na procesory kart graficznych

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

Page 21: Implementacja algorytmów na procesory kart graficznych

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

Page 22: Implementacja algorytmów na procesory kart graficznych

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

Page 23: Implementacja algorytmów na procesory kart graficznych

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

Page 24: Implementacja algorytmów na procesory kart graficznych

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

Page 25: Implementacja algorytmów na procesory kart graficznych

Dziękuje za uwagę Pytania?

25