GPGPU. GPU-k felépítése. Valasek Gábor

Hasonló dokumentumok
Haladó Grafika EA. Inkrementális képszintézis GPU-n

GPGPU. Architektúra esettanulmány

GPGPU-k és programozásuk Dezső, Sima Sándor, Szénási

GPGPU alapok. GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai

Diplomamunka. Miskolci Egyetem. GPGPU technológia kriptográfiai alkalmazása. Készítette: Csikó Richárd VIJFZK mérnök informatikus

Párhuzamos és Grid rendszerek

OpenCL - The open standard for parallel programming of heterogeneous systems

Grafikus csővezeték 1 / 44

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

Ismétlés: Moore törvény. Tranzisztorok mérőszáma: n*százmillió, n*milliárd.

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

GPGPU: Általános célú grafikus processzorok cgpu: computational GPU GPGPU = cgpu Adatpárhuzamos gyorsító: dedikált eszköz, ami eleve csak erre

Nagy adattömbökkel végzett FORRÓ TI BOR tudományos számítások lehetőségei. kisszámítógépes rendszerekben. Kutató Intézet

Google Summer of Code OpenCL image support for the r600g driver

Bevitel-Kivitel. Eddig a számítógép agyáról volt szó. Szükség van eszközökre. Processzusok, memória, stb

OpenCL Kovács, György

Heterogén számítási rendszerek

Számítógép Architektúrák

Eichhardt Iván GPGPU óra anyagai

Memóriák - tárak. Memória. Kapacitás Ár. Sebesség. Háttértár. (felejtő) (nem felejtő)

OSZTOTT 2D RASZTERIZÁCIÓS MODELL TÖBBMAGOS PROCESSZOROK SZÁMÁRA

Eichhardt Iván GPGPU óra anyagai

Grafikus processzorok általános célú programozása (GPGPU)

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

2. Generáció ( ) 3. Generáció (2001) NVIDIA TNT2, ATI Rage, 3dfx Voodoo3. Klár Gergely

FIR SZŰRŐK TELJESÍTMÉNYÉNEK JAVÍTÁSA C/C++-BAN

VLIW processzorok (Működési elvük, jellemzőik, előnyeik, hátrányaik, kereskedelmi rendszerek)

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

ARM processzorok felépítése

Négyprocesszoros közvetlen csatolású szerverek architektúrája:

Számítógép architektúrák I. Várady Géza

Számítógépek felépítése, alapfogalmak

GPGPU programozás lehetőségei. Nagy Máté Ferenc Budapest ALICE ELTE TTK Fizika MSc 2011 e-science Café

Parciális rekonfiguráció Heterogán számítási rendszerek VIMIMA15

ARM Cortex magú mikrovezérlők

Magas szintű optimalizálás

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

Grafikus kártyák, mint olcsó szuperszámítógépek - I.

Számítógépek felépítése

Grafika programozása

A CUDA előnyei: - Elszórt memória olvasás (az adatok a memória bármely területéről olvashatóak) PC-Vilag.hu CUDA, a jövő technológiája?!

Grafikus csővezeték 2 / 77

KUTATÁSOK INFORMATIKAI TÁMOGATÁSA. Dr. Szénási Sándor

Parciális rekonfiguráció Heterogén számítási rendszerek VIMIMA15

SAT probléma kielégíthetőségének vizsgálata. masszív parallel. mesterséges neurális hálózat alkalmazásával

Dr. Illés Zoltán

Digitális Technika I. (VEMIVI1112D)

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Az INTEL mikroprocesszorok architekturális fejlődésének bemutatása

Riak. Pronounced REE-ahk. Elosztott adattároló eszköz. Molnár Péter

Számítógép Architektúrák

Operációs rendszerek MINB240. Bevitel-Kivitel. 6. előadás Input és Output. Perifériák csoportosításá, használat szerint

Számítógép architektúrák

Digitális Technika I. (VEMIVI1112D)

HLSL programozás. Grafikus játékok fejlesztése Szécsi László t06-hlsl

