Szécsi László 3D Grafikus Rendszerek 15. előadás

Slides:



Advertisements
Hasonló előadás
CUDA C/C++ programozás
Advertisements

ECM/DMS A GYAKORLATBAN E-SZÁMLA KIBOCSÁTÁS ÉS BEFOGADÁS E-SZÁMLA KIBOCSÁTÁS ÉS BEFOGADÁS
Tolerancia Erősítő Innovatív Szövetség projektprogram.
Manhertz Gábor; Raj Levente Tanársegéd; Tanszéki mérnök Budapesti Műszaki és Gazdaságtudományi Egyetem Mechatronika, Optika és Gépészeti Informatika Tanszék.
Nem csak szövegszerkeszt ő virtuózoknak Az Open Office.org 2.0 béta verzió Bándliné Utasi Mária Writer.
Microsoft Photo Story. Mi is ez?  A Microsoft Photo Story egy alkalmazás, amelyet a Microsoft, a világ egyik legnagyobb szoftvergyártó cége készített.
GPU párhuzamosítási lehetőségek az agyi aktivitás forráslokalizáció probléma megoldásában Juhász Zoltán Pannon Egyetem, Veszprém
Alaplap.
MÁV-START Zrt. Budapest, december
Előadó: Kajdocsi László
GPGPU – CUDA 1..
Számítógépes szimuláció
Az „első lépés” TÁMOP
Gyűjtőköri szabályzat
Sínrendszerek Rontó Péter.
Programstruktúrák.
Általános célú számítások a GPU-n
Scilab programozás alapjai
Diszkusszió – Bíró Anikó
Észlelés és egyéni döntéshozatal, tanulás
Monte Carlo módszerek.
Algoritmusok és Adatszerkezetek I.
Nagyméretű kópiaszám változás (CNV) detekciója teljes genom asszociációs vizsgálatokban Az ábrán egy kromoszómán (alsó sáv) mért intenzitások aránya (B.
Algoritmusok és Adatszerkezetek I.
Szervezetfejlesztés II. előadás
Newcomb-paradoxon Előttünk van két doboz, A és B. Ezekbe egy nagyon megbízható jövendőmondó helyezett el pénzt, amihez úgy juthatunk, ha mind a két dobozt.
AZ ESZTÉTIKAI TÉNYEZŐ FORMA, REND, KÁOSZ Kovács Éva.
Lineáris egyenletrendszerek megoldása
A Jobbik esélyei listán és egyéniben
2. Bevezetés A programozásba
Meghatározása, formái, mikéntje és „forrásai”
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
A számítógép operációs rendszere
Adatszerkezetek.
Számítógépek felépítése 6. előadás virtuális tárkezelés
Fazekas Ágnes – Halász Gábor-Horváth László
Minkó Mihály STARSCHEMA BI Csoportvezető Oktató Evangelista.
Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor
A Hálózat és Az internet
A számítógép felépítése
TÁMOP A pályaorientáció rendszerének tartalmi és módszertani fejlesztése – Életpálya-tanácsadás Csanádi Nikolett Hényel Anett.
OpenGL V.
IDŐZÍTÉS PROGRAMOZÁSA
A hatékony adományozás eszközei igazgató, Magyar Adományozói Fórum
Monitor(LCD).
Informatikai gyakorlatok 11. évfolyam
Tevékenységünk Célunk P92rdi Kft - p92rdi.hu Kutatás (Research)
Direct3D DirectCompute
Informatikai gyakorlatok 11. évfolyam
Hosszúidejű Spektrogram mérés az ELQ 35 - el
Hosszúidejű Spektrogram mérés az ET 92 - vel
Környezeti Kontrolling
REKLÁMESZKÖZÖK ÉS REKLÁMHORDOZÓK
A kutatási projekt címe Név Oktató neve Tanulmányi intézmény neve
További rendező és kereső algoritmusok
Szálszinkronizáció.
A szállítási probléma.
A számítógép operációs rendszere
Hosszúidejű Spektrogram mérés az ELQ 30A+ - al
Együtt Nyírbátorért Helyi Közösség
Mintaillesztés Knuth-Morris-Pratt (KMP) algoritmus
Bemeneti kompetenciamérés 2007/2008 tanév
Iskolai szociális segítő
Tájékoztató az EPER pályázati folyamatáról
SZAKKÉPZÉSI ÖNÉRTÉKELÉSI MODELL I. HELYZETFELMÉRŐ SZINT FOLYAMATA 7
Algoritmusok.
A SIKERTELENSÉG NÉHÁNY OKA
Pipeline példák (Normál, 2019).
A tehetséggondozás kihívásai
Az operációs rendszer definíciója
Előadás másolata:

Szécsi László 3D Grafikus Rendszerek 15. előadás DirectCompute Szécsi László 3D Grafikus Rendszerek 15. előadás

GPGPU throughput párhuzamosság, sok processzor: FLOPs a memória késleltetése gyakran a szűk kersztmetszet nagy számításigényű problémákra nagy gyorsulás el kell látni a processzorokat munkával DirectCompute API compute shader

DirectCompute Microsoft szabvány GPGPU platform Windows DX11, DX12 együttműködés a grafikával testvérAPIk: hasonló koncepciók, hasonlóan kell hatékony programot írni OpenCL CUDA C

DirectCompute előnyok GPGPU együttműködés a D3D-vel ugyanazokat az erőforrásokat érik el textúrázás (cube map, mipmap) HLSL shaderek gyártófüggetlen

GPU programozási modell munka felbontása párhuzamos szálcsoportokra (thread groups) több szálcsoport indítása (dispatch) egyidejűleg egy dispatch szálcsoportok 3D rácsa --- többszázezer szál egy szálcsoport 64,128, 256 szál tipikusan egy szál egy shaderfuttatás SV_DispatchThreadID = SV_GroupID * numthreads + GroupThreadID

Párhuzamos végrehajtás szálcsoportnak egy fizikai processzoron van van osztott memóriája szálcsoport szálai párhuzamosan futnak különböző szálcsoportok is futhatnak párhuzamosan

Thread Group Shared Memory (TGSM) szálcsoport osztott memóriája groupshared float2 MyArray[16][32]; gyors elérés nem perzisztens több dispatch között számítások gyorsítására van többször elérendő adatok bemásolása tipikus

Dispatch/szálcsoport méretének megválasztása # of thread groups > # of multiprocessors minden multiprocesszornak legyen legalább egy végrehajtható szálcsoportja # of thread groups / # of multiprocessors > 2 több szálcsoport is jut egy mprocira nem kell leállni, ha pl. memóriára várunk (barrier) viszont a szálcsoportok között el kell osztáni a mproci regisztereit és osztott memóriáját – ez meghatározza, hány működhet valójában egy időben a mprocin # threads / threadgroup a nyüstméret (warp size) többszöröse – ne lazsáljon a nyüstben senki 

Párhuzamos redukció gyakori és fontos feladat tömbelemek összegzése könnyű implementálni compute shaderben nehezebb optimálisra írni

Párhuzamos redukció páronként adjuk össze, aztán megint páronként binárisfa-szerű konstrukció egy szálcsoport legalábbis ezt csinálja eredmény: szálcsoportmérettel osztott méretű tömb erre aztán megint lehet egy új dispatch

HLSL erőforrások, shared mem RWStructuredBuffer g_data; #define groupDim_x 128 groupshared float sdata[groupDim_x];

HLSL compute shader [numthreads( groupDim_x, 1, 1)] void csReduce( uint3 threadIdx : SV_GroupThreadID, uint3 groupIdx : SV_GroupID) { // each thread loads one element // from global to shared mem unsigned int tid = threadIdx.x; unsigned int i = groupIdx.x*groupDim_x + threadIdx.x; sdata[tid] = g_data[i]; GroupMemoryBarrierWithGroupSync();

HLSL compute shader folyt // do reduction in shared mem for(unsigned int s=1; s < groupDim_x; s *= 2) { if (tid % (2*s) == 0) { sdata[tid] += sdata[tid + s]; } GroupMemoryBarrierWithGroupSync(); // write result for this block to global mem if (tid == 0) g_data[groupIdx.x] = sdata[0];