Parallelle computersystemer er fysiske computersystemer, såvel som softwaresystemer, der på en eller anden måde implementerer parallel databehandling på mange computerknudepunkter. [en]
For hurtigt at sortere et array på en maskine med to processorer kan du f.eks. dele arrayet i to og sortere hver halvdel på en separat processor. Sortering af hver halvdel kan tage forskellig tid, så synkronisering er nødvendig .
Ideen om parallellisering af beregninger er baseret på, at de fleste opgaver kan opdeles i et sæt af mindre opgaver, der kan løses samtidigt. Normalt kræver parallel computing koordinering af handlinger. Parallel computing kommer i flere former: parallelitet på bitniveau, parallelitet på instruktionsniveau, dataparallelisme og opgaveparallelisme. Parallel computing har været brugt i mange år hovedsageligt i højtydende computing, men på det seneste har der været en stigning i interessen på grund af eksistensen af fysiske restriktioner på stigningen i processorernes klokfrekvens. Parallel computing er blevet det dominerende paradigme inden for computerarkitektur , for det meste i form af multi-core processorer . [2]
At skrive programmer til parallelle systemer er vanskeligere end for sekventielle systemer [3] , da ressourcestrid repræsenterer en ny klasse af potentielle softwarefejl ( bugs ), blandt hvilke racetilstanden er den mest almindelige. Kommunikation og synkronisering mellem processer udgør en stor barriere for at opnå høj ydeevne i parallelle systemer. I de senere år er spørgsmålet om strømforbrug af parallelle computere også begyndt at blive overvejet. [4] Karakteren af stigningen i programmets hastighed som følge af parallelisering er forklaret af lovene fra Amdahl og Gustavson .
Denne form for parallelisme er baseret på at øge størrelsen af et maskinord . Forøgelse af maskinordstørrelsen reducerer antallet af operationer, som kræves af processoren for at operere på variabler, hvis størrelse er større end maskinordstørrelsen. For eksempel: på en 8-bit processor skal du tilføje to 16-bit heltal. For at gøre dette skal du først tilføje de nederste 8 bits af tallene, derefter tilføje de højere 8 bits og tilføje værdien af bæreflaget til resultatet af deres tilføjelse . I alt 3 instruktioner. Med en 16-bit processor kan du udføre denne handling med en enkelt instruktion.
Historisk set blev 4-bit mikroprocessorer erstattet af 8-bit, derefter dukkede 16-bit og 32-bit op. 32-bit processorer har længe været standarden i hverdagscomputere. Med fremkomsten af x86-64 -teknologi begyndte 64-bit-processorer at blive brugt til disse formål.
Et computerprogram er i bund og grund en strøm af instruktioner, der udføres af en processor. Men du kan ændre rækkefølgen af disse instruktioner, fordele dem i grupper, der vil blive udført parallelt, uden at ændre resultatet af hele programmet. Denne teknik er kendt som parallelisme på instruktionsniveau. Fremskridt i udviklingen af parallelisme på instruktionsniveau i computerarkitektur skete fra midten af 1980'erne til midten af 1990'erne.
Moderne processorer har en flertrins instruktionspipeline . Hvert trin i pipelinen svarer til en bestemt handling udført af processoren i denne instruktion på dette trin. En processor med N pipeline-trin kan samtidigt have op til N forskellige instruktioner på forskellige niveauer af fuldstændighed. Et klassisk eksempel på en pipelinet processor er en RISC-processor med 5 trin: Hentning af en instruktion fra hukommelsen (IF), afkodning af en instruktion (ID), eksekvering af en instruktion (EX), adgang til hukommelse (MEM), skrivning af resultat til registre (WB) ). Pentium 4-processoren har en pipeline på 31 trin [5] .
Nogle processorer har, udover at bruge pipelines, evnen til at udføre flere instruktioner på samme tid, hvilket giver yderligere parallelitet på instruktionsniveauet. Det er muligt at implementere denne metode ved hjælp af superscalar , når instruktioner kan grupperes sammen til parallel udførelse (hvis de ikke har dataafhængigheder (dataafhængigheder)). Implementeringer ved hjælp af eksplicit parallelisme på instruktionsniveau er også mulige: VLIW og EPIC .
Hovedideen med tilgangen baseret på dataparallelisme er, at én operation udføres umiddelbart på alle elementer i dataarrayet. Forskellige fragmenter af et sådant array behandles på en vektorprocessor eller på forskellige processorer i en parallel maskine. Programmet er ansvarlig for distributionen af data mellem databehandlerne. Vektorisering eller parallelisering i dette tilfælde udføres oftest allerede på kompileringsstadiet - oversættelsen af programmets kildekode til maskininstruktioner. Programmørens rolle i dette tilfælde kommer normalt til at indstille compilerens vektor- eller parallelle optimeringsindstillinger , parallelle kompileringsdirektiver og brugen af specialiserede sprog til parallel computing.
En programmeringsstil baseret på opgaveparallelisme indebærer, at en beregningsopgave er opdelt i flere relativt uafhængige underopgaver, og hver processor indlæses af sin egen underopgave.
Et distribueret OS, ved dynamisk og automatisk at allokere arbejde til forskellige maskiner i systemet til behandling, tvinger et sæt netværksforbundne maskiner til at behandle information parallelt. Brugeren af et distribueret OS har generelt ikke kendskab til den maskine, hvorpå hans arbejde udføres. [6]
Et distribueret OS eksisterer som et enkelt operativsystem på tværs af et computersystem. Hver computer på et netværk, der kører et distribueret OS, udfører en del af funktionerne i dette globale OS. Et distribueret OS forener alle computere på et netværk i den forstand, at de arbejder tæt sammen med hinanden for effektivt at bruge alle ressourcerne i et computernetværk.
Arbejdet i retning af at skabe parallelle computersystemer i USA og USSR har været intensivt siden 1960'erne . Udviklingen af parallel databehandlingsteknologi og skabelsen af parallelle elektroniske computersystemer i USA efter ordre fra US Defense Advanced Research Projects Agency blev udført af forskningsafdelinger i virksomheder og universiteter: [7]
Arbejdet blev overvåget af ARPA Computing and Information Processing Bureau ved Pentagon , Virginia , og US Air Force Research Center i Rom , New York .
I Sovjetunionen blev arbejde af lignende karakter udført af institutioner inden for Statskomitéen for Radioelektronik (senere omdannet til Ministeriet for Radioindustri ), Forsvarsministeriet og USSR's Videnskabsakademi : [8]
I begyndelsen af 1970'erne, på MIT's Artificial Intelligence Laboratory, begyndte Marvin Minsky og Seymour Papert at udvikle en teori, de kaldte " Society of Mind ", der så den biologiske hjerne som en massivt parallel computermaskine . I 1986 udgav Minsky den populære bog The Society of Mind, hvori han argumenterer for, at "hjernens sind er dannet af mange små agenter, der ikke har deres eget sind." [9] Teorien har forsøgt at forklare, hvordan det, vi kalder intelligens, kan være et produkt af samspillet mellem simple dele kaldet agenter, som i sig selv er uintelligente. Minsky hævdede, at den største kilde til ideer om "society of mind"-teorien var hans arbejde med at bygge en maskine, der kunne samle babyblokke ved hjælp af en robotarm, et videokamera og en computer. [10] Society of Mind-teoribogen blev skrevet til den brede offentlighed, i modsætning til det meste af Minskys tidligere offentliggjorte værker.
Lignende modeller (som også betragter den biologiske hjerne som en massivt parallel computermaskine, dvs. betragter hjernen som bestående af mange uafhængige eller semi-uafhængige agenter) er også beskrevet:
Ordbøger og encyklopædier | |
---|---|
I bibliografiske kataloger |