CUDA alapok CUDA projektek. CUDA bemutató. Adatbányászat és Webes Keresés Kutatócsoport SZTAKI

SZÁMÍTÓGÉPES ARCHITEKTÚRÁK

Bentley új generációs alkalmazásai: ContextCapture, LumenRt és Connect Edition. L - Tér Informatika Kft.

Számítógép Architektúrák I-II-III.

SZÁMÍTÓGÉPES ARCHITEKTÚRÁK A STRUKTURÁLT SZÁMÍTÓGÉP-FELÉPÍTÉS. Misák Sándor. 2. előadás DE TTK

GPGPU és számítások heterogén rendszereken

Klár Gergely 2010/2011. tavaszi félév

GPU Lab. 14. fejezet. OpenCL textúra használat. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

OpenGL Compute Shader-ek. Valasek Gábor

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Heterogén számítási rendszerek gyakorlatok (2017.)

1. Az utasítás beolvasása a processzorba

Plakátok, részecskerendszerek. Szécsi László

Árnyalás, env mapping. Szécsi László 3D Grafikus Rendszerek 3. labor

2D képszintézis. Szirmay-Kalos László

A mai program OPERÁCIÓS RENDSZEREK. A probléma. Fogalmak. Mit várunk el? Tágítjuk a problémát: ütemezési szintek

Adatfolyam alapú RACER tömbprocesszor és algoritmus implementációs módszerek valamint azok alkalmazásai parallel, heterogén számítási architektúrákra

Ez egy program. De ki tudja végrehajtani?

A mikroszámítógép felépítése.

Amazon Web Services. Géhberger Dániel Szolgáltatások és alkalmazások március 28.

2. Gyakorlat Khoros Cantata

Processzus. Operációs rendszerek MINB240. Memória gazdálkodás. Operációs rendszer néhány célja előadás Memóriakezelés

Ami az Intel szerint is konvergens architektúra

Analitikai megoldások IBM Power és FlashSystem alapokon. Mosolygó Ferenc - Avnet

Budapesti Műszaki- és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar MIT. Nagyteljesítményű mikrovezérlők tantárgy [vimim342]

Főbb jellemzők INTELLIO VIDEO SYSTEM 2 ADATLAP

Máté: Számítógép architektúrák

Heterogén számítási rendszerek

Számítógép Architektúrák

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

KÉPFELDOLGOZÓ ALGORITMUSOK FEJLESZTÉSE GRAFIKUS HARDVER KÖRNYEZETBEN

PÁRHUZAMOS SZÁMÍTÁSTECHNIKA MODUL AZ ÚJ TECHNOLÓGIÁKHOZ KAPCSOLÓDÓ MEGKÖZELÍTÉSBEN

Bevezetés az informatikába

Digitális Technika I. (VEMIVI1112D)

14.2. OpenGL 3D: Mozgás a modellben

KISKER AKCIÓS ÁRLISTA

D3D, DXUT primer. Grafikus játékok fejlesztése Szécsi László t01-system

Virtualizációs Technológiák Bevezetés Kovács Ákos Forrás, BME-VIK Virtualizációs technológiák

Operációs rendszerek Memóriakezelés 1.1

A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja Teljesítménykövetelmények:

LowPrice

A processzor hajtja végre a műveleteket. összeadás, szorzás, logikai műveletek (és, vagy, nem)

OPERÁCIÓS RENDSZEREK 1. ÁTIRÁNYÍTÁSOK, SZŰRŐK

Design and Implementation of High-Performance Computing Algorithms for Wireless MIMO Communications. Supervisors

Átírás:

GPGPU GPU-k felépítése Valasek Gábor

Tartalom A mai órán áttekintjük a GPU-k architekturális felépítését A cél elsősorban egy olyan absztrakt hardvermodell bemutatása, ami segít megérteni a GPU-k hardveres felépítéséből adódó sajátosságokat Ezáltal pedig tetszőleges GPGPU API-val hatékonyabb kódot lehessen írni Röviden: a GPGPU-hoz szükséges implicit hardveres tudás átadása a mai óra célja

