Rinnakkaislaskenta
Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 5. lokakuuta 2014 tarkistetusta
versiosta . tarkastukset vaativat
12 muokkausta .
Rinnakkaislaskenta on tapa järjestää tietokonelaskentaa , jossa ohjelmia kehitetään vuorovaikutteisten laskentaprosessien joukoksi, jotka toimivat rinnakkain (samanaikaisesti). Termi kattaa kaikki ohjelmoinnin rinnakkaiskysymykset sekä tehokkaiden laitteistototeutusten luomisen . Rinnakkaislaskennan teoria on osa sovellettua algoritmien teoriaa [1] .
On olemassa useita tapoja toteuttaa rinnakkaislaskentaa. Esimerkiksi kukin laskentaprosessi voidaan toteuttaa käyttöjärjestelmäprosessina tai laskentaprosessit voivat olla sarja suoritussäikeitä yhdessä käyttöjärjestelmäprosessissa. Rinnakkaisohjelmat voidaan suorittaa fyysisesti joko peräkkäin yhdellä prosessorilla - vuorotellen kunkin laskentaprosessin suoritusvaiheita tai rinnakkain - allokoimalla yksi tai useampi prosessori (sijaitsee lähellä tai jaettu tietokoneverkkoon ) kullekin laskentaprosessille.
Suurin vaikeus rinnakkaisten ohjelmien suunnittelussa on varmistaa oikea vuorovaikutusjärjestys eri laskentaprosessien välillä sekä prosessien kesken jaettujen resurssien koordinointi.
Tapoja synkronoida rinnakkaisviestintä
Joissakin samanaikaisissa ohjelmointijärjestelmissä tietojen siirto komponenttien välillä on piilotettu ohjelmoijalta (esimerkiksi lupausmekanismin avulla ), kun taas toisissa se on määriteltävä erikseen. Eksplisiittiset vuorovaikutukset voidaan jakaa kahteen tyyppiin:
- Vuorovaikutus jaetun muistin kautta : jokaisessa moniprosessorijärjestelmän prosessorissa käynnistetään suoritussäie , joka kuuluu yhteen prosessiin. Säikeet vaihtavat tietoja tietyn prosessin jaetun muistialueen kautta [2] . Säikeiden määrä vastaa prosessorien määrää. Säikeet luodaan joko kielen avulla (esimerkiksi Java tai C# , C++ (alkaa C++11 ), C (alkaa C11 )) tai käyttämällä kirjastoja eksplisiittisesti (esim. C/C++ käyttäen PThreadsia ), tai deklaratiivisesti (esimerkiksi OpenMP-kirjaston avulla) tai automaattisesti sisäänrakennetuilla kääntäjätyökaluilla (esimerkiksi High Performance Fortran ). Tällainen rinnakkaisohjelmointi vaatii yleensä jonkinlaisen ohjauksen sieppauksen ( mutexet , semaforit , monitorit ) säikeiden koordinoimiseksi keskenään.
- Viestintä viestin välityksen kautta : Yksisäikeinen prosessi toimii moniprosessorin jokaisessa prosessorissa ja kommunikoi muiden prosessorien kanssa viestien avulla. Prosessit luodaan nimenomaisesti kutsumalla käyttöjärjestelmän asianmukainen toiminto, ja viestit luodaan kirjaston (esimerkiksi MPI -protokollan toteutuksen ) tai kielityökalujen (esim. High Performance Fortran , Erlang tai occam ) avulla. Viestit voidaan vaihtaa asynkronisesti tai tapaamismenetelmällä, jossa lähettäjä on estetty, kunnes hänen viestinsä on toimitettu. Asynkroninen viestien välitys voi olla joko luotettavaa (ja toimitustakuu) tai epäluotettavaa [3] .
Viestintäpohjaiset rinnakkaisjärjestelmät ovat usein helpompia ymmärtää kuin jaetun muistin järjestelmät, ja niitä pidetään yleensä ylivertaisena rinnakkaisohjelmointimenetelmänä. Viestinvälitysjärjestelmien tutkimiseen ja analysointiin on olemassa laaja valikoima matemaattisia teorioita, mukaan lukien toimijamalli ja erilaiset prosessilaskenta . Viestintä voidaan toteuttaa tehokkaasti symmetrisillä moniprosessoreilla sekä jaetulla koherentilla muistilla että ilman sitä.
Hajautetun muistin rinnakkaisuudella ja viestien välitysrinnakkaisuudella on erilaiset suorituskykyominaisuudet. Yleensä (mutta ei aina) prosessimuistin ja tehtävien vaihtoajan yläraja on pienempi järjestelmissä, joissa sanoma välitetään, mutta itse sanoman välitys on enemmän ylimääräistä kuin prosessikutsut. Muut suorituskykyyn vaikuttavat tekijät ohittavat usein nämä erot.
- Hybridimenetelmä : Hajautetun muistin moniprosessorijärjestelmissä ( DM-MIMD ), joissa järjestelmän jokainen solmu on jaetun muistin moniprosessori ( SM-MIMD ), voidaan käyttää hybridiohjelmointimenetelmää [4] . Järjestelmän jokaisessa solmussa käynnistetään monisäikeinen prosessi, joka jakaa säikeet tämän solmun prosessorien välillä. Datan vaihto solmun säikeiden välillä tapahtuu jaetun muistin kautta ja tiedonvaihto solmujen välillä sanomanvälityksellä. Tässä tapauksessa prosessien lukumäärä määräytyy solmujen lukumäärän mukaan, ja säikeiden lukumäärä määräytyy kunkin solmun prosessorien lukumäärän mukaan. Hybridiohjelmointimenetelmä on monimutkaisempi (se vaatii erityistä rinnakkaisohjelman uudelleenkirjoittamista), mutta se on tehokkain moniprosessorijärjestelmän kunkin solmun laitteistoresurssien käytössä.
Tietysti tällaisessa järjestelmässä on myös mahdollista käyttää yksinomaan sanomanvälitysmenetelmää, eli ajaa erillinen prosessi kunkin solmun jokaisella prosessorilla. Tässä tapauksessa prosessien (ja säikeiden) määrä on sama kuin prosessorien lukumäärä kaikissa solmuissa. Tämä menetelmä on yksinkertaisempi (rinnakkaisohjelmassa sinun tarvitsee vain lisätä prosessien määrää), mutta se on vähemmän tehokas, koska saman solmun prosessorit vaihtavat viestejä keskenään ikään kuin ne olisivat eri koneissa
[5] .
Tyypillisiä tehtäviä, jotka mahdollistavat rinnakkaislaskennan
- kartta - saman toiminnon suorittaminen jokaisessa syöttödatataulukon elementissä, jolloin saadaan laskentatulosten joukko, joka on yhtä tehokas
- vähentää - saman toiminnon suorittaminen lisätäksesi syötteen kunkin elementin panoksen yhteen lopulliseen arvoon
Concurrency Software Tools
- OpenMP on sovellusrajapintastandardi jaetun muistin rinnakkaisjärjestelmille.
- POSIX Threads on standardi suoritussäikeiden (säikeiden) toteuttamiseen.
- Windows API - monisäikeiset sovellukset C++:lle.
- PVM (Parallel Virtual Machine) mahdollistaa heterogeenisen (mutta verkkoon kytketyn) tietokoneiden yhdistämisen yhteiseksi laskentaresurssiksi.
- MPI (Message Passing Interface) on standardi viestinvälitysjärjestelmille rinnakkaisten suoritusprosessien välillä.
Katso myös
Muistiinpanot
- ↑ Mihalevitš, 1989 , s. yksi.
- ↑ RedBook, 1999 , s. yksi.
- ↑ RedBook, 1999 , s. 2.
- ↑ RedBook, 1999 , s. 5.
- ↑ RedBook, 1999 , s. neljä.
Kirjallisuus
Linkit
Sanakirjat ja tietosanakirjat |
|
---|