SPMD - SPMD

In informatica , SPMD ( programma singolo, dati multipli ) è una tecnica impiegata per ottenere il parallelismo ; è una sottocategoria di MIMD . Le attività vengono suddivise ed eseguite contemporaneamente su più processori con input diversi per ottenere risultati più velocemente. SPMD è lo stile più comune di programmazione parallela. È anche un prerequisito per concetti di ricerca come messaggi attivi e memoria condivisa distribuita .

SPMD contro SIMD

In SPMD, più processori autonomi eseguono contemporaneamente lo stesso programma in punti indipendenti, piuttosto che nel lockstep che SIMD o SIMT impongono su dati diversi. Con SPMD, le attività possono essere eseguite su CPU generiche ; SIMD richiede processori vettoriali per manipolare i flussi di dati. Nota che i due non si escludono a vicenda.

Memoria distribuita

SPMD di solito si riferisce alla programmazione del passaggio di messaggi su architetture di computer a memoria distribuita . Un computer a memoria distribuita è costituito da un insieme di computer indipendenti, chiamati nodi. Ogni nodo avvia il proprio programma e comunica con altri nodi inviando e ricevendo messaggi, chiamando a tale scopo routine di invio/ricezione. La sincronizzazione della barriera può essere implementata anche tramite messaggi. I messaggi possono essere inviati da una serie di meccanismi di comunicazione, come TCP/IP su Ethernet o interconnessioni specializzate ad alta velocità come Myrinet e Supercomputer Interconnect. Le sezioni seriali del programma sono implementate da un calcolo identico su tutti i nodi invece di calcolare il risultato su un nodo e inviarlo agli altri.

Al giorno d'oggi, il programmatore è isolato dai dettagli del messaggio che passa attraverso interfacce standard, come PVM e MPI .

La memoria distribuita è lo stile di programmazione utilizzato sui supercomputer paralleli, dai cluster di Beowulf locali ai più grandi cluster sul Teragrid .

Memoria condivisa

Su una macchina a memoria condivisa (un computer con più CPU che accedono allo stesso spazio di memoria), i messaggi possono essere inviati depositando il loro contenuto in un'area di memoria condivisa. Questo è spesso il modo più efficiente per programmare computer a memoria condivisa con un numero elevato di processori, specialmente su macchine NUMA , dove la memoria è locale rispetto ai processori e l'accesso alla memoria di un altro processore richiede più tempo. SPMD su una macchina a memoria condivisa è solitamente implementato da processi standard (pesanti) .

A differenza di SPMD, il multiprocessing a memoria condivisa (sia il multiprocessing simmetrico , SMP, sia l' accesso alla memoria non uniforme , NUMA) presenta al programmatore uno spazio di memoria comune e la possibilità di parallelizzare l'esecuzione facendo sì che il programma prenda percorsi diversi su processori diversi. Il programma inizia l'esecuzione su un processore e l'esecuzione si divide in un'area parallela, che viene avviata quando vengono rilevate direttive parallele . In una regione parallela, i processori eseguono un singolo programma su dati diversi. Un tipico esempio è il ciclo DO parallelo, in cui diversi processori lavorano su parti separate degli array coinvolti nel ciclo. Alla fine del ciclo, l'esecuzione è sincronizzata, solo un processore continua e gli altri aspettano. L'attuale interfaccia standard per il multiprocessing della memoria condivisa è OpenMP . Di solito è implementato da processi leggeri, chiamati thread .

Combinazione di livelli di parallelismo

I computer attuali consentono di sfruttare contemporaneamente molte modalità parallele per il massimo effetto combinato. Un programma di memoria distribuita che utilizza MPI può essere eseguito su una raccolta di nodi. Ciascun nodo può essere un computer a memoria condivisa ed essere eseguito in parallelo su più CPU utilizzando OpenMP. All'interno di ciascuna CPU, le istruzioni vettoriali SIMD (generate automaticamente dal compilatore) e l' esecuzione di istruzioni superscalari (di solito gestite in modo trasparente dalla CPU stessa), come il pipelining e l'uso di più unità funzionali parallele, vengono utilizzate per la massima velocità della singola CPU.

Storia

SPMD fu proposta nel 1983 da Michel Auguin (Università di Nizza Sophia-Antipolis) e François Larbey (Thomson / Sintra) nel computer in parallelo OPSILA e il prossimo nel 1984 da Frederica Darema a IBM per le macchine altamente parallele come la RP3 (la ricerca di IBM Parallel Processor Prototype), in una nota IBM non pubblicata. Alla fine degli anni '80, c'erano molti computer distribuiti con librerie proprietarie di scambio di messaggi. Il primo standard SPMD è stato PVM . L'attuale standard di fatto è MPI .

Le direttive parallele di Cray erano un diretto predecessore di OpenMP .

Riferimenti

  1. ^ [1]
  2. ^ M. Auguin, F. Larbey, OPSILA: un SIMD avanzato per l'analisi numerica e l'elaborazione del segnale, in Microcomputers: developments in industry, business, and education / Nono Simposio EUROMICRO su Microprocessing e Microprogrammazione, pp 311-318 Madrid, 13 settembre– 16, 1983
  3. ^ F. Darema, Modello SPMD: passato, presente e futuro , Recent Advances in Parallel Virtual Machine e Message Passing Interface: 8th European PVM/MPI Users' Group Meeting, Santorini/Thera, Grecia, 23-26 settembre 2001. Appunti della lezione in Informatica 2131, p. 1, 2001.

link esterno