Források Diákban látható ábrák forrásai: http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/1 http://s08.idav.ucdavis.edu/fatahalian-gpu-architecture.p http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/1

Grafikus szerelőszalag

Grafikus szerelőszalag A GPU-k eredetileg az inkrementális képszintézist implementálták hardveresen Azaz egy kép (frame) előállításához szükséges lépések sorozatának fázisait huzalozták bele Mert fontos: az inkrementális képszintézis egy pipeline, aminek egyes szakaszai párhuzamosan futnak Nézzük meg először hát ezt

Grafikus szerelőszalag Az inkrementális képszintézisben a kirajzolandó geometriákat primitívekkel közelítjük Három fő típus: pont, szakasz, háromszög A primitíveket egyértelműen meghatározzák a csúcspontjainak koordinátái és a primitívtípusra jellemző összekötési szabály Kirajzolási paranccsal valahány primitívet elkezdünk rajzolni

Grafikus szerelőszalag 1)A primitívek minden egyes csúcspontját normalizált eszköz-koordinátarendszerbe (NDC) transzformáljuk 2)A transzformált csúcspontokkal képezzük a megfelelő primitíveket 3)Minden egyes primitívet az ablakra vágunk 4)Minden egyes primitívet raszterizáljuk, fragmenteket állítunk elő belülök 5)Minden egyes fragmentre interpoláljuk a csúcspontokban definiált attribútumokat 6)Minden egyes fragment színét meghatározzuk valamilyen árnyalási modell és textúrák segítségével 7)Eldöntjük, hogy a képernyőn meg kell-e jelenjen a fragment, vagy sem, és hogyan

Grafikus szerelőszalag 1)A primitívek minden egyes csúcspontját normalizált eszköz-koordinátarendszerbe (NDC) transzformáljuk 2)A transzformált csúcspontokkal képezzük a megfelelő primitíveket 3)Minden egyes primitívet az ablakra vágunk 4)Minden egyes primitívet raszterizáljuk, fragmenteket állítunk elő belülök 5)Minden egyes fragmentre interpoláljuk a csúcspontokban definiált attribútumokat 6)Minden egyes fragment színét meghatározzuk valamilyen árnyalási modell és textúrák segítségével 7)Minden egyes fragmentre eldöntjük, hogy a képernyőn meg kell-e jelenjen vagy sem, és hogyan

Raszterizáció

Grafikus szerelőszalag

OpenGL pipeline OpenGL 4.4: http://www.g-truc.net/project-0035.html#menu

Rajzolás grafikus API-val Tipikusan a következőképpen néz ki egy színtér kirajzolása (OpenGL-es szóhasználattal): Parancs típusa Parancs Állapot módosítása Shaderek, textúrák bindolása, uniform változók beállítása Rajzolás Objektum 1 kirajzolása a VAO-jával Állapot módosítása Új uniform értékek átküldése Rajzolás Objektum 2 kirajzolása a VAO-jával Állapot módosítása Új shader bindolása, uniform értékadások Állapot módosítása Blend függvény módosítása Rajzolás Objektum 3 kirajzolása a VAO-jával

Rajzolás grafikus API-val Állapotmódosítás lehet shaderek, vertex streamek, textúrák stb. beállítása És figyeljünk: drága az állapotmódosítás Ezért azok hatékony kezelése nagyon fontos De a feladat nehéz: ha minimalizálni akarjuk az állapotváltozások költségét, akkor Utazó Ügynökkel ekvivalens feladatot kapunk Azaz NP-teljeset

Rajzolás grafikus API-val Deklaratív (az utasítások olyanok, hogy rajzolj ennyi és ennyi háromszöget, legyen ez az aktív shader stb., nem pedig olyanok, hogy rajzolj kékszemű márvány csillámpónit ) Programozható fázisok vannak (vertex, tesszelációs, geometria és fragment shaderek) Konfigurálható a pipeline Visszacsatolási lehetőségek (feedback loop)

