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.[1]

GPU:n suorituskyky laskennassa perustuu yksinkertaisiin suorittimiin, joita on huomattavan paljon rinnakkain.[1] 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.[2] GPU soveltuu käytettäväksi algoritmeissa joissa on korkea laskentaintensiteetti sekä datan riippumattomuus.[1][3] Laskentaintensiteetti määritellään operaatioina datayksikköä kohden. Tästä syystä esimerkiksi säteenseuranta on yksi mahdollinen käyttökohde.[3]

Historia muokkaa

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[4]) 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 muokkaa

GPGPU-rajapintoja ovat muun muassa Khronos Groupin OpenCL, NVIDIAn CUDA, AMD:n ROCm[5], Intelin oneAPI[6] 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).[7]

Vulkan-rajapinta käyttää termiä Compute Pipeline tekniikalle.[8] Applen Metal tukee GPGPU-käyttöä Compute Pipeline -toiminnon kautta.[9]

Ohjelmakoodikirjastoja ovat esimerkiksi OpenACC ja Torch.[10][11]

Käyttökohteet muokkaa

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

Esimerkkeinä Oak Ridgen Titan ja Facebookin julkaisema avoin Big Sur -laitealusta.[12][11]

Katso myös muokkaa

Lähteet muokkaa

  1. a b c 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. a b 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. a b c Facebook to open-source AI hardware design Facebook. Viitattu 20.1.2017.
  12. a b Introducing Titan olcf.ornl.gov. Viitattu 20.1.2017.

Aiheesta muualla muokkaa