Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

GPU Michał Drobot Technical Art Director Reality Pump.

Podobne prezentacje


Prezentacja na temat: "GPU Michał Drobot Technical Art Director Reality Pump."— Zapis prezentacji:

1 GPU Michał Drobot Technical Art Director Reality Pump

2 GPU PipelineGPU Pipeline Architektura współczesnego GPUArchitektura współczesnego GPU SIMD – konsekwencjeSIMD – konsekwencje StrukturaStruktura Obsługa GPU w oparciu o SM 3.0Obsługa GPU w oparciu o SM 3.0 Praktyki programistycznePraktyki programistyczne Podstawy prawidłowego kodowania w oparciu o znajomość architektury i sprzętuPodstawy prawidłowego kodowania w oparciu o znajomość architektury i sprzętu Plan wykładu

3 Vertex Shader – programowalnyVertex Shader – programowalny Geometry Shader – programowalnyGeometry Shader – programowalny Clipping – konfigurowalnyClipping – konfigurowalny Screen Mapping – fixedScreen Mapping – fixed Triangle Setup – fixedTriangle Setup – fixed Triangle Traversal – fixedTriangle Traversal – fixed Pixel Shader – programowalnyPixel Shader – programowalny Merger - konfigurowalnyMerger - konfigurowalny GPU Pipeline

4 Vertex ShaderVertex Shader Implementuje funkcjonalnośćImplementuje funkcjonalność Model View TransformModel View Transform Vertex ShadingVertex Shading ProjectionProjection Geometry ShaderGeometry Shader Opcjonalny etapOpcjonalny etap Operuje na prymitywachOperuje na prymitywach Create / DestroyCreate / Destroy Per primitive shadingPer primitive shading GPU Pipeline

5 Pixel ShaderPixel Shader Implementuje pixel shadingImplementuje pixel shading Potężne narzędziePotężne narzędzie MergerMerger KonfigurowalnyKonfigurowalny ParametrycznyParametryczny Umożliwia wykonanie wielu wcześniej niewykonalnych operacjiUmożliwia wykonanie wielu wcześniej niewykonalnych operacji Implementuj operacje merginguImplementuj operacje mergingu GPU Pipeline

6 GPU Pipeline ewoluował z czysto stałego (hard coded) do w pełni programowalnegoGPU Pipeline ewoluował z czysto stałego (hard coded) do w pełni programowalnego Największą zmianą było wprowadzenie programowalnych etapówNajwiększą zmianą było wprowadzenie programowalnych etapów GPU Pipeline

7 Pipeline

8 Pipeline Dx 10 / OGl 3.0

9 Architektura GPU GPU – Graphic Processing UnitGPU – Graphic Processing Unit Równoległa architektura SIMDRównoległa architektura SIMD Komputer wektorowy (4 skalarne wektory)Komputer wektorowy (4 skalarne wektory) 4-way SIMD4-way SIMD GPU vs Multicore CPUGPU vs Multicore CPU GPU – olbrzymia ilość lekkich wątków, szybkie przez równoległość, powolne pojedynczoGPU – olbrzymia ilość lekkich wątków, szybkie przez równoległość, powolne pojedynczo CPU – mała liczba ciężkich wątków, szybkie pojedynczoCPU – mała liczba ciężkich wątków, szybkie pojedynczo GPU dobre w rozwiązywaniu problemów równoległych, strumieniowych pamięciowo, ciężkich arytmetycznieGPU dobre w rozwiązywaniu problemów równoległych, strumieniowych pamięciowo, ciężkich arytmetycznie

10 Architektura GPU Każdy rejestr zawiera 4 niezależne wartościKażdy rejestr zawiera 4 niezależne wartości 32-bitowe skalary float32-bitowe skalary float 32-bitowe skalary int (od SM 4.0)32-bitowe skalary int (od SM 4.0) Struktury agregacyjneStruktury agregacyjne ArrayArray MatrixMatrix StructStruct Wektory obsługująWektory obsługują MaskowanieMaskowanie SwizzlingSwizzling ReplikacjeReplikacje