Absztrakciók Minden vertexet ugyanúgy dolgozunk fel Függetlenül attól, hogy milyen primitívhez tartozik Minden fragmentet ugyanúgy dolgozunk fel Ismét függetlenül attól, hogy milyen típusú primitívből származik A láthatóságot is primitívtípustól függetlenül oldjuk meg z-bufferrel

Grafikus szerelőszalag jellemzői Alacsony szintű absztrakció a hw fölé Megkötések a felépítésén: Adatforgalom a fázisok között korlátozott (előre) Fix funkciójú lépések, amik nem programozhatóak Független adatfeldolgozás (párhuzamosíthatóság) Különböző frekvenciájú műveletek Per vertex, per primitív, per fragment mindent csak a szükséges sebességgel dolgozzunk fel Immediate mode : rajzolási parancs azonnali végrehajtása színtér menedzselést az alkalmazásra hagyja

Grafikus szerelőszalag jellemzői Fontos az is, hogy mivel NEM foglalkozik: Nincs olyan benne, hogy anyag, fény, modellezési/nézeti/vetítési transzformációk Nincs olyan, hogy színtér Csak csúcspontok, primitívek, fragmentek, pixelek és állapotok (bufferek és shaderek) vannak! Globális hatásokhoz, mint például árnyékokhoz, tükröződésekhez, trükközni kell Nincs i/o, ablakozás stb.

GPU mag

GPU mag Egy GPU-s mag másképp néz ki, mint egy CPU Három (és fél) fontos dolog, amivel eljutunk egy GPU maghoz: 1) Egyszerűsítsük egy CPU mag felépítését és tegyünk be sokat belőlük a GPU-ba 2) Az utasításstream-eket osszuk meg magok között 3) A HW szálakat átlapolva osszuk be magokhoz 4) Az 1)-es pontban az egyszerűsítéssel eltüntetett dolgok egy részét tegyük vissza (esetleg más szinten)

CPU - Westmere

CPU - Westmere

CPU - Westmere Execution context: gyors regiszterek szálankénti privát adatok és állapotváltozók értékeinek tárolására Két execution context = Intel hyperthreading Azaz egy mag 2 szálat tud végrehajtani úgy, hogy felváltva ad hozzáférést az ALU-hoz, hozzáférés váltáskor kicserélve az execution context-et

GPU Induljunk ki egy CPU magból Első lépésben vegyünk ki mindent, ami csak egyetlen szál (pontosabban utasítás-stream) gyors végrehajtásáért felelős Cache-ek Bedrótozott vezérlési logika Ezekkel megy el egy átlag CPU lapméretének 50%-a

1: egyszerűsítés

1: egyszerűsítés Az így nyert területet és tranzisztorokat az egyszerűsített mag másolatainak elkészítésére szánjuk Lényegesen több mag van egy GPU-ban, mint egy CPU-ban Ha nem kell várakoznunk valami miatt (például memóriaelérés), így n-szeres sebességet érhetünk el

1: egyszerűsítés Két párhuzamos parancs-stream, két magon = két művelet elvégzése egységnyi idő alatt, párhuzamosan

1: egyszerűsítés 4 párhuzamos parancs-stream, 4 magon = 4 művelet elvégzése egységnyi idő alatt, párhuzamosan

2: SIMD feldolgozás Az inkrementális képszintézisben három fő fázis van: Geometria feldolgozás Raszterizáció Per-fragment árnyalás Ezek maguktól adódóan párhuzamosíthatóak: A geometriai feldolgozásban ugyanazt az affin transzformációt alkalmazzuk a primitívek csúcspontjaira Ugyanazokat a megvilágítási modelleket használjuk egy háromszög fragmentjeire

2: SIMD feldolgozás Azaz adat-párhuzamosság van az inkrementális képszintézisben Ennek megfelelően egyszerűsítsük a GPU magokat: osszuk meg több ALU között az utasítás-stream-et Úgyis ugyanazt a shader programot fogják futtatni, csak más-más adatra Ezzel csökkentjük a tranzisztorok számát De egyúttal implikáljuk a folyamatosan memóriahozzáférés szükségességét is optimális működéshez

