Rinnakkaisen C++-ohjelmoinnin modernit työkalut
Hietamäki, Aleksi (2023)
Hietamäki, Aleksi
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-06-09
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202306056499
https://urn.fi/URN:NBN:fi:tuni-202306056499
Tiivistelmä
Moniydinprosessoreiden yleistyessä tarvitaan tukea ohjelmointikieliltä, jotta niistä saadaan kaikki hyöty irti. Rinnakkainen ohjelmointi on perinteisesti toteutettu käyttöjärjestelmän järjestelmäkutsuilla, mutta kehitykset ohjelmointikielissä ovat tarjonneet standardoituja keinoja kirjoittaa rinnakkain suoritettavia ohjelmia käyttöjärjestelmästä riippumatta. Näihin ohjelmointikieliin lukeutuu C++. Se on tarjonnut rinnakkaisen ohjelmoinnin tukikirjaston standardiversiosta 11 alkaen. Standardi on kuitenkin jatkuvassa kehityksessä ja se on kokenut kolme päivitystä version 11 jälkeen.
Tämän työn tavoitteena on selvittää, kuinka C++ standardi on kehittynyt rinnakkaisen ohjelmoinnin näkökulmasta. Työ toteutettiin kirjallisuuskatsauksena. Työn alussa esitellään, kuinka rinnakkaisen ohjelmoinnin tukikirjasto on kehittynyt. Erityisenä tarkastelun kohteena ovat lisäykset ja muutokset sen alikirjastoissa. Mielenkiintoisimpana lisäyksenä havaitaan corutiinit, jotka ovat funktioita, joiden suoritus voidaan keskeyttää ja tarvittaessa käynnistää uudelleen myöhemmin. Työn loppupuolella selvitetään, mitä eroa on corutiineilla ja säikeillä ohjelman suorituksen ja kirjoittamisen kannalta. Tähän liittyen esitellään tutkimuksia, jotka vertailevat ohjelmien suoritusnopeutta ja itse ohjelmoinnin tehokkuutta.
Vertailevista tutkimuksista havaitaan, että corutiinit tarjoavat jopa kymmenkertaista suoritustehon kasvua, kun verrataan kontekstinvaihdon nopeutta. Corutiineja on testattu myös mahdollisuutena korvata lukot tietokantapalvelimilla, jolloin havaitaan noin neljänkertainen suoritustehon kasvu. Lopuksi corutiineja verrattiin tiedon esihaussa eri tietorakenteilla ja niiden käytön suurin tehohyöty oli noin yhdeksän prosenttia. Ohjelmakoodin kirjoittamisen kannalta corutiinit tarjoavat intuitiivisen keinon suorittaa synkronointia. Se tarjoaa varattuja avainsanoja, joita käyttäen voidaan kyseisen funktion suoritus väliaikaisesti keskeyttää. Ohjelmoijan tehtäväksi jää määrittää piste, jossa ohjelman suoritus palautuu kyseiseen funktioon. Tämä eroaa säikeistä siten, että säikeet avaavat uuden suorituksen ja pääsäie voi tarvittaessa pysähtyä odottamaan suorituksen valmistumista. Corutiinit eivät siis tarvitse odottelua, koska ohjelman suoritus siirtyy eri funktion vastuulle.
Tämän työn tavoitteena on selvittää, kuinka C++ standardi on kehittynyt rinnakkaisen ohjelmoinnin näkökulmasta. Työ toteutettiin kirjallisuuskatsauksena. Työn alussa esitellään, kuinka rinnakkaisen ohjelmoinnin tukikirjasto on kehittynyt. Erityisenä tarkastelun kohteena ovat lisäykset ja muutokset sen alikirjastoissa. Mielenkiintoisimpana lisäyksenä havaitaan corutiinit, jotka ovat funktioita, joiden suoritus voidaan keskeyttää ja tarvittaessa käynnistää uudelleen myöhemmin. Työn loppupuolella selvitetään, mitä eroa on corutiineilla ja säikeillä ohjelman suorituksen ja kirjoittamisen kannalta. Tähän liittyen esitellään tutkimuksia, jotka vertailevat ohjelmien suoritusnopeutta ja itse ohjelmoinnin tehokkuutta.
Vertailevista tutkimuksista havaitaan, että corutiinit tarjoavat jopa kymmenkertaista suoritustehon kasvua, kun verrataan kontekstinvaihdon nopeutta. Corutiineja on testattu myös mahdollisuutena korvata lukot tietokantapalvelimilla, jolloin havaitaan noin neljänkertainen suoritustehon kasvu. Lopuksi corutiineja verrattiin tiedon esihaussa eri tietorakenteilla ja niiden käytön suurin tehohyöty oli noin yhdeksän prosenttia. Ohjelmakoodin kirjoittamisen kannalta corutiinit tarjoavat intuitiivisen keinon suorittaa synkronointia. Se tarjoaa varattuja avainsanoja, joita käyttäen voidaan kyseisen funktion suoritus väliaikaisesti keskeyttää. Ohjelmoijan tehtäväksi jää määrittää piste, jossa ohjelman suoritus palautuu kyseiseen funktioon. Tämä eroaa säikeistä siten, että säikeet avaavat uuden suorituksen ja pääsäie voi tarvittaessa pysähtyä odottamaan suorituksen valmistumista. Corutiinit eivät siis tarvitse odottelua, koska ohjelman suoritus siirtyy eri funktion vastuulle.
Kokoelmat
- Kandidaatintutkielmat [8744]