Multiprocessing ( Multiprocessing , Multiprocessing , English Multiprocessing ) - användningen av ett par eller flera fysiska processorer i ett datorsystem .
En enhet kallas multiprocessor om den har två eller flera fysiska processorer .
Ett operativsystem eller program kallas multiprocessor om det kan fördela uppgifter mellan processorer (se multithreading ).
Det finns många varianter av detta koncept, och definitionen av multiprocessing kan variera beroende på sammanhanget, främst beroende på hur processorer definieras ( många kärnor i ett chip , många chips i ett paket, många paket i en systemmodul, och så vidare ).
Multiprocessing hänvisas ibland till som exekvering av flera parallella programvaruprocesser på ett system i motsats till exekvering av en enda process vid varje given tidpunkt. Men termerna multitasking eller multiprogrammering är mer lämpliga för att beskriva detta koncept, som är implementerat mestadels i mjukvara , medan multiprocessing är mer lämpligt för att beskriva användningen av flera hårdvaruprocessorer. Ett system kan inte vara både multiprocessor och multiprogrammerat, bara en av de två, eller ingetdera.
I ett multiprocessorsystem kan alla CPU:er vara lika, eller vissa kan vara reserverade för speciella ändamål. Kombinationen av designöverväganden för hårdvara och operativsystem avgör symmetrin (eller bristen på sådan) i ett givet system. Till exempel kan hårdvaru- eller mjukvaruöverväganden kräva att endast en central processor svarar på alla hårdvaruavbrott, medan allt annat arbete i systemet kan fördelas lika mellan processorerna; eller så kan exekvering av kod för privilegierat läge begränsas till endast en processor (eller en speciell processor, eller endast en processor åt gången), medan kod för icke-privilegierad läge kan exekveras på vilken kombination av processorer som helst. Ofta är flerprocessorsystem lättare att designa om sådana begränsningar införs , men de tenderar att vara mindre effektiva än system som använder alla processorer.
System som behandlar alla processorer på samma sätt kallas symmetriska multiprocessing (SMP) system. På system där alla CPU:er inte är lika, kan systemresurser delas på många sätt, inklusive asymmetrisk multiprocessing ( ASMP ), icke-uniform memory access multiprocessing (NUMA) och klustrad multiprocessing (qq.v.).
I multibearbetning kan processorer användas för att exekvera en enskild instruktionssekvens i flera sammanhang (enkel maskininstruktion , flera data eller SIMD , som ofta används i vektorbehandling), flera instruktionssekvenser i ett enda sammanhang ("multipel instruktionsström, enskild dataström " eller MISD-arkitektur , som används för redundans i feltoleranta system och ibland används för att beskriva pipelined processorer eller hyperthreading ), eller flera instruktionssekvenser i flera sammanhang ("multipel instruktionsström, multipel dataström" eller MIMD ).
Tätt kopplade multiprocessorsystem innehåller flera processorer som är anslutna på bussnivå . Dessa processorer kan ha tillgång till ett centralt delat minne (SMP eller UMA), eller kan delta i en minneshierarki med både lokalt och delat minne (NUMA). IBM p690 Regatta är ett exempel på ett kraftfullt SMP-system. Intel Xeon-processorn dominerade multiprocessormarknaden för företagsdatorer och var det enda x86 - alternativet fram till lanseringen av AMDs Opteron-processorlinje 2004. Båda raderna av processorer hade sin egen on -chip-cache , men ger tillgång till delat minne på olika sätt: Xeon-processorer genom en gemensam kanal och Opteron-processorer genom oberoende motorvägar till system-RAM.
Multiprocessor (flerkärniga) chips inkluderar mer än en processor placerad på ett enda chip och kan anses vara den mest extrema formen av tätt kopplad multiprocessing. Stordatorsystem med flera processorer är ofta starkt kopplade system.
Löst kopplade multiprocessorsystem , ofta kallade kluster , är baserade på flera fristående enkla eller dubbla datorer länkade via ett höghastighetskommunikationssystem (som Gigabit Ethernet ) . Ett Beowulf-kluster som kör Linux är ett exempel på ett flexibelt uppkopplat system.
Tätt kopplade system presterar bättre och är fysiskt mindre än flexibelt kopplade system, men har historiskt sett krävt en stor initial investering och kan avskrivas snabbt ; Noderna i ett flexibelt uppkopplat system är vanligtvis billiga datorer och kan användas som oberoende maskiner när de tas bort från klustret.
Tätt kopplade system tenderar att vara mycket mer energieffektiva än kluster. Betydande energieffektivitet uppnås genom att ha komponenterna i sådana system fördesignade för att fungera i ett visst system, medan flexibelt kopplade system ofta använder komponenter som är utformade för att fungera i en bredare klass av system.
I en dator med en enda instruktionsström och en enda dataström, bearbetar en processor instruktioner sekventiellt; varje maskininstruktion bearbetar ett dataelement. Ett exempel är von Neumann arkitektur .
I en dator med en enda instruktionsström och flera dataströmmar bearbetar en processor en ström av instruktioner, som var och en kan utföra parallella beräkningar på en uppsättning data.
SIMD multiprocessing lämpar sig väl för parallell- eller vektorbehandling, där en stor uppsättning data kan delas upp i delar som behandlas med identiska men oberoende operationer. En enda instruktionsström styr driften av multiprogrammeringsmoduler att utföra liknande manipulationer samtidigt på en potentiellt stor mängd data.
För vissa typer av datortillämpningar kan denna typ av arkitektur ge en betydande ökning av prestanda i termer av tid. Nackdelen med denna arkitektur är dock att det mesta av systemet blir inaktivt medan det körs program eller systemuppgifter som inte kan delas upp i moduler (deluppgifter) som kan bearbetas parallellt.
Dessutom måste program vara noggrant och specifikt skrivna för att kunna dra full nytta av arkitekturens möjligheter. Ofta finns det speciella optimeringskompilatorer utformade för att producera kod specifikt för användning i denna miljö. Vissa kompilatorer i den här kategorin tillhandahåller speciella konstruktioner eller tillägg för att tillåta programmerare att direkt definiera operationer som ska exekveras parallellt (till exempel DO FOR ALL -satserna i Fortran , som används på ILLIAC IV , som var en superdator med flera processorer med SIMD-arkitektur).
SIMD multiprocessing har bred tillämpning inom vissa områden, såsom datorsimuleringar , men är till liten användning i allmänna stationära och affärsapplikationer.
Multibearbetning med multipel instruktionsström och enkel dataström erbjuder främst fördelen med redundans, eftersom multiprogrammeringsmodulerna utför samma uppgifter på samma data, vilket minskar risken för felaktiga resultat om en av modulerna misslyckas. MISD-arkitekturen låter dig jämföra resultaten av beräkningar för att upptäcka fel. Förutom redundans och feltolerans har denna typ av multibearbetning få fördelar. Dessutom är det väldigt dyrt. Det ökar inte prestandan.
MIMD multiprocessing-arkitekturen är lämplig för en mängd olika uppgifter som implementerar helt oberoende och parallell exekvering av instruktioner avseende olika datamängder. Av denna anledning, och eftersom det är enkelt att implementera, dominerar MIMD multiprocessing.
Bearbetning är uppdelad i flera trådar, var och en med sitt eget processorhårdvarutillstånd, inom en enda mjukvarudefinierad process eller över flera processer. Eftersom systemet har flera trådar som väntar på att köras (system- eller användartrådar), utnyttjar denna arkitektur effektivt hårdvaruresurser.
I MIMD kan dödläge och resurskonfliktproblem uppstå eftersom trådar som försöker komma åt resurser kan kollidera på oförutsägbara sätt. MIMD kräver speciell kodning i datorns operativsystem, men kräver inga ändringar i applikationsprogram, såvida inte programmen själva använder flera trådar (MIMD är transparent för enkeltrådade program i de flesta operativsystem, om programmen i sig inte vägrar kontroll från OS). Både system- och användarprogramvara kan behöva använda programmeringskonstruktioner som semaforer för att förhindra en tråd från att störa en annan om de har en referens till samma data. Om du gör det ökar kodkomplexiteten, minskar prestandan och ökar avsevärt mängden testning som krävs, även om det vanligtvis inte är tillräckligt för att förneka fördelarna med multiprocessing.
Sådana konflikter kan uppstå på hårdvarunivå mellan processorer och bör vanligtvis lösas i hårdvara eller med en kombination av mjukvara och hårdvara.