Symmetrisk multiprocessing ( eng. symmetric multiprocessing , forkortet SMP ) - arkitektur af multiprocessorcomputere , hvor to eller flere identiske processorer med sammenlignelig ydeevne er forbundet på en ensartet måde til delt hukommelse (og perifere enheder) og udfører de samme funktioner (hvorfor, i faktisk kaldes systemet symmetrisk ) [1] . På engelsk kaldes SMP-systemer også for tæt koblede multiprocessorer [2] , da processorer i denne klasse af systemer er tæt forbundet med hinanden gennem en fælles bus .og har lige adgang til alle computersystemressourcer (hukommelse og I/O-enheder) og administreres alle af én kopi af operativsystemet .
I Flynns taksonomi hører SMP-maskiner til klassen SM-MIMD- maskiner. De fleste multiprocessorsystemer bruger i dag SMP-arkitekturen.
SMP-systemer gør det muligt for enhver processor at arbejde på enhver opgave, uanset hvor i hukommelsen dataene til den pågældende opgave er gemt - med korrekt understøttelse af operativsystemet kan SMP-systemer nemt flytte opgaver mellem processorer og effektivt fordele belastningen.
Forskellige SMP-systemer forbinder processorer med delt hukommelse på forskellige måder. Den enkleste og billigste fremgangsmåde er en systembusforbindelse [ 3 ] [4] . I dette tilfælde kan kun én processor få adgang til hukommelsen på et givet tidspunkt, hvilket sætter en betydelig grænse for antallet af processorer, der understøttes i sådanne systemer. Jo flere processorer, jo større belastning på den delte bus, jo længere skal hver processor vente, indtil bussen er fri til at få adgang til hukommelsen. Faldet i den samlede ydeevne af et sådant system med en stigning i antallet af processorer sker meget hurtigt, så normalt i sådanne systemer overstiger antallet af processorer ikke 2-4. Et eksempel på SMP-maskiner med denne måde at forbinde processorer på er alle entry-level multiprocessor-servere.
Den anden måde at forbinde processorer på er gennem en switchet forbindelse (tværstangskontakt) [3] [5] . Med en sådan forbindelse er al delt hukommelse opdelt i hukommelsesbanker, hver hukommelsesbank har sin egen bus, og processorerne er forbundet til alle busser og har adgang til enhver af hukommelsesbankerne gennem dem. En sådan forbindelse er mere kompleks i kredsløb, men den tillader processorer at få adgang til delt hukommelse på samme tid. Dette giver dig mulighed for at øge antallet af processorer i systemet op til 8-16 uden et mærkbart fald i den samlede ydeevne. Et eksempel på sådanne SMP-maskiner er RS/6000 multiprocessor-arbejdsstationer.
SMP er den nemmeste og mest omkostningseffektive måde at skalere et computersystem på: ved at øge antallet af processorer. Programmering er også enkel: Brug af tråde og relaterede mekanismer til at udveksle data mellem dem gennem delte variabler i hukommelsen.
SMP bruges ofte i videnskab, industri og erhvervsliv, hvor software er specielt designet til multi-threaded udførelse. Samtidig er de fleste forbrugerprodukter, såsom teksteditorer og computerspil, skrevet på en sådan måde, at de ikke kan udnytte styrkerne ved SMP-systemer. I tilfælde af spil skyldes det ofte, at optimering af programmet til SMP-systemer vil føre til ydeevnetab, når man arbejder på enkeltprocessor-systemer, som indtil for nylig optog en stor del af pc- markedet . (Moderne multi-core processorer er blot endnu en hardwareimplementering af SMP.) På grund af karakteren af forskellige programmeringsmetoder, for at opnå maksimal ydeevne, vil separate designs være påkrævet for at understøtte en enkelt single-core processor og SMP-systemer. Alligevel opnår programmer, der kører på SMP-systemer, ringe ydeevne, selvom de er skrevet til enkeltprocessorsystemer. Dette skyldes, at hardwareafbrydelser , som normalt pauser udførelsen af et program, der skal behandles af kernen, kan behandles på en fri processor (processorkerne). Effekten i de fleste applikationer er ikke så meget et præstationsboost, men en følelse af, at programmet kører mere smidigt. I nogle applikationsprogrammer (især: softwarekompilere og nogle distribuerede computerprojekter ) vil ydelsesforøgelsen være næsten direkte proportional med antallet af yderligere processorer.
Fejlen i en processor får hele systemet til at fungere og kræver en genstart af hele systemet for at deaktivere den fejlbehæftede processor. Fejlen i en processorkerne resulterer ofte i svigt af hele multi-core processoren, hvis multi-core processoren ikke er udstyret med indbygget beskyttelse, der deaktiverer den fejlbehæftede processorkerne og herigennem tillader sunde processorkerner at fortsætte med at fungere normalt .
Med en stigning i antallet af processorer stiger kravet til båndbredden på hukommelsesbussen mærkbart. Dette sætter en grænse for antallet af processorer i SMP-arkitekturen. Moderne SMP-systemer tillader effektiv drift med 16 processorer.
Enhver moderne processor er udstyret med en multi-level cache til hurtigere hentning af data og maskininstruktioner fra hovedhukommelsen, som er langsommere end processoren. I et multiprocessorsystem reducerer tilstedeværelsen af cachehukommelse i processorer belastningen på den fælles bus eller på opkaldsforbindelsen, hvilket har en meget gunstig effekt på systemets overordnede ydeevne. Men da hver processor er udstyret med sin egen individuelle cache-hukommelse, er der fare for, at cache-hukommelsen på én processor får en variabel værdi, der er forskellig fra, hvad der er gemt i hovedhukommelsen og i en anden processors cache-hukommelse. Forestil dig, at processoren ændrer værdien af en variabel i sin cache, og en anden processor anmoder om denne variabel fra hovedhukommelsen, og den (den anden processor) vil modtage en ugyldig værdi for variablen. Eller f.eks. skriver I/O-undersystemet en ny værdi af en variabel til hovedhukommelsen, og den forældede er stadig i processorcachen. Løsningen på dette problem er betroet cache -kohærensprotokollen, som er designet til at sikre sammenhæng ("kohærens") af alle processorers cache og hovedhukommelse uden tab af den samlede ydeevne [6] .
SMP-understøttelse skal være indbygget i operativsystemet, ellers vil de ekstra processorer være inaktive, og systemet vil fungere som en enkelt processor. (Faktisk er dette problem også relevant for enkeltprocessorsystemer med multi-core processorer.) De fleste moderne operativsystemer understøtter symmetrisk multiprocessing, men i varierende grad.
Understøttelse af multiprocessing i Linux OS blev tilføjet i kerneversion 2.0 [7] og forbedret i version 2.6. Windows NT -serien af operativsystemer blev oprindeligt skabt med multiprocessor-understøttelse. ( Windows 9x SMP blev ikke understøttet.)
SMP er kun en mulighed for at bygge en multiprocessormaskine. Et andet koncept er NUMA , som giver processorer separate hukommelsesbanker. Dette gør det muligt for processorer at arbejde med hukommelse parallelt, og det kan i høj grad forbedre hukommelsesbåndbredden, når data er procesbundet (og dermed processorbundet). På den anden side øger NUMA omkostningerne ved at flytte data mellem processorer, hvilket betyder, at belastningsbalancering er dyrere. Fordelene ved NUMA er begrænset til en specifik række af opgaver, primært servere, hvor data ofte er hårdkodet til specifikke opgaver eller brugere.
Et andet koncept er asymmetrisk multiprocessing ( ASMP ), hvor individuelle specialiserede processorer bruges til specifikke opgaver, og cluster multiprocessing ( Beowulf ), hvor ikke al hukommelse er tilgængelig for alle processorer. Sådanne tilgange bruges ikke ofte (selvom højtydende 3D-chipsæt i moderne videokort kan betragtes som en form for asymmetrisk multiprocessing), mens klyngesystemer er meget udbredt til at bygge meget store supercomputere .