Implementacja algorytmów na procesory kart graficznych

Post on 21-Mar-2017

26 views 0 download

Transcript of 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

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