Parallella datorsystem är fysiska datorsystem, såväl som mjukvarusystem som på ett eller annat sätt implementerar parallell databehandling på många datornoder. [ett]
Om du till exempel snabbt vill sortera en array på en tvåprocessormaskin kan du dela arrayen på mitten och sortera varje halva på en separat processor. Att sortera varje halva kan ta olika lång tid, så synkronisering är nödvändig .
Idén med parallellisering av beräkningar bygger på det faktum att de flesta uppgifter kan delas upp i en uppsättning mindre uppgifter som kan lösas samtidigt. Vanligtvis kräver parallell beräkning samordning av åtgärder. Parallell beräkning finns i flera former: parallellitet på bitnivå, parallellitet på instruktionsnivå, dataparallellism och uppgiftsparallellism. Parallell beräkning har använts i många år främst inom högpresterande beräkningar, men på senare tid har intresset ökat på grund av förekomsten av fysiska restriktioner för ökningen av klockfrekvensen hos processorer. Parallell beräkning har blivit det dominerande paradigmet inom datorarkitektur , mestadels i form av flerkärniga processorer . [2]
Att skriva program för parallella system är svårare än för sekventiella system [3] , eftersom resursstrider representerar en ny klass av potentiella programvarubuggar ( buggar ), bland vilka rastillståndet är det vanligaste. Kommunikation och synkronisering mellan processer utgör ett stort hinder för att uppnå hög prestanda i parallella system. På senare år har också frågan om strömförbrukning för parallella datorer börjat övervägas. [4] Karaktären av ökningen av programmets hastighet till följd av parallellisering förklaras av Amdahls och Gustavsons lagar .
Denna form av parallellism bygger på att öka storleken på ett maskinord . Ökning av maskinordstorleken minskar antalet operationer som krävs av processorn för att arbeta på variabler vars storlek är större än maskinordstorleken. Till exempel: på en 8-bitars processor måste du lägga till två 16-bitars heltal. För att göra detta måste du först lägga till de lägre 8 bitarna av siffrorna, sedan lägga till de högre 8 bitarna och lägga till värdet på bärflaggan till resultatet av deras tillägg . Totalt 3 instruktioner. Med en 16-bitars processor kan du utföra denna operation med en enda instruktion.
Historiskt sett ersattes 4-bitars mikroprocessorer med 8-bitars, sedan dök 16-bitars och 32-bitars upp. 32-bitars processorer har länge varit standarden i daglig datoranvändning. Med tillkomsten av x86-64 -teknik började 64-bitarsprocessorer användas för dessa ändamål.
Ett datorprogram är i huvudsak en ström av instruktioner som exekveras av en processor. Men du kan ändra ordningen på dessa instruktioner, distribuera dem i grupper som kommer att köras parallellt, utan att ändra resultatet av hela programmet. Denna teknik är känd som parallellism på instruktionsnivå. Framsteg i utvecklingen av parallellism på instruktionsnivå inom datorarkitektur skedde från mitten av 1980-talet till mitten av 1990-talet.
Moderna processorer har en flerstegsinstruktionspipeline . Varje steg i pipelinen motsvarar en viss åtgärd som utförs av processorn i denna instruktion i detta skede. En processor med N pipelinesteg kan samtidigt ha upp till N olika instruktioner på olika nivåer av fullständighet. Ett klassiskt exempel på en pipelined processor är en RISC-processor med 5 steg: hämta en instruktion från minnet (IF), avkoda en instruktion (ID), exekvera en instruktion (EX), komma åt minnet (MEM), skriva resultat till register (WB) ) . Pentium 4-processorn har en pipeline med 31 steg [5] .
Vissa processorer har, förutom att använda pipelines, förmågan att utföra flera instruktioner samtidigt, vilket ger ytterligare parallellitet på instruktionsnivån. Det är möjligt att implementera denna metod med hjälp av superscalar , när instruktioner kan grupperas tillsammans för parallell exekvering (om de inte har databeroende (databeroende)). Implementeringar med explicit parallellitet på instruktionsnivå är också möjliga: VLIW och EPIC .
Huvudtanken med tillvägagångssättet baserat på dataparallellism är att en operation utförs omedelbart på alla element i datamatrisen. Olika fragment av en sådan array bearbetas på en vektorprocessor eller på olika processorer i en parallell maskin. Programmet ansvarar för distributionen av data mellan processorerna. Vektorisering eller parallellisering i detta fall utförs oftast redan vid kompileringsstadiet - översättningen av programmets källkod till maskininstruktioner. Programmerarens roll i det här fallet handlar vanligtvis om att ställa in kompilatorns vektor- eller parallella optimeringsinställningar , parallella kompileringsdirektiv och användningen av specialiserade språk för parallell beräkning.
En programmeringsstil baserad på uppgiftsparallellism innebär att en beräkningsuppgift är uppdelad i flera relativt oberoende deluppgifter och varje processor laddas av sin egen deluppgift.
Ett distribuerat OS, genom att dynamiskt och automatiskt allokera arbete till olika maskiner i systemet för bearbetning, tvingar en uppsättning nätverksanslutna maskiner att behandla information parallellt. Användaren av ett distribuerat OS har generellt sett ingen kunskap om den maskin på vilken hans arbete utförs. [6]
Ett distribuerat operativsystem existerar som ett enda operativsystem över ett datorsystem. Varje dator i ett nätverk som kör ett distribuerat operativsystem utför en del av funktionerna i detta globala operativsystem. Ett distribuerat operativsystem förenar alla datorer i ett nätverk i den meningen att de arbetar i nära samarbete med varandra för att effektivt använda alla resurser i ett datornätverk.
Arbetet med att skapa parallella datorsystem i USA och Sovjetunionen har varit intensivt sedan 1960 -talet . Utvecklingen av parallell databehandlingsteknologi och skapandet av parallella elektroniska datorsystem i USA på order av US Defense Advanced Research Projects Agency genomfördes av forskningsavdelningar vid företag och universitet: [7]
Arbetet övervakades av ARPA Computing and Information Processing Bureau vid Pentagon , Virginia , och US Air Force Research Center i Rome , New York .
I Sovjetunionen utfördes arbete av liknande karaktär av institutioner inom den statliga kommittén för radioelektronik (senare omvandlad till ministeriet för radioindustri ), försvarsministeriet och Sovjetunionens vetenskapsakademi : [8]
I början av 1970-talet, vid MIT:s laboratorium för artificiell intelligens, började Marvin Minsky och Seymour Papert utveckla en teori som de kallade " Society of Mind " som såg den biologiska hjärnan som en massivt parallell datormaskin . 1986 publicerade Minsky den populära boken The Society of Mind, där han hävdar att "hjärnans sinne bildas av många små agenter som inte har något eget sinne." [9] Teorin har försökt förklara hur det vi kallar intelligens kan vara produkten av samspelet mellan enkla delar som kallas agenter, som i sig är ointelligenta. Minsky hävdade att den största källan till idéer om "society of mind"-teorin var hans arbete med att försöka bygga en maskin som skulle sätta ihop babyblock med hjälp av en robotarm, en videokamera och en dator. [10] Teoriboken Society of Mind skrevs för allmänheten, till skillnad från de flesta av Minskys tidigare publicerade verk.
Liknande modeller (som också betraktar den biologiska hjärnan som en massivt parallell datormaskin, dvs. anser att hjärnan består av många oberoende eller halvoberoende agenter) beskrev också:
![]() | |
---|---|
I bibliografiska kataloger |