GPGPU

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)[1]
  • Červenec 2002: OpenGL představila GLSL jako rozšíření v OpenGL 1.4
  • 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ů[2]
  • Ří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).[3]

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ů. 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ášť. 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:

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.

Reference

  1. http://news.microsoft.com/2000/11/09/microsoft-announces-release-of-directx-8-0/
  2. http://msdn.microsoft.com/en-us/library/windows/desktop/ff476342(v=vs.85).aspx#Full
  3. HACHMAN, Mark. AMD reveals high-end 'Carrizo' APU, the first chip to fully embrace audacious HSA tech. PCWorld.com [online]. 2014-11-21 [cit. 2015-11-17]. Dostupné online. (anglicky)