2: SIMD feldolgozás

2: SIMD feldolgozás Egy 8-széles (8 wide) mag-utasítás 8 különböző adaton végzi el ugyanazt a műveletet

2: SIMD feldolgozás 16 darab 8-széles parancs-stream, 16 magon = 128 művelet párhuzamosan

SIMD feldolgozás

SIMD feldolgozás

SIMD feldolgozás

SIMD problémák Az elágazások divergenciája (azaz amikor az elágazások a különböző adatokra hol a then, hol az else ágra futnak) erősen visszaveti a teljesítményt A then és az else ágak szerializálására van szükség Legrosszabb esetben 1/<ALU-k száma>-ra csökkentve ezzel a teljesítményt egységnyi időben

SIMD problémák

SIMD feldolgozás Fontos, hogy csak azért, mert SIMD a feldolgozás, nem kell, hogy a programozásban ez explicit megjelenjen: x86 SSE, AVX stb. explicit vektor utasításokkal dolgoznak A GPU-n a vektorizáció implicit, a GPU osztja szét az utasítás stream-eket az ALU-k között (NVIDIA SIMT 32 szálak warp-jait, AMD VLIW 64 szálak wavefront-jait) Emaitt viszont nekünk, programozóknak is több implicit tudásra van szükségünk arról, hogy mi is van a GPU-n!

SIMD feldolgozás Tekintsük a következő kódot: float a[n], b[n], c[n];... for (i = 0; i < N; i++) c[i] = a[i] + b[i]; Nézzük meg, hogy miképp néz ki ez SSE-vel és OpenCL kóddal

SIMD feldolgozás SSE (explicit vektorutasítások) int a[n], b[n], c[n];... m128i *av, *bv, *cv; av = ( m128i*)a; // assume 16-byte aligned bv = ( m128i*)b; // assume 16-byte aligned cv = ( m128i*)c; // assume 16-byte aligned for (i = 0; i < N/4; i++) cv[i] = _mm_add_epi32(av[i], bv[i]);

SIMD feldolgozás OpenCL (implicit, hw vektorizáció) kernel void vector_add( global const int *A, global const int *B, global int *C) { int i = get_global_id(0); C[i] = A[i] + B[i]; }

SIMD feldolgozás Így két lehetőség van SIMD feldolgozásnál: Explicit vektorműveletek SSE-k: 128-256 bit AVX: 512 bit Kézzel, vagy compiler-rel generálva Implicit vektorizáció A hw határozza meg az utasítás-stream megosztást az ALU-k között Ez történik a GPU-n

3 késleltetés elrejtése Azaz latency hiding A késleltetés az adatelérésből származik: egy memóriaolvasás akár 1000x annyi időbe is telhet, mint egy aritmetikai művelet elvégzése (tehát egy textúra vagy globális memória elérés ennyivel drágább egy műveletnél!) Ezen segítenek a nagy cache-ek és vezérlőlogika áramkörök amiket az első lépésben kidobtunk :) Csakhogy: a GPU-n rengeteg, független SIMD csoport van

3 késleltetés elrejtése Egyetlen magra több SIMD csoportot osszunk be, átlapolva (interleaved) Ha késleltetés történik, akkor átváltunk egy másik SIMD csoport végrehajtására Cserébe több context-et kell tárolni de ezt a GPU vasból megcsinálja nekünk ingyen Így a késleltetést optimális esetben teljesen elrejtjük és maximális áteresztéssel működünk

3 késleltetés elrejtése átlapolással

3 késleltetés elrejtése átlapolással

3 késleltetés elrejtése átlapolással

3 késleltetés elrejtése átlapolással; maximális throughput

Context-ek tárolása Egy fix méretű területünk van a context-ek tárolására El kell dönteni, hogy ezt hogyan használjuk fel

3 átlapolás; sok, kicsi context = maximális latency elfedés

3 átlapolás; kevés, nagy context = kicsi latency elfedés