11 Architektura GPU Wektory zawierają daneWektory zawierają dane Pozycji (xyzw)Pozycji (xyzw) Normalnych, macierzy, koloru (rgba)Normalnych, macierzy, koloru (rgba) Koordynatów tekstur (Koordynatów tekstur (

12 Architektura GPU Wykonuje operacje wektorowe / skalarneWykonuje operacje wektorowe / skalarne Add, mul, muladdAdd, mul, muladd NajszybszeNajszybsze Square root, reciprocal, sin, cos, exp, logSquare root, reciprocal, sin, cos, exp, log Stosunkowo wolneStosunkowo wolne texFetchtexFetch Szybkie, lecz ograniczone wydajnością poprzez oczekiwanie na dostęp do texturySzybkie, lecz ograniczone wydajnością poprzez oczekiwanie na dostęp do textury IntrinsicIntrinsic Dot(), log(), atan()Dot(), log(), atan() Zoptymalizowane makraZoptymalizowane makra

13 Architektura GPU Podstawowe jednostki sprzętowePodstawowe jednostki sprzętowe ALUALU Texture SamplersTexture Samplers Jednostki wykonawcze wątkówJednostki wykonawcze wątków Vertex Processing UnitVertex Processing Unit Pixel Processing UnitPixel Processing Unit Unified Thread ProcessorUnified Thread Processor Pamięć DRAMPamięć DRAM

14 Architektura GPU Obiekty w pamieciObiekty w pamieci Buffered ObjectsBuffered Objects Uniform Registers/State TableUniform Registers/State Table Interpolated RegistersInterpolated Registers Temporary RegistersTemporary Registers TexturesTextures

15 Architektura GPU Buffered ObjectsBuffered Objects Strumienie danych generowane przez CPUStrumienie danych generowane przez CPU Ograniczona modyfikowalnośćOgraniczona modyfikowalność PrzykładPrzykład dane Vertexów obiektudane Vertexów obiektu

16 Architektura GPU Uniform Registers/State TableUniform Registers/State Table Stałe podczas działania potokuStałe podczas działania potoku Przekazywane per Draw CallPrzekazywane per Draw Call rejestry dowolnego przeznaczenia (16 INT, 224 Float)rejestry dowolnego przeznaczenia (16 INT, 224 Float) Rejestry Tablic StanuRejestry Tablic Stanu MacierzeMacierze ŚwiatłaŚwiatła Itp….Itp….

17 Architektura GPU Interpolated RegistersInterpolated Registers Dane zmienne dla każdego pixelaDane zmienne dla każdego pixela Posiadają dane interpolowane wzdłuż poligonuPosiadają dane interpolowane wzdłuż poligonu 10 interpolatorów dowolnego przeznaczenia10 interpolatorów dowolnego przeznaczenia

18 Architektura GPU Temporary RegistersTemporary Registers Typowa reprezentacja rejestrówTypowa reprezentacja rejestrów Tymczasowe rejestry obliczeń chwilowychTymczasowe rejestry obliczeń chwilowych

19 Architektura GPU TexturesTextures Pojęciowo bliskie tablicom typu RAMPojęciowo bliskie tablicom typu RAM Nie można naraz czytać/pisaćNie można naraz czytać/pisać Kosztowne w dostępieKosztowne w dostępie Wykorzystują samplery hardwareoweWykorzystują samplery hardwareowe Wyjątkowo kosztowne odczyty zależneWyjątkowo kosztowne odczyty zależne

20 Pipeline 6th generation GPU

21 Pipeline 8th generation GPU

22 Pipeline - Shaders ShadersShaders Operacje na:Operacje na: MacierzachMacierzach WektorachWektorach Tablice stałeTablice stałe Podział danych:Podział danych: Per-instance – np.. Per-vertex positionPer-instance – np.. Per-vertex position Per-pixel interpolated – np.. Koordynaty UVPer-pixel interpolated – np.. Koordynaty UV Per-batch – np…dane zewnętrzne dt. światłaPer-batch – np…dane zewnętrzne dt. światła

23 Pipeline – Shaders (VS 3.0) Input:Input: Vertex posVertex pos Tex coordTex coord ConstantConstant Dodatkowe kanały : fog, color itp..Dodatkowe kanały : fog, color itp.. Output – wyjście przekazuje do pixel shaderOutput – wyjście przekazuje do pixel shader Vertex shader działa raz per vertexVertex shader działa raz per vertex

24 Pipeline – Shaders (VS 3.0) v0 Vertex Shader v1v2 v15 r0r1r2 r31 c0c1c2 cN aLa0 Vertex Stream – 16 rejestrów 32 rejestry tymczasowe >256F & 16int - const Rejestr Pętli Rejestr Adresu oPos oTn oPts position Tex coord 12 Rejestrów wyjścia

25 Pipeline – Shaders (PS 3.0) Ustala wyjściowy kolor pixelaUstala wyjściowy kolor pixela SamplowanieSamplowanie Operacje na pixelachOperacje na pixelach InputInput Interpolowane wyjście z VSInterpolowane wyjście z VS Podstawowe rejestry z VS : vertex: pos, normal, tex coors, etc.Podstawowe rejestry z VS : vertex: pos, normal, tex coors, etc. Rejestry dowolnego przeznaczeniaRejestry dowolnego przeznaczenia OutputOutput Wektor R/G/B/A koloruWektor R/G/B/A koloru Depth – głębia wg ustaleń Render StateDepth – głębia wg ustaleń Render State Pixel shader uruchamiany raz dla każdego pixelaPixel shader uruchamiany raz dla każdego pixela

26 Pipeline – Shaders (PS 3.0) v0 Pixel Shader v1v2 v9 r0r1r2 r31 c0c1c2 cN aLa0 Pixel Stream – 10 rejestrów 32 rejestry tymczasowe >256F & 16int - const oC0 oDepth Wyjście dla 4 kanałów oC1 oC2 oC3 s0s1s2 s15 16 Rejestrów Samplerów

27 Pipeline DX 10 DX 10 virtual shader machine specificationDX 10 virtual shader machine specification Varying Input RegistersVarying Input Registers 16/16/32 registers16/16/32 registers Constant RegistersConstant Registers 16 buforów 4096 rejestrów16 buforów 4096 rejestrów Temporary RegistersTemporary Registers 4096 rejestrów4096 rejestrów TexturesTextures 128 tablic 512 textur128 tablic 512 textur Output RegistersOutput Registers 16/32/8 registers16/32/8 registers

28 Pipeline DX 10 Geometry ShaderGeometry Shader Opcjonalny etapOpcjonalny etap Operuje na prymitywachOperuje na prymitywach Umożliwia dodawanie, bądź usuwanie elementów prymitywuUmożliwia dodawanie, bądź usuwanie elementów prymitywu Umożliwia między innymiUmożliwia między innymi TessalacjeTessalacje Techniki finówTechniki finów Zaawansowane operacje na cząsteczkachZaawansowane operacje na cząsteczkach

29 Pipeline DX 10 Stream OutputStream Output Umożliwia wysłanie danych obrobionych vertexów do indexowanej tablicy a następnie jej powrót do pipelineuUmożliwia wysłanie danych obrobionych vertexów do indexowanej tablicy a następnie jej powrót do pipelineu Możliwe wyłączenie rasteryzacjiMożliwe wyłączenie rasteryzacji Przydatne w iteracyjnych procesach obliczeniowychPrzydatne w iteracyjnych procesach obliczeniowych Np.. Systemów cząsteczkowychNp.. Systemów cząsteczkowych

30 Pipeline Dodatkowe elementy potokuDodatkowe elementy potoku Vertex cacheVertex cache Texture cacheTexture cache Z-bufferZ-buffer Early-ZEarly-Z StencilStencil Branch processor – >= SM 3.0Branch processor – >= SM 3.0

31 Pipeline Vertex cacheVertex cache Cache pamięci na vertexyCache pamięci na vertexy Przeważnie liniowy długości 256 bitsPrzeważnie liniowy długości 256 bits Dostępny globalnie dla wszystkich vertex fetchyDostępny globalnie dla wszystkich vertex fetchy

32 Pipeline Texture cacheTexture cache Liniowy o niewielkiej długości (32K dla X360)Liniowy o niewielkiej długości (32K dla X360) Współdzielony / segmentowany między wszystkie sampleryWspółdzielony / segmentowany między wszystkie samplery Multitexturing niszczy cacheMultitexturing niszczy cache Naraz odczytuje jedynie pojedynczy sektor w pobliżu aktualnej operacjiNaraz odczytuje jedynie pojedynczy sektor w pobliżu aktualnej operacji Odczyty zależne niszczą cacheOdczyty zależne niszczą cache Przechowuje dane w liniach o określonej długościPrzechowuje dane w liniach o określonej długości Segmentuje tablice na małe bloki używane przy cacheowaniuSegmentuje tablice na małe bloki używane przy cacheowaniu

33 Pipeline Texture cacheTexture cache Cache TrashingCache Trashing MultitexturingMultitexturing Volume texture (skomplikowane obliczanie adresowań)Volume texture (skomplikowane obliczanie adresowań) Dependant readsDependant reads Odczyt z jednej textury decyduje o dalszym meijscu odczytuOdczyt z jednej textury decyduje o dalszym meijscu odczytu Nieprzewidywalne miejsca samplowańNieprzewidywalne miejsca samplowań

34 Pipeline Texture samplingTexture sampling Obliczenie miejsca pobrania z textury (adresowanie)Obliczenie miejsca pobrania z textury (adresowanie) Odczytanie sampli z caheuOdczytanie sampli z caheu Filtrowanie sampliFiltrowanie sampli AnizoAnizo Blinn / PointBlinn / Point MipMip

35 Pipeline Z-bufferZ-buffer Dodatkowy bufor karty graficznej przechowujący głębie każdego pixelaDodatkowy bufor karty graficznej przechowujący głębie każdego pixela Używany w rozwiązywaniu problemu widoczności pixela przy zapisywaniu do bufora ramkiUżywany w rozwiązywaniu problemu widoczności pixela przy zapisywaniu do bufora ramki Algorytm malarzaAlgorytm malarza Aktualna głębia pixela jest sprawdzana z głebią zapisana w Z-buforze, jeśli jest większa pixel nie jest rysowanyAktualna głębia pixela jest sprawdzana z głebią zapisana w Z-buforze, jeśli jest większa pixel nie jest rysowany Obecnie 24b lub 32b o skali logObecnie 24b lub 32b o skali log Problematyka artefaktówProblematyka artefaktów Z-FightingZ-Fighting Obsługa parametryczna, sprzętowa, nie programowalnaObsługa parametryczna, sprzętowa, nie programowalna

36 Pipeline Z-bufferZ-buffer Early-ZEarly-Z Naturalne rozwinięcie Z-buforaNaturalne rozwinięcie Z-bufora Podczas budowania Z, dokonuje testuPodczas budowania Z, dokonuje testu Odpalany przed wykonaniem RasteryzacjiOdpalany przed wykonaniem Rasteryzacji Posiada wartość Z pixela z Vertex ShaderaPosiada wartość Z pixela z Vertex Shadera Może być wykorzystywany jako świadoma optymalizacjaMoże być wykorzystywany jako świadoma optymalizacja Depth pre-passDepth pre-pass Front – to – Back sortingFront – to – Back sorting Obsługa parametryczna, sprzętowa, nie programowalnaObsługa parametryczna, sprzętowa, nie programowalna

37 Pipeline Z-bufferZ-buffer Hi-ZHi-Z Hierarchiczny Z-buforHierarchiczny Z-bufor Z – bufor traktowany jako piramidalna struktura – podobieństwo do mip-map / drzew czwórkowych o różnych gęstościachZ – bufor traktowany jako piramidalna struktura – podobieństwo do mip-map / drzew czwórkowych o różnych gęstościach Umożliwia odrzucanie całych grup pixeliUmożliwia odrzucanie całych grup pixeli

38 Pipeline Z-bufferZ-buffer TrashingTrashing oDepth – pisanie do bufora Z wyłącza optymalizacje (powoduje dekompresje Z, oraz uniemożliwia Hi-Z)oDepth – pisanie do bufora Z wyłącza optymalizacje (powoduje dekompresje Z, oraz uniemożliwia Hi-Z) texKill – używanie instrukcji zabijającej wykonanie pixela powoduje wymuszenie obliczeń Z dla danego quada (brak możliwości odrzucenia)texKill – używanie instrukcji zabijającej wykonanie pixela powoduje wymuszenie obliczeń Z dla danego quada (brak możliwości odrzucenia)

39 Pipeline StencilStencil Dodatkowy bufor używany wraz z buforem ZDodatkowy bufor używany wraz z buforem Z Służy dodatkowych testom odrzucania pixeliSłuży dodatkowych testom odrzucania pixeli Można do niego pisać i wykorzystywać przy optymalizacjiMożna do niego pisać i wykorzystywać przy optymalizacji Obsługa parametryczna, sprzętowa, nie programowalnaObsługa parametryczna, sprzętowa, nie programowalna

40 Pipeline Render stateRender state Stany sprzętowe GPUStany sprzętowe GPU Z-testZ-test StencilStencil CullingCulling BlendingBlending Parametryzują wewnętrzne sprzętowe systemy optymalizacjiParametryzują wewnętrzne sprzętowe systemy optymalizacji

41 Pipeline Flow controlFlow control Wykorzystanie IF..Else (loop)Wykorzystanie IF..Else (loop) Static flow controlStatic flow control Bazuje jedynie na stałychBazuje jedynie na stałych Na podstawie stałej decyduje o wyborze ścieżki wykonawczejNa podstawie stałej decyduje o wyborze ścieżki wykonawczej Dynamic flow controlDynamic flow control Bazuje na zmiennych dynamicznychBazuje na zmiennych dynamicznych Na ich podstawie dokonuje wyboru ścieżkiNa ich podstawie dokonuje wyboru ścieżki Utrudnia operacje adresowania, liczenia gradientów itp..Utrudnia operacje adresowania, liczenia gradientów itp.. Ręczne liczenie adresowania dla texturRęczne liczenie adresowania dla textur

42 Pipeline Flow controlFlow control Kompilator na podstawie heurystyk (ilośc instrukcji, typ, odwołania…) może zdecydować o statycznym rozwiązaniu (unroll, wykonanie obu gałęzi IF i wybranie logiczne wyniku) bądź dynamicznym (loop, branch)Kompilator na podstawie heurystyk (ilośc instrukcji, typ, odwołania…) może zdecydować o statycznym rozwiązaniu (unroll, wykonanie obu gałęzi IF i wybranie logiczne wyniku) bądź dynamicznym (loop, branch) Możemy to wymuszać dyrektywami jeśli wiemy co robimyMożemy to wymuszać dyrektywami jeśli wiemy co robimy [branch] [flatten] [loop] [unroll] etc…[branch] [flatten] [loop] [unroll] etc…

43 Pipeline Branch processor (>= SM 3.0)Branch processor (>= SM 3.0) Umożliwia wprowadzenie architektury MIMDUmożliwia wprowadzenie architektury MIMD Operacje na fragmentach są przeprowadzane w bloczkach (np. 32x32, 8x8, 2x2)Operacje na fragmentach są przeprowadzane w bloczkach (np. 32x32, 8x8, 2x2) Każdy z bloczków za pomocą Branch processora i tzw. Flow control może wykonać odmienną ścieżkę wykonawcząKażdy z bloczków za pomocą Branch processora i tzw. Flow control może wykonać odmienną ścieżkę wykonawczą Jeśli którykolwiek texel z bloczku musi wybrać odmienną drogę od innych,obliczenia są wykonywane dla wszystkich texeli i wszystkich drógJeśli którykolwiek texel z bloczku musi wybrać odmienną drogę od innych,obliczenia są wykonywane dla wszystkich texeli i wszystkich dróg Wprowadza fizyczną obsługę dynamicznych if, else, for, while itp.Wprowadza fizyczną obsługę dynamicznych if, else, for, while itp. Narzut obliczeniowy < 6 cykliNarzut obliczeniowy < 6 cykli

44 Pipeline Scan converter dzieli trójkąt na bloki 8x8Scan converter dzieli trójkąt na bloki 8x8 Każdy blok jest dzielony dalej na quady 2x2Każdy blok jest dzielony dalej na quady 2x2 Mogą wśród nich wystąpić martwe pixeleMogą wśród nich wystąpić martwe pixele Sprawa komplikuje się przy wykorzystaniu flow controlSprawa komplikuje się przy wykorzystaniu flow control W jednym bloku mogą być pixele wymagające odmiennych ścieżek wykonawczych == wykonanie wszystkich ścieżek i wybór logiczny rezultatuW jednym bloku mogą być pixele wymagające odmiennych ścieżek wykonawczych == wykonanie wszystkich ścieżek i wybór logiczny rezultatu

45 Pipeline Wybór ścieżki powinien być względnie oczywisty dla GPUWybór ścieżki powinien być względnie oczywisty dla GPU Quady 2x2 zawierające różne ścieżki wykonawcze zostaną wykonane w całości i wybrany właściwy logicznie wynikQuady 2x2 zawierające różne ścieżki wykonawcze zostaną wykonane w całości i wybrany właściwy logicznie wynik Dążymy do lokalizacji wykonań koduDążymy do lokalizacji wykonań kodu

46 Języki GLSLGLSL HLSLHLSL CGCG Wszystkie są podobne składniowoWszystkie są podobne składniowo Różnice występują jedynie na poziomie składniowym kilku funkcjiRóżnice występują jedynie na poziomie składniowym kilku funkcji Np.. Lerp (HLSL) = mix(GLSL), float4 = vec4 etc.Np.. Lerp (HLSL) = mix(GLSL), float4 = vec4 etc. HLSL > CG > GLSLHLSL > CG > GLSL

47 Języki Języki przygotowane do obliczeń wektorowychJęzyki przygotowane do obliczeń wektorowych Podstawowe typyPodstawowe typy FloatFloat Float2, float3, float4 / vec2, vec3, vec4Float2, float3, float4 / vec2, vec3, vec4 Float4x4 / mat4Float4x4 / mat4 Operacje wektorowe ALUOperacje wektorowe ALU DotDot MulMul NormalizeNormalize Lerp / mixLerp / mix ClampClamp

48 Języki Obsługa samplerówObsługa samplerów tex2D / texture2Dtex2D / texture2D texCube / textureCubetexCube / textureCube tex3D / texture3Dtex3D / texture3D FiltrowanieFiltrowanie POINTPOINT LINEARLINEAR ANIZOANIZO Etc.Etc.

49 Języki Dyrektywy kompilatoraDyrektywy kompilatora AsmAsm SM 1.0 – 3.0SM 1.0 – 3.0 SM 4.0 – możliwość jedynie podglądu kodu asmSM 4.0 – możliwość jedynie podglądu kodu asm X360 – specjalne dyrektywy mikrokoduX360 – specjalne dyrektywy mikrokodu Flow controlFlow control [loop][loop] [flatten][flatten] [branch][branch] Etc.Etc.

50 Podsumowanie For more information contact me hello@drobot.org Slides will be available at Drobot.org

51 Questions ?


Pobierz ppt "GPU Michał Drobot Technical Art Director Reality Pump."

Podobne prezentacje


Reklamy Google