Rinnakkaisuuden vertailu: C++ ja Python: Toteutuksen ja nopeutuksen tarkastelu
Irri, Viljami (2023)
Irri, Viljami
2023
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ä
2023-05-04
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202304294878
https://urn.fi/URN:NBN:fi:tuni-202304294878
Tiivistelmä
Rinnakkaista suoritusta esiintyy lähes kaikkialla nykypäivänä, esimerkiksi tieteen ja teollisuuden aloilla, pelialalla ja sisällöntuotannossa. Rinnakkaisissa sovelluksissa pyritään tavallisesti mahdollisimman korkeaan suorituskykyyn, mikä auttaa alati kasvavien datamäärien käsittelynopeudessa. Rinnakkaisuuden merkityksellisyys
on myös nähtävissä suoritinmarkkinoilla - suorittimien ydinmäärät ovat nousseet erityisesti viime vuosina.
Rinnakkaisuuden toteutustavat riippuvat käytetystä ohjelmointikielestä. Tässä työssä tarkastellaan Python- ja C++-kieliä. Python-kieli on tarkoitettu aloittelijaystävälliseksi ja helposti luettavaksi skriptikieleksi, joka hyödyntää monenlaisia kirjastoja joustavuuden takaamiseksi. Pythonohjelmat ajetaan virtuaaliympäristössä, joka tekee niistä alustariippumattomia. C++-kieli on tunnetusti hankala ohjelmointikieli, joka antaa ohjelmoijalle paljon vapautta matalan tason ohjelmointiin liittyen ja on suunniteltu suorituskyky- ja tehokkuuspainotteiseksi. Työssä vertaillaan näiden kahden ohjelmointikielen rinnakkaisia ohjelmatoteutuksia. Työn tarkoituksena on selvittää kielten rinnakkaisuuden toteutustapoja ja tehokkuutta.
Tutkielmassa tutustutaan rinnakkaisuuden teoreettiseen taustaan keskittyen rinnakkaisuuden toteutustapoihin, haasteisiin, tehokkuuteen vaikuttaviin asioihin sekä suorituskyvyn erilaisiin näkökulmiin. Työssä tarkasteltavia ohjelmointikieliä vertailtiin kirjoittamalla vastaavat ohjelmatoteutukset ja vertailemalla ohjelmatoteutuksien suorituskykyä keskittyen erityisesti rinnakkaisuudesta saatuun nopeutukseen. Ohjelmatoteutuksien rinnakkainen osuus oli matriisin kertolaskualgoritmi. Valitut eri sarakemitan matriisit ajettiin ohjelmatoteutuksilla, ja mittaustuloksia valikoitiin Best-K-metodin avulla. Tulokset herättivät pohdintaa muun muassa prosessien ja säikeiden yleiskustannusten erosta ja mahdollisesta jatkotutkimuksesta.
Mittausten perusteella tehokkuuden ero on merkittävä tarkasteltavien ohjelmointikielten välillä. Eroon vaikuttaa eniten Pythonin tulkkaus, joka hidastaa toteutetun ohjelman suorituskykyä verrattuna C++:n vastaavaan ohjelmatoteutukseen, joka on käännetty ennen ohjelman ajoa. Kielten skaalautuvuus on hyvin samankaltainen rinnakkaisessa kontekstissa. Tehokkuuseroa voidaan pienentää Pythonissa sovelluskehysten avulla.
on myös nähtävissä suoritinmarkkinoilla - suorittimien ydinmäärät ovat nousseet erityisesti viime vuosina.
Rinnakkaisuuden toteutustavat riippuvat käytetystä ohjelmointikielestä. Tässä työssä tarkastellaan Python- ja C++-kieliä. Python-kieli on tarkoitettu aloittelijaystävälliseksi ja helposti luettavaksi skriptikieleksi, joka hyödyntää monenlaisia kirjastoja joustavuuden takaamiseksi. Pythonohjelmat ajetaan virtuaaliympäristössä, joka tekee niistä alustariippumattomia. C++-kieli on tunnetusti hankala ohjelmointikieli, joka antaa ohjelmoijalle paljon vapautta matalan tason ohjelmointiin liittyen ja on suunniteltu suorituskyky- ja tehokkuuspainotteiseksi. Työssä vertaillaan näiden kahden ohjelmointikielen rinnakkaisia ohjelmatoteutuksia. Työn tarkoituksena on selvittää kielten rinnakkaisuuden toteutustapoja ja tehokkuutta.
Tutkielmassa tutustutaan rinnakkaisuuden teoreettiseen taustaan keskittyen rinnakkaisuuden toteutustapoihin, haasteisiin, tehokkuuteen vaikuttaviin asioihin sekä suorituskyvyn erilaisiin näkökulmiin. Työssä tarkasteltavia ohjelmointikieliä vertailtiin kirjoittamalla vastaavat ohjelmatoteutukset ja vertailemalla ohjelmatoteutuksien suorituskykyä keskittyen erityisesti rinnakkaisuudesta saatuun nopeutukseen. Ohjelmatoteutuksien rinnakkainen osuus oli matriisin kertolaskualgoritmi. Valitut eri sarakemitan matriisit ajettiin ohjelmatoteutuksilla, ja mittaustuloksia valikoitiin Best-K-metodin avulla. Tulokset herättivät pohdintaa muun muassa prosessien ja säikeiden yleiskustannusten erosta ja mahdollisesta jatkotutkimuksesta.
Mittausten perusteella tehokkuuden ero on merkittävä tarkasteltavien ohjelmointikielten välillä. Eroon vaikuttaa eniten Pythonin tulkkaus, joka hidastaa toteutetun ohjelman suorituskykyä verrattuna C++:n vastaavaan ohjelmatoteutukseen, joka on käännetty ennen ohjelman ajoa. Kielten skaalautuvuus on hyvin samankaltainen rinnakkaisessa kontekstissa. Tehokkuuseroa voidaan pienentää Pythonissa sovelluskehysten avulla.
Kokoelmat
- Kandidaatintutkielmat [9896]