Shared Memory Multiprocessor
Un calcolatore può essere descritto, in maniera semplificata, da un processore che esegue un programma che risiede in memoria principale.Ogni locazione della memoria principale è localizzata da un numero([0,2n-1], n bits )chiamato indirizzo(address).
Un modo abbastanza intuitivo per estendere un modello con un solo processore è aggiungere al modello più processori connessi a più moduli di memoria, con ogni processore in grado di accedere ad ogni modulo di memoria. Un'architettura con questa configurazione è chiamata shared memory.
La connessione tra processori e moduli di memoria è realizzata attraverso una rete di interconnessione.
Un sistema a memoria condivisa lavora su un singolo spazio d’indirizzamento, questo significa che ogni locazione dell’intera memoria del sistema ha un indirizzo univoco e tale indirizzo è usato da ogni processore per l’accesso alla locazione.
Usualmente gli uniprocessor incorporano il concetto di memoria virtuale. La memoria virtuale ha lo scopo di nascondere il fatto che nei sistemi reali la memoria ha una struttura gerarchica e dà illusione che esiste solo la memoria principale. Questo è possibile spostando automaticamente il contenuto delle locazioni della memoria principale verso e da disco di memoria secondaria.
Per ogni locazione di memoria si hanno due indirizzi: un indirizzo virtuale, generato dal processore, e quello reale, usato per accedere nella locazione di memoria.
Occorre effettuare una traduzione automatica tra indirizzo virtuale e reale usando un meccanismo hardware per una traduzione efficiente basato su una tabella chiamata taslation look-aside buffer(TLB).
Il meccanismo di memoria virtuale può essere esteso nel caso di multiprocessor, ogni locazione di memoria ha un indirizzo reale univoco e i processori possono usare indirizzi virtuale differenti per riferirlo.
La programmazione su queste architetture,multiprocessor a memoria condivisa, comporta di avere il codice eseguibile del programma parallelo in memoria principale in modo che ogni processore lo possa eseguire.
Dal punto di vista del programmatore i sistemi multiprocessor a memoria condivisa sono molto interessanti perché condividono i dati.
D'altro canto è notevolmente difficoltoso implementare l’hardware per un accesso veloce in memoria condivisa.
Da questa problematica si è fatta una distinzione dei sistemi multiprocessor in due modelli : NUMA, nonuniform memory access.in cui processori fanno accessi più veloci alle locazioni di memoria fisicamente vicina e accessi più lenti alle locazioni di memoria più distanti.
UMA, uniform memory access, i processi hanno tutti lo stesso tempo di accesso per tutte le locazioni di memoria.
Una cache veloce all’interno dei processori può alleviare il problema riducendo gli accessi in memoria, di contro si presenta il problema della cache-coerence
Multicomputer
Una forma alternativa di multi processore può essere realizzata connettendo i vari computer attraverso una rete di interconnessione.Ogni computer consta di un processore ed una memoria locale che non è accedibile dagli altri processori
Nel multicomputer la memoria è distribuita tra i vari computer ed ogni computer ha un proprio spazio di indirizzamento.
Un pc può accedere direttamente soltanto ad una locazione facente parte della sua memoria locale.
Un rete di interconnessione provvede al transito di messaggi tra i vari processori.
Questi messaggi posso includere informazioni utile al calcolo di altri processori.
La programmazione su multicomputer message-passing è di norma realizzata sulla divisione di un problema in parti che possono essere eseguite su processori diversi. Un problema è diviso in un numero di processi concorrenti che potrebbero essere eseguiti ciascuno da singolo un computer .
Es. se ci sono 6 processi e 6 pc, noi avremo un processo eseguito da ogni computer.
Se ci sono più processi che computer ne segue che più di un processo sarà schedulato da un singolo processore.
Per la programmazione si potrebbe usare un linguaggio parallelo, estensione del sequenziale, ma l’approccio comune è utilizzare librerie di message-passing linkata a programmmi sequenziali.
Il paradigma a scambio di messaggi nei multi processor a memoria condivisa usa la memoria per scambiare l’informazione tra processi.
Ref.
Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers. Barry Wilkinson , Michael Allen
Daniele Licari
Nessun commento:
Posta un commento