SPMD

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 30. juni 2020; verifikation kræver 1 redigering .

I programmering er SPMD ( enkelt program, flere data ) en teknik, der bruges til at opnå parallelitet; det er en underkategori af MIMD -klassen af ​​computersystemer i Flynn-klassifikationen .

I denne kategori er opgaver adskilt og køres samtidigt på flere processorer med forskellige input for at få resultater hurtigere. SPMD er den mest almindelige stil inden for parallel programmering . [1] Det er også en forudsætning for at udforske begreber som aktive beskeder og distribueret delt hukommelse .

SPMD vs. SIMD

I SPMD udfører mange autonome processorer samtidigt det samme program fra forskellige steder (hvilket betyder sektioner af kode), og ikke i den stive sekvens, som SIMD pålægger for at behandle forskellige data. Takket være SPMD kan opgaver udføres på processorer til generelle formål . SIMD kræver vektorprocessorer til dataflowkontrol . Bemærk, at disse to metoder ikke udelukker hinanden.

Distribueret hukommelse

SPMD omtales almindeligvis som messaging- programmering for distribuerede hukommelsesarkitekturer. Distribueret hukommelse består af et sæt uafhængige computere kaldet "knuder". Hver node kører sit eget program og kommunikerer med andre noder ved at sende og modtage beskeder ved at kalde sende og modtage procedurer for at gøre det. Barrieresynkronisering kan implementeres ved hjælp af beskeder. Meddelelser kan sendes ved hjælp af kommunikationsmekanismer såsom TCP/IP (for Ethernet ) eller specialiserede højhastighedsforbindelser såsom Myrient og Supercomputer Interconnect. Sekventielle sektioner (sektioner) af programmer implementeres ved de samme beregninger på alle noder, og ikke ved at beregne resultatet på én node og sende det til andre.

I øjeblikket er programmøren isoleret fra detaljerne i meddelelsesoverførsel via standardgrænseflader såsom PVM og MPI .

Distribueret hukommelse er en programmeringsstil, der bruges på parallelle supercomputere, fra Beowulf - hjemmeklynger til de største TeraGrid-klynger.

Delt hukommelse

På en delt hukommelsesmaskine (en computer med flere processorer , der har adgang til en enkelt hukommelse), kan beskeder sendes ved midlertidigt at gemme deres indhold i et delt hukommelsesområde. Denne metode er ofte mest effektiv for maskiner med delt hukommelse med et stort antal processorer, især for NUMA - maskiner (non-uniform memory access), hvor hukommelsen er lokal for processoren, og det tager længere tid at få adgang til en anden processors hukommelse. Delt hukommelse SPMD implementeres generelt gennem almindelige OS - processer .

I modsætning til SPMD giver delt hukommelse multiprocessing , også kaldet symmetrisk multiprocessing (SMP), muligheden for at parallelisere eksekvering ved at have en uafhængig applikationsudførelsessti på hver processor, der bruger delt hukommelse som kommunikationsmekanisme. Programmet begynder at køre på én processor, og udførelsen er opdelt i parallelle sektioner, som er specificeret i kildekoden ved hjælp af paralleliseringsdirektiver (for eksempel erklærer et af direktiverne begyndelsen af ​​en parallel sektion i programkoden). Inde i parallelsektionen udfører processorerne det samme program, men med forskellige data. Et typisk eksempel er en parallel DO-løkke, hvor forskellige processorer behandler separate dele af det array, der er involveret i løkken. I slutningen af ​​cyklussen synkroniseres udførelsessektionerne, hvorefter kun én processor fortsætter med at arbejde, mens resten venter. I øjeblikket er standardgrænsefladen for et multiprocessorsystem med delt hukommelse OpenMP . Det er normalt implementeret ved hjælp af lette processer kaldet tråde .

Kombination af samtidighedsniveauer

Moderne computere giver dig mulighed for at bruge flere parallelle tilstande på samme tid for at opnå den maksimale samlede effekt. Delt hukommelsesprogrammer, der bruger MPI , kan køre samtidigt på et sæt noder. Hver node kan være en computer med delt hukommelse og udføre beregninger på flere processorer parallelt ved hjælp af OpenMP. For at opnå maksimal hastighed med en enkelt processor, bruges SIMD vektorinstruktioner (normalt genereret automatisk af compileren) og superskalar udførelse (normalt behandlet transparent af processoren selv), såsom pipelining og brug af flere parallelle funktionsblokke.

Historie

SPMD blev foreslået i 1984 af Frederick Durham hos IBM til højtydende parallelle maskiner [2] såsom RP3 (IBM Research Parallel Processor Prototype) i et upubliceret kontorbrev. [3] I slutningen af ​​1980'erne var der mange distribuerede computere med proprietære meddelelsesoverførselsbiblioteker. Den første SPMD-standard var PVM. I øjeblikket er de facto-standarden MPI. Cray parallelle direktiver var den direkte forløber for OpenMP.

Noter

  1. enkelt program flere data (downlink) . Dato for adgang: 23. januar 2013. Arkiveret fra originalen 5. februar 2013. 
  2. Euromicro-kalender  // Mikrobehandling og 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-model: fortid, nutid og fremtid , Seneste fremskridt i Parallel Virtual Machine and Message Passing Interface: 8th European PVM/MPI User's Group Meeting, Santorini/Thera, Grækenland, 23.-26. september 2001. Lecture Notes i datalogi 2131, s. 1, 2001.