Parallel computing
Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den
version , der blev gennemgået den 5. oktober 2014; checks kræver
12 redigeringer .
Parallel computing er en måde at organisere computer computing på, hvor programmer udvikles som et sæt af interagerende computerprocesser, der arbejder parallelt (samtidigt). Udtrykket omfatter alle spørgsmålene om parallelitet i programmering , såvel som skabelsen af effektive hardwareimplementeringer . Teorien om parallel computing er en del af den anvendte teori om algoritmer [1] .
Der er forskellige måder at implementere parallel computing på. For eksempel kan hver computerproces implementeres som en operativsystemproces , eller databehandlingsprocesser kan være et sæt udførelsestråde inden for en enkelt OS-proces. Parallelle programmer kan udføres fysisk enten sekventielt på en enkelt processor - alternerende på skift af eksekveringstrinene i hver beregningsproces, eller parallelt - ved at allokere en eller flere processorer (placeret i nærheden eller distribueret i et computernetværk ) til hver beregningsproces.
Den største vanskelighed ved at designe parallelle programmer er at sikre den korrekte sekvens af interaktioner mellem forskellige computerprocesser, samt koordineringen af ressourcer, der deles mellem processer.
Måder at synkronisere parallel kommunikation
I nogle samtidige programmeringssystemer er overførslen af data mellem komponenter skjult for programmøren (for eksempel ved at bruge løftemekanismen ), mens det i andre skal angives eksplicit. Eksplicitte interaktioner kan opdeles i to typer:
- Interaktion gennem delt hukommelse : på hver processor i et multiprocessorsystem lanceres en udførelsestråd , som hører til én proces. Tråde udveksler data gennem et delt hukommelsesområde for en given proces [2] . Antallet af tråde svarer til antallet af processorer. Tråde oprettes enten ved hjælp af sproget (for eksempel i Java eller C# , C++ (startende med C++11 ), C (starter med C11 )), eller ved at bruge biblioteker eksplicit (for eksempel i C/C++ ved hjælp af PThreads ), eller deklarativt (f.eks. ved hjælp af OpenMP-biblioteket), eller automatisk indbyggede compilerværktøjer (f.eks. High Performance Fortran ). Denne form for parallel programmering kræver normalt en form for kontroloptagelse ( mutexes , semaforer , monitorer ) for at koordinere tråde indbyrdes.
- Kommunikation via meddelelsesoverførsel : En enkelt-trådet proces kører på hver processor i et multiprocessorsystem og kommunikerer med andre processer, der kører på andre processorer ved hjælp af meddelelser. Processer oprettes eksplicit ved at kalde den relevante funktion af operativsystemet, og meddelelser oprettes ved hjælp af et bibliotek (f.eks. en implementering af MPI -protokollen ), eller ved hjælp af sprogværktøjer (f.eks. High Performance Fortran , Erlang eller occam ). Beskeder kan udveksles asynkront eller ved hjælp af en rendezvous-metode, hvor afsenderen blokeres, indtil dens besked er leveret. Asynkron meddelelsesoverførsel kan enten være pålidelig (med garanteret levering) eller upålidelig [3] .
Messaging-baserede parallelle systemer er ofte lettere at forstå end systemer med delt hukommelse og betragtes generelt som en overlegen metode til parallel programmering. Der er en bred vifte af matematiske teorier til undersøgelse og analyse af systemer til videregivelse af beskeder, herunder aktørmodellen og forskellige former for procesregning . Beskeder kan effektivt implementeres på symmetriske multiprocessorer både med delt sammenhængende hukommelse og uden.
Distribueret hukommelsesparallelisme og meddelelsespasserparallelisme har forskellige præstationskarakteristika. Normalt (men ikke altid) er overheaden af proceshukommelse og opgaveskiftetid lavere for systemer med meddelelsesoverførsel, men selve meddelelsen, der passerer, er mere overhead end procedurekald. Disse forskelle tilsidesættes ofte af andre faktorer, der påvirker ydeevnen.
- Hybridmetode : På distribuerede hukommelsesmultiprocessorsystemer ( DM-MIMD ), hvor hver node i systemet er en delt hukommelsesmultiprocessor ( SM-MIMD ) , kan en hybrid programmeringsmetode anvendes [4] . På hver node i systemet lanceres en multi-threaded proces, som fordeler tråde mellem processorerne i denne node. Udvekslingen af data mellem tråde på en node udføres gennem delt hukommelse, og udvekslingen af data mellem noder udføres gennem meddelelsesoverførsel. I dette tilfælde bestemmes antallet af processer af antallet af noder, og antallet af tråde bestemmes af antallet af processorer på hver node. Den hybride programmeringsmetode er mere kompliceret (den kræver en speciel omskrivning af parallelprogrammet), men den er mest effektiv til at bruge hardwareressourcerne i hver knude i multiprocessorsystemet.
I et sådant system er det naturligvis også muligt udelukkende at bruge meddelelsesoverførselsmetoden, det vil sige at køre en separat proces på hver processor i hver knude. I dette tilfælde vil antallet af processer (og tråde) være lig med antallet af processorer på alle noder. Denne metode er enklere (i et parallelt program behøver du kun at øge antallet af processer), men den er mindre effektiv, da processorerne i den samme node vil udveksle beskeder med hinanden, som om de var på forskellige maskiner
[5] .
Typiske opgaver, der tillader parallel databehandling
- map - udførelse af den samme funktion på hvert element i inputdataarrayet, opnåelse af en matrix af beregningsresultater lige i styrke
- reducere - udfører den samme funktion for at tilføje bidraget fra hvert element af input til en endelig værdi
Samtidig softwareværktøjer
- OpenMP er en applikationsgrænsefladestandard for parallelle systemer med delt hukommelse.
- POSIX Threads er en standard til implementering af tråde (tråde) af udførelse.
- Windows API - flertrådede applikationer til C++.
- PVM (Parallel Virtual Machine) giver dig mulighed for at kombinere et heterogent (men netværksforbundet) sæt computere til en fælles computerressource.
- MPI (Message Passing Interface) er en standard for meddelelsesoverførselssystemer mellem parallelle eksekveringsprocesser.
Se også
Noter
- ↑ Mikhalevich, 1989 , s. en.
- ↑ RedBook, 1999 , s. en.
- ↑ RedBook, 1999 , s. 2.
- ↑ RedBook, 1999 , s. 5.
- ↑ RedBook, 1999 , s. fire.
Litteratur
Links
Ordbøger og encyklopædier |
|
---|