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