Összefoglalva Két egységet különböztethetünk meg tehát: Fizikai magot, ami művetetvégzést végez ( core ) Valahány mag együttesét, amik ugyanahhoz az execution context-hez tartoznak ( functional unit ) A három fő ötlet: Rengeteg, egyszerűsített magot használjunk Ezeket pakoljuk tele ALU-kkal és fussanak mind egy közös utasítás-stream-en A különböző késleltetéseket pedig fedjük el úgy, hogy

Architektúrák közelebbről

AMD

NVIDIA

Nvidia GPUs - Fermi Architecture Instruction Cache GTX 480 - Compute 2.0 capability Warp Scheduler Warp Scheduler Dispatch Unit Dispatch Unit Register File 32768 x 32bit 15 cores or Streaming Multiprocessors (SMs) LDST LDST Each SM features 32 CUDA processors 480 CUDA processors LDST LDST LDST LDST LDST Global memory with ECC SFU SFU LDST LDST LDST CUDA LDST SFU LDST LDST Dispatch Port Operand Collector Source: NVIDIA s Next Generation CUDA Architecture Whitepaper FP Unit Int Unit Result Queue Perhaad Mistry & Dana Schaa, Northeastern Univ LDST LDST LDST SFU Interconnect Memory L1 Cache / 64kB Shared Memory L2 Cache 62

Nvidia GPUs Fermi Architecture SM executes threads in groups of 32 called warps. Instruction Cache Warp Scheduler Warp Scheduler Dispatch Unit Dispatch Unit Two warp issue units per SM Register File 32768 x 32bit Concurrent kernel execution Execute multiple kernels simultaneously to improve efficiency LDST LDST LDST LDST LDST LDST LDST SFU CUDA core consists of a single ALU and floating point unit FPU CUDA SFU LDST LDST LDST LDST SFU LDST LDST Dispatch Port Operand Collector Source: NVIDIA s Next Generation CUDA Compute Architecture Whitepaper FP Unit Int Unit Result Queue Perhaad Mistry & Dana Schaa, Northeastern Univ LDST LDST LDST SFU Interconnect Memory L1 Cache / 64kB Shared Memory L2 Cache 63

NVIDIA Kepler A teljes Kepler 15 db SMX egységből áll és hat db, 64 bites memóriavezérlőből

SMX egység SMX = Streaming Multiprocessor, megnövelt duplapontosságú teljesítménnyel Multiprocesszor: valahány streamprocessor csoportja (Tesla = 8, Fermi = 2x16) Kepler-ben: 192 egyszeres pontosságú CUDA core SFU: special function unit a különleges dolgokhoz (inverse square root, sin, cos, transzcend fv közelítések stb.) Warp: 32 szál

SIMT Single Instruction, Multiple Thread Step lock-ban mennek az egy csoporthoz tartozó stream processorok, ugyanazt az utasítást hajtják végre, csak más adatokon

PowerVR

PowerVR Elsősorban mobileszközökhöz, de skálázható eszközök, GPGPU-t is támogatnak (CPU kisegítésére) Universal Scalable Shader Engine 1-2... 2-16 mag (és nő) 32x32-es tile-okra osztja a képernyőt Pl.: ipad, iphone, iakármi, Samsung Galaxy S, Tab, Wave I, II... Több infó: http://www.imgtec.com/powervr/insider/docs/powe

Tile alapú rajzolás

USSE

Tile Accelerator Vágás, vetítés, cull hagyományos szerelőszalagnál a vertex shadert hajtja végre

Image Synthesis Processor Tile-onkénti láthatóságvizsgálat (takarás) TSP = Texture and Shading Processor

PowerVR SGX Series5XT

ARM Mali

ARM Mali Nem csak GPU-kat gyártanak és nem csak mobileszközökre Mali 400 MP 1-4 magos Más Mali eszközökkel integrálható Pl.: Samsung Galaxy S2

Qualcomm Adreno

Qualcomm Adreno Pl.: HTC telefonok (Desire, Evo stb.) Ők is forradalmiak :

NVIDIA (megint)

Ultra low power GeForce