SPMD

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 30 juni 2020; verifiering kräver 1 redigering .

Inom programmering är SPMD ( enkelt program, flera data ) en teknik som används för att uppnå parallellism; det är en underkategori av MIMD -klassen av datorsystem i Flynn-klassificeringen .

I denna kategori är uppgifter separerade och körs samtidigt på flera processorer med olika ingångar för att få resultat snabbare. SPMD är den vanligaste stilen för parallell programmering . [1] Det är också en förutsättning för att utforska begrepp som aktiva meddelanden och distribuerat delat minne .

SPMD vs SIMD

I SPMD kör många autonoma processorer samtidigt samma program från olika ställen (vilket betyder kodavsnitt), och inte i den stela sekvens som SIMD kräver för att bearbeta olika data. Tack vare SPMD kan uppgifter utföras på processorer för allmänna ändamål . SIMD kräver vektorprocessorer för dataflödeskontroll . Observera att dessa två metoder inte utesluter varandra.

Distribuerat minne

SPMD kallas vanligtvis meddelandeprogrammering för distribuerade minnesarkitekturer. Distribuerat minne består av en uppsättning oberoende datorer som kallas "noder". Varje nod kör sitt eget program och kommunicerar med andra noder genom att skicka och ta emot meddelanden genom att anropa skicka och ta emot procedurer för att göra det. Barriärsynkronisering kan implementeras med hjälp av meddelanden. Meddelanden kan skickas med hjälp av kommunikationsmekanismer som TCP/IP (för Ethernet ) eller specialiserade höghastighetsanslutningar som Myrient och Supercomputer Interconnect. Sekventiella sektioner (sektioner) av program implementeras av samma beräkningar på alla noder, och inte genom att beräkna resultatet på en nod och skicka det till andra.

För närvarande är programmeraren isolerad från detaljerna i meddelandeförmedling via standardgränssnitt som PVM och MPI .

Distribuerat minne är en programmeringsstil som används på parallella superdatorer, från Beowulfs hemkluster till de största TeraGrid-klustren.

Delat minne

På en delad minnesmaskin (en dator med flera processorer som har åtkomst till ett enda minne) kan meddelanden skickas genom att tillfälligt lagra deras innehåll i ett delat minnesområde. Denna metod är ofta mest effektiv för delade minnesmaskiner med ett stort antal processorer, särskilt för NUMA - maskiner (non-uniform memory access) där minnet är lokalt för processorn och det tar längre tid att komma åt en annan processors minne. Delat minne SPMD implementeras vanligtvis genom vanliga OS - processer .

Till skillnad från SPMD ger multiprocessing med delat minne , även kallat symmetrisk multiprocessing (SMP), möjligheten att parallellisera exekveringen genom att ha en oberoende applikationskörningsväg på varje processor som använder delat minne som kommunikationsmekanism. Programmet börjar köras på en processor och exekveringen är uppdelad i parallella sektioner, som specificeras i källkoden med hjälp av parallelliseringsdirektiv (till exempel deklarerar ett av direktiven början av en parallell sektion i programkoden). Inuti parallellsektionen kör processorerna samma program, men med olika data. Ett typiskt exempel är en parallell DO-loop, där olika processorer bearbetar separata delar av arrayen som ingår i slingan. I slutet av cykeln synkroniseras exekveringssektionerna, varefter endast en processor fortsätter att arbeta, medan resten väntar. För närvarande är standardgränssnittet för ett multiprocessorsystem med delat minne OpenMP . Det implementeras vanligtvis med lätta processer som kallas trådar .

Kombination av samtidighetsnivåer

Moderna datorer låter dig använda flera parallella lägen samtidigt för att uppnå maximal totaleffekt. Delade minnesprogram som använder MPI kan köras samtidigt på en uppsättning noder. Varje nod kan vara en dator med delat minne och utföra beräkningar på flera processorer parallellt med OpenMP. För att uppnå maximal hastighet med en enda processor används SIMD-vektorinstruktioner (vanligtvis genererade automatiskt av kompilatorn) och superskalär exekvering (vanligtvis bearbetad transparent av processorn själv), såsom pipelining och användning av flera parallella funktionsblock.

Historik

SPMD föreslogs 1984 av Frederick Durham på IBM för högpresterande parallella maskiner [2] såsom RP3 (IBM Research Parallel Processor Prototype) i ett opublicerat kontorsbrev. [3] I slutet av 1980-talet fanns det många distribuerade datorer med proprietära meddelandeförmedlingsbibliotek. Den första SPMD-standarden var PVM. För närvarande är de facto-standarden MPI. Cray parallella direktiv var den direkta föregångaren till OpenMP.

Anteckningar

  1. enda program flera data (nedlänk) . Datum för åtkomst: 23 januari 2013. Arkiverad från originalet den 5 februari 2013. 
  2. Euromicro-kalender  // Mikrobearbetning och mikroprogrammering. — 1983-12. - T. 12 , nej. 5 . — S. 315–318 . — ISSN 0165-6074 . - doi : 10.1016/0165-6074(83)90213-2 .
  3. F. Darema, SPMD-modell: förflutna, nutid och framtid , Senaste framsteg inom parallell virtuell maskin och gränssnitt för meddelandeöverföring: 8:e Europeiska PVM/MPI-användargruppsmötet, Santorini/Thera, Grekland, 23-26 september 2001. Föreläsningsanteckningar i datavetenskap 2131, sid. 1, 2001.