Nvidian GPGPU-tekniikka : Tekninen katsaus CUDA-ohjelmointialustaan
Ihonen, Anton (2022)
Ihonen, Anton
2022
Tieto- ja sähkötekniikan kandidaattiohjelma - Bachelor's Programme in Computing and Electrical Engineering
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2022-03-21
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202203162570
https://urn.fi/URN:NBN:fi:tuni-202203162570
Tiivistelmä
Nykyiset grafiikkaprosessorit ovat ohjelmoitavia, massiivisen rinnakkaisia prosessoreja, joiden laskentatehoa hyödyntämällä voidaan parantaa rinnakkaistuvan sovelluksen suorituskykyä. Tässä opinnäytetyössä perehdyttiin Nvidian CUDA-ohjelmointialustaan, sen toteutustekniikkaan ja sen mahdollistamiin suorituskykyhyötyihin.
Heterogeenisessä laskennassa ohjelman rinnakkainen osa suoritetaan tietokoneen keskusprosessorin sijaan toisella laitteella. GPGPU-laskenta on heterogeenistä laskentaa, jossa ideaalisesti keskusprosessori suorittaa ohjelman sekventiaalisen ja grafiikkaprosessori rinnakkaisen osan. Grafiikkaprosessorit on suunniteltu juuri tähän: kontrollilogiikan ja välimuistien osuus piirin pinta-alasta on minimoitu ja laskentaelementtien puolestaan maksimoitu. Tämä yhdessä muistiväylän suuren kaistanleveyden ja laitteistotason vuoronnuksen kanssa mahdollistaa tehokkaan ja joustavan rinnakkaisen laskennan.
GPGPU-sovelluksia tarkasteltaessa esiin nousee joukko erityispiirteitä. Näitä ovat runsas datatason rinnakkaisuus, ratkaistavan ongelman suuri koko, korkea aritmeettinen intensiteetti ja korkeat suorituskykyvaatimukset. Grafiikkaprosessorit soveltuvat arkkitehtuurinsa vuoksi tällaisiin sovelluksiin erityisen hyvin. GPGPU-ohjelmointi eroaa oleellisesti yleiskäyttöisen prosessorin ohjelmoinnista. Nvidian grafiikkaprosessoreja ohjelmoidaan CUDA-ohjelmointialustan ja -rajapinnan avulla. CUDA noudattaa SPMD-mallia, jossa sama ohjelma suoritetaan lukemattomilla rinnakkaisilla säikeillä. Se myös mahdollistaa grafiikkaprosessorin verrattain helposti lähestyttävän ohjelmoinnin GPGPU-ohjelmoinnin tarpeisiin mukautetulla C++-ohjelmointikielen murteella. CUDA:n tekninen toteutus nojautuukin pitkälti CUDA-ohjelmien kääntämiseen tarkoitettuun NVCC-kääntäjään.
Erityispiirteidensä ansiosta grafiikkaprosessorit ovat rinnakkaisessa laskennassa sekä laskentatehon että energiatehokkuuden suhteen huomattavasti parempia kuin yleiskäyttöiset prosessorit. Työssä havaittiin, että monissa käytännön sovelluksissa tavanomaisen grafiikkaprosessorin hyödyntäminen yleiskäyttöisen prosessorin ohella voi parantaa suorituskykyä jopa kertaluokalla. Lisäksi hyvin rinnakkaistuvan sovelluksen energiankulutus voidaan grafiikkaprosessorin avulla pudottaa jopa sadasosaan alkuperäisestä.
Heterogeenisessä laskennassa ohjelman rinnakkainen osa suoritetaan tietokoneen keskusprosessorin sijaan toisella laitteella. GPGPU-laskenta on heterogeenistä laskentaa, jossa ideaalisesti keskusprosessori suorittaa ohjelman sekventiaalisen ja grafiikkaprosessori rinnakkaisen osan. Grafiikkaprosessorit on suunniteltu juuri tähän: kontrollilogiikan ja välimuistien osuus piirin pinta-alasta on minimoitu ja laskentaelementtien puolestaan maksimoitu. Tämä yhdessä muistiväylän suuren kaistanleveyden ja laitteistotason vuoronnuksen kanssa mahdollistaa tehokkaan ja joustavan rinnakkaisen laskennan.
GPGPU-sovelluksia tarkasteltaessa esiin nousee joukko erityispiirteitä. Näitä ovat runsas datatason rinnakkaisuus, ratkaistavan ongelman suuri koko, korkea aritmeettinen intensiteetti ja korkeat suorituskykyvaatimukset. Grafiikkaprosessorit soveltuvat arkkitehtuurinsa vuoksi tällaisiin sovelluksiin erityisen hyvin. GPGPU-ohjelmointi eroaa oleellisesti yleiskäyttöisen prosessorin ohjelmoinnista. Nvidian grafiikkaprosessoreja ohjelmoidaan CUDA-ohjelmointialustan ja -rajapinnan avulla. CUDA noudattaa SPMD-mallia, jossa sama ohjelma suoritetaan lukemattomilla rinnakkaisilla säikeillä. Se myös mahdollistaa grafiikkaprosessorin verrattain helposti lähestyttävän ohjelmoinnin GPGPU-ohjelmoinnin tarpeisiin mukautetulla C++-ohjelmointikielen murteella. CUDA:n tekninen toteutus nojautuukin pitkälti CUDA-ohjelmien kääntämiseen tarkoitettuun NVCC-kääntäjään.
Erityispiirteidensä ansiosta grafiikkaprosessorit ovat rinnakkaisessa laskennassa sekä laskentatehon että energiatehokkuuden suhteen huomattavasti parempia kuin yleiskäyttöiset prosessorit. Työssä havaittiin, että monissa käytännön sovelluksissa tavanomaisen grafiikkaprosessorin hyödyntäminen yleiskäyttöisen prosessorin ohella voi parantaa suorituskykyä jopa kertaluokalla. Lisäksi hyvin rinnakkaistuvan sovelluksen energiankulutus voidaan grafiikkaprosessorin avulla pudottaa jopa sadasosaan alkuperäisestä.
Kokoelmat
- Kandidaatintutkielmat [8695]