GPGPU

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

General-purpose computing on graphics processing units (zkratka GPGPU) je způsob využití paralelizace na grafické kartě, ale obecněji lze využít takřka každý procesor, jako je například CPU, GPU, APU a DSP, k výpočtu obecných algoritmů. GPU (což je grafický procesor či čip) dříve obsahovaly pouze jednoúčelový fixní vykreslovací řetězec, podobný výrobě na lince, který sloužil výhradně ke zpracování grafických primitiv a prezentaci na obrazovce. S příchodem programovatelných shaderů se však vyskytla možnost získat výstup operací prováděných grafickou kartou. Výpočty na grafické kartě jsou vhodné u algoritmů, které mají podobný formát jako grafická primitiva a obsahují mezi sebou minimální nebo žádné vazby (taková operace může být například převod pixelů barevného obrazu do šedotónového). S příchodem grafických čipů AMD GPU typu GCN a výše, může CPU a GPU či oboje v APU velice úzce spolupracovat, takže například jednotka GPU typu GCN si může od CPU přímo vyžádat data například z disku. Typicky konzole AMD, jako konzole osmé generace Playstation 4 a Xbox One, či konzole deváté generace Playstation 5 a Xbox Series X a Series S.

Historie a významná data

Listopad 2000: Direct3D 8. 0 představil programovatelné shadery (vertex a pixel) * Červenec 2002: OpenGL představila GLSL jako rozšíření v OpenGL 1. +more4 * Září 2004: OpenGL 2. 0 přidala jazyk GLSL do svého jádra * Červen 2007: Firma NVIDIA  představila svůj framework CUDA, sloužící výhradně k paralelním výpočtům na grafických kartách * Červenec 2008: Direct3D 11. 0 přidalo podporu compute shaderů * Říjen 2009 - Apple představuje OpenCL, které později nahrazuje Close To Metal od AMD * Srpen 2012: OpenGL 4. 3 přidává do své specifikace compute shadery * Září 2014: Apple představuje API Metal pro mobilní zařízení, které umožňuje využívat výkon grafické karty k obecným výpočtům * Listopad 2014: AMD představuje Carizzo a Carizzo-L, první čipy podporující HSA (Heterogeneous System Architecture).

Princip

Grafický procesor (GPU) má značně rozdílnou architekturu na rozdíl od klasického procesoru. CPU má rozsáhlou instrukční sadu uzpůsobenou k realizaci obecných výpočtů. +more Architektura grafického čipu byla na druhou stranu vyvíjena s myšlenkou realizace malého množství specifických instrukcí (operací nad grafickými primitivy) paralelně nad velkou homogenní datovou sadou. V kombinaci s dostupností programovatelného řetězce, jmenovitě vertex, fragment, geometry a compute shaderů, mohou být grafické karty použity k urychlení obecných, avšak ze své podstaty masivně paralelních algoritmů.

Pro programování algoritmů se používá konceptu takzvaného kernelu, který aplikuje operaci paralelně na každé primitivum vstupních dat (např. pixel obrazu) zvlášť. +more Ukázka jednoduchého kernelu (v jazyce GLSL), který převádí pixely barevného obrazu do šedotónové hloubky může vypadat například takto:.

#version 430

// Vstupy a vystupy uniform readonly image2D vstup; uniform writeonly image2D vystup;

void main { // Ziskame koordinaty pixelu, ktery zpracovavame ivec2 koordinaty = ivec2(gl_GlobalInvocationID.xy);

// Nacteme pixel ze vstupu vec4 pixel = imageLoad(vstup, koordinaty);

// Prevedeme pixel do stupni sedi pixel.rgb = 0.144 * pixel.r + 0.587 * pixel.g + 0.299 * pixel.b;

// A zapiseme pixel na vystup imageStore(vystup, koordinaty, pixel); }

Použití

Na GPU lze při dostupnosti programovatelného řetězce implementovat jakýkoliv algoritmus, ovšem ne u každého takového algoritmu lze dosáhnout urychlení. Příklady vhodných aplikací pro urychlování na GPU mohou být algoritmy: * Počítačového vidění (předzpracování, segmentace, počítačové učení) * Fyzikální simulace (částicové simulace) * Kryptografické (výpočty kontrolních součtů)

Softwarové knihovny

Pro desktopové aplikace existují implementace otevřeného standardu OpenCL (spravován Khronos Group) a z používanějších také proprietární framework CUDA firmy NVIDIA. Pro vývoj na převažujících mobilních operačních systémech jsou dostupné knihovny Renderscript (pro OS Android) a Metal (pro iOS).

Související články

OpenGL - průmyslový standard specifikující multiplatformní rozhraní (API) pro tvorbu aplikací počítačové grafiky, * WebGL - jako OpenGL, pro JavaScript, * OpenAL - je audio standard, * OpenCL - průmyslový standard specifikující multiplatformní rozhraní (API) pro tvorbu výpočetně náročných aplikací, * GLUT - OpenGL Utility Toolkit, * ALUT - OpenAL Utility Toolkit, * DirectX - grafické API pro Microsoft Windows, * Direct3D - součást DirectX.

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top