**GPGPU** eli **General-purpose computing on graphics processing units** (lyhyemmin **GPU-compute**) on tekniikka, jossa grafiikkasuorittimella suoritetaan laskentaa, joka on yleisesti ollut pelkän suorittimen laskettavana. 

Grafiikkasuorittimet ovat perinteisiin keskussuorittimiin nähden hyvin tehokkaita rinnakkaislaskennassa. Tietyissä algoritmeissa nopeusero voi olla 10–100-kertainen GPU:n hyväksi.

GPU:n suorituskyky laskennassa perustuu yksinkertaisiin suorittimiin, joita on huomattavan paljon rinnakkain. GPU:n transistoreista suuri määrä on käytetty datan käsittelyyn sen sijaan, että niitä käytettäisiin ehtorakenteisiin, vuonhallintaan ja datan välimuistiin. GPU soveltuu käytettäväksi algoritmeissa joissa on korkea *laskentaintensiteetti* sekä datan *riippumattomuus*. Laskentaintensiteetti määritellään operaatioina datayksikköä kohden. Tästä syystä esimerkiksi säteenseuranta on yksi mahdollinen käyttökohde.

Historia
--------

Varhaiset grafiikkasuorittimet (GPU) olivat verrattain yksinkertaisia, kiinteätoimisia komponentteja. Ohjelma-algoritmien toteuttaminen GPU:n mikropiirillä tehosti 3D-grafiikkaa ja vapautti keskussuorittimen muihin operaatioihin. 

Renderöidyn tiedon siirtäminen takaisin keskusmuistiin kuvan (*frame*) jälkikäsittelyä varten lisäsi tarvetta kaksisuuntaiselle väylälle ja GPU ei ollut enää sidottu vain näytölle suuntautuviin toimintoihin.

Shader-kielet lisäsivät joustavuutta ja sovittamista uusien algoritmien toteuttamiseen GPU:lla ilman tarvetta, että algoritmi olisi kiinteätoimisena piirinä mikrosirulla. Näiden kehittyminen johti lopulta nykyisen kaltaiseen tilanteeseen, jossa GPU on ohjelmoitavissa oleva komponentti ja käytettävissä laajalti muuhunkin kuin näyttötoimintoihin.

Varhaiset shader-kielet (*pixel shader*, *vertex shader*) olivat vielä varsin rajoittuneita ja muistuttivat assembly-kieltä. *Unified Shader* -kehityksen myötä toiminnoista tuli geneerisempiä, joustavampia ja ohjelmoitavuus korvasi kiinteätoimiset osat GPU:n rakenteessa.

Myöhemmin on tullut mahdollisuus ohjelmoida C-tyylisellä korkeamman tason kielellä (ks. GLSL, HLSL, Cg, C++ AMP). Shader-kielellä tehty ohjelma käännetään joko suoraan tai välillisesti (ks. SPIR-V) GPU:n itsensä käyttämään muotoon. Johtuen useiden eri arkkitehtuurien määrästä viimeinen käännös GPU-kohtaisesti tapahtuu usein ajuritasolla.

Ohjelmarajapinnat ja kirjastot
------------------------------

GPGPU-rajapintoja ovat muun muassa Khronos Groupin OpenCL, NVIDIAn CUDA, AMD:n ROCm, Intelin oneAPI sekä Microsoftin DirectX 11:n mukana julkistama DirectCompute sekä C++ AMP. 

Khronos Groupin SYCL on suunnattu laajempaan heterogeeniseen käyttöön (suorittimet, GPU:t, FPGA:t, ei ainoastaan GPU:n kanssa).

Vulkan-rajapinta käyttää termiä *Compute Pipeline* tekniikalle. Applen Metal tukee GPGPU-käyttöä *Compute Pipeline* -toiminnon kautta.

Ohjelmakoodikirjastoja ovat esimerkiksi OpenACC ja Torch.

Käyttökohteet
-------------

Eräät supertietokoneet käyttävät menetelmää laskentakapasiteetin lisäämiseen. Käyttökohteita ovat muun muassa fysiikkamallinnus ja tekoälytutkimus.

Esimerkkeinä Oak Ridgen *Titan* ja Facebookin julkaisema avoin *Big Sur* -laitealusta.

Katso myös
----------

* Flynnin luokittelu

Lähteet
-------

1. 1 2 3  8 Things You Should Know About GPGPU Technology Texas Advanced Computing Center.  Arkistoitu 2.2.2017. Viitattu 20.1.2017.
2. ↑  Bogdan Oancea & Tudorel Andrei & Raluca Mariana Dragoescu: GPGPU Computing (PDF) *arxiv.org*. Viitattu 12.5.2019. (englanniksi)
3. 1 2  Henri Pirinen: GPGPU-säteenseuranta Jyväskylän Yliopisto. Viitattu 21.1.2017.
4. ↑  The first open standard intermediate language for parallel compute and graphics Khronos Group. Viitattu 21.1.2017.
5. ↑  Cabe Atwell: What’s the Difference Between CUDA and ROCm for GPGPU Apps? *electronicdesign.com*.  2.12.2022. Viitattu 2.9.2023. (englanniksi)
6. ↑  Extending MAGMA Portability with OneAPI (PDF) *icl.utk.edu*. Viitattu 2.9.2023. (englanniksi)
7. ↑  SYCL *khronos.org*. Viitattu 2.9.2023. (englanniksi)
8. ↑  9.1. Compute Pipelines Khronos Group.  Arkistoitu 27.7.2016. Viitattu 20.1.2017.
9. ↑  Data-Parallel Compute Processing: Compute Command Encoder Apple. Viitattu 23.1.2017.
10. ↑  OpenACC: Directives for GPUs NVidia. Viitattu 20.1.2017.
11. 1 2 3  Facebook to open-source AI hardware design Facebook. Viitattu 20.1.2017.
12. 1 2  Introducing Titan *olcf.ornl.gov*. Viitattu 20.1.2017.

Aiheesta muualla
----------------

* OpenACC
* Torch