Parallell beräkning
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 5 oktober 2014; kontroller kräver
12 redigeringar .
Parallell beräkning är ett sätt att organisera datorberäkning , där program utvecklas som en uppsättning interagerande beräkningsprocesser som arbetar parallellt (samtidigt). Termen omfattar alla frågor om parallellitet i programmering , såväl som skapandet av effektiva hårdvaruimplementationer . Teorin för parallell beräkning är en del av den tillämpade teorin om algoritmer [1] .
Det finns olika sätt att implementera parallell beräkning. Till exempel kan varje beräkningsprocess implementeras som en operativsystemprocess , eller så kan beräkningsprocesser vara en uppsättning exekveringstrådar inom en enda OS-process. Parallella program kan exekveras fysiskt antingen sekventiellt på en enda processor - alternerande i sin tur exekveringsstegen för varje beräkningsprocess, eller parallellt - allokera en eller flera processorer (placerade i närheten eller distribuerade i ett datornätverk ) till varje beräkningsprocess.
Den största svårigheten med att utforma parallella program är att säkerställa den korrekta sekvensen av interaktioner mellan olika beräkningsprocesser, såväl som koordineringen av resurser som delas mellan processer.
Sätt att synkronisera parallell kommunikation
I vissa samtidiga programmeringssystem döljs överföringen av data mellan komponenter för programmeraren (till exempel genom att använda löftemekanismen ), medan det i andra måste anges uttryckligen. Explicita interaktioner kan delas in i två typer:
- Interaktion genom delat minne : på varje processor i ett multiprocessorsystem startas en exekveringstråd som tillhör en process. Trådar utbyter data genom ett delat minnesområde för en given process [2] . Antalet trådar motsvarar antalet processorer. Trådar skapas antingen med hjälp av språket (till exempel i Java eller C# , C++ (börjar med C++11 ), C (börjar med C11 )), eller genom att explicit använda bibliotek (till exempel i C/C++ med PThreads ), eller deklarativt (till exempel genom att använda OpenMP-biblioteket), eller automatiskt inbyggda kompileringsverktyg (till exempel High Performance Fortran ). Denna typ av parallell programmering kräver vanligtvis någon form av kontrollinfångning ( mutexes , semaforer , monitorer ) för att koordinera trådar sinsemellan.
- Kommunikation via meddelandeöverföring : En enkeltrådad process körs på varje processor i ett multiprocessorsystem och kommunicerar med andra processer som körs på andra processorer med hjälp av meddelanden. Processer skapas explicit genom att anropa lämplig funktion i operativsystemet, och meddelanden skapas med hjälp av ett bibliotek (till exempel en implementering av MPI- protokollet ), eller med hjälp av språkverktyg (till exempel High Performance Fortran , Erlang eller occam ). Meddelanden kan utbytas asynkront eller med en rendezvous-metod, där avsändaren blockeras tills dess meddelande levereras. Asynkron meddelandeöverföring kan vara antingen tillförlitlig (med garanterad leverans) eller opålitlig [3] .
Meddelandebaserade parallella system är ofta lättare att förstå än system med delat minne och betraktas generellt som en överlägsen metod för parallell programmering. Det finns en mängd olika matematiska teorier för studier och analys av system för meddelandeförmedling, inklusive aktörsmodellen och olika typer av processkalkyler . Meddelanden kan effektivt implementeras på symmetriska multiprocessorer både med delat koherent minne och utan det.
Distribuerad minnesparallellism och meddelandeöverförande parallellism har olika prestandaegenskaper. Vanligtvis (men inte alltid) är overheaden för processminne och uppgiftsväxlingstiden lägre för system med meddelande som skickas, men meddelandet som skickas i sig är mer overhead än proceduranrop. Dessa skillnader åsidosätts ofta av andra faktorer som påverkar prestandan.
- Hybridmetod : På distribuerade minnesmultiprocessorsystem ( DM-MIMD ), där varje nod i systemet är en multiprocessor med delat minne ( SM-MIMD ), kan en hybridprogrammeringsmetod användas [4] . På varje nod i systemet startas en flertrådad process, som fördelar trådar mellan processorerna i denna nod. Utbytet av data mellan trådar på en nod utförs genom delat minne, och utbytet av data mellan noder utförs genom meddelandeöverföring. I det här fallet bestäms antalet processer av antalet noder, och antalet trådar bestäms av antalet processorer på varje nod. Hybridprogrammeringsmetoden är mer komplicerad (det kräver en speciell omskrivning av det parallella programmet), men det är mest effektivt att använda hårdvaruresurserna för varje nod i multiprocessorsystemet.
Naturligtvis är det i ett sådant system också möjligt att enbart använda meddelandeöverföringsmetoden, det vill säga att köra en separat process på varje processor i varje nod. I det här fallet kommer antalet processer (och trådar) att vara lika med antalet processorer på alla noder. Denna metod är enklare (i ett parallellt program behöver du bara öka antalet processer), men det är mindre effektivt, eftersom processorerna i samma nod kommer att utbyta meddelanden med varandra som om de var på olika maskiner
[5] .
Typiska uppgifter som tillåter parallell beräkning
- map - utförande av samma funktion på varje element i indatamatrisen, erhåller en matris med beräkningsresultat lika i effekt
- reducera - kör samma funktion för att lägga till bidraget från varje element i inmatningen till ett slutligt värde
Samtidighetsprogramvaruverktyg
- OpenMP är en applikationsgränssnittsstandard för parallella system med delat minne.
- POSIX Threads är en standard för att implementera trådar (trådar) av exekvering.
- Windows API - flertrådade applikationer för C++.
- PVM (Parallel Virtual Machine) låter dig kombinera en heterogen (men nätverksansluten) uppsättning datorer till en gemensam datorresurs.
- MPI (Message Passing Interface) är en standard för meddelandeöverföringssystem mellan parallella exekverande processer.
Se även
Anteckningar
- ↑ Mikhalevich, 1989 , sid. ett.
- ↑ RedBook, 1999 , sid. ett.
- ↑ RedBook, 1999 , sid. 2.
- ↑ RedBook, 1999 , sid. 5.
- ↑ RedBook, 1999 , sid. fyra.
Litteratur
Länkar
Ordböcker och uppslagsverk |
|
---|