Criteri
di valutazione
Quando si progetta un nuovo algoritmo
per la risoluzione di particolari problemi è importante valutarne
i requisiti. I criteri di valutazione sono tanti e variano dal tempo di
esecuzione al numero dei processori utilizzati. Dal costo al tipo di tecnologia
applicata ed eventualmente se basata su specifiche architetture.
Una volta completato lo studio è opportuno confrontare le stesse
unità di misura su altri progetti per la risoluzione dello stesso
problema, in particolare se vengono usati concetti diversi come per la
programmazione parallela e quella classica sequenziale. Comunque quello
che ampiamente preme nei criteri di programmazione è il tempo di
esecuzione. Esso è definito come il tempo speso dal momento in cui
l’algoritmo parte al momento in cui esso termina. Nel caso parallelo il
tempo di esecuzione è dato dal momento in cui il primo processore
inizia il calcolo al momento in cui l’ultimo processore lo finisce.
Praticamente in questo paragrafo saranno valutati i seguenti criteri :
1) Il conteggio dei passi
2) Speedup
3) Numero dei processori
4) Costo
5) Altri tipi di misure
Per una buona analisi di algoritmo
parallelo è dunque sempre opportuno fare riferimento ai criteri
precedentemente elencati.
1)
Per condurre una analisi teorica sul tempo richiesto per risolvere problemi
computazionali si fa normalmente riferimento al calcolo del numero
di operazioni base o quello che viene definito il conteggio dei passi eseguiti
dall’algoritmo nel caso peggiore. Una definizione simile lascia pensare
ad una descrizione del numero di passi come funzione della dimensione dell’ingresso.
La definizione di ciò che costituisce un passo varia dipendentemente
dai modelli di calcolo. Generalmente vengono comunemente accettati come
operazioni base nella maggior parte dei modelli il confronto, la somma
e lo scambio fra due numeri. Per un calcolatore di tipo SISD, ognuna di
queste operazioni richiede un numero costante di unità di tempo.
Diversamente, nell’esecuzione di un algoritmo parallelo si distinguono
due tipi di passi : passi di calcolo e passi di comunicazione. I primi
rappresentano un’operazione aritmetica logica eseguita su un dato all’interno
di un processore, i secondi rappresentano il viaggio da un processore
ad un altro attraverso la memoria condivisa o la rete di comunicazione.
Esempio :
Per un algoritmo
parallelo che analizza un file con ingressi su un calcolatore
EREW SM SIMD fornito di N processori vengono richiesti logN passi
di trasmissione ed esattamente n/N passi per il confronto all’interno
di ciascun processore. Il corrispondente tempo di esecuzione
è allora t(n)=logN+n/N .
In generale i passi di calcolo e
di comunicazione non richiedono lo stesso tempo,
anzi, i passi di comunicazione di
solito dipendono dalla distanza tra i processori
che tipicamente risultano
più lunghi.
2)
Nella valutazione di un algoritmo parallelo risulta spontaneo il confronto
di questo con il migliore algoritmo che risolve lo stesso problema nel
caso sequenziale. Perciò, una buona indicazione della qualità
dell’algoritmo parallelo è il calcolo dello speedup comunemente
detto guadagno in velocità. Questo viene definito :
Tempo di esecuzione nel caso peggiore per
l’algoritmo sequenziale noto come il più
veloce per il problema
Speedup = ------------------------------------
Tempo di esecuzione valutato nel caso
peggiore per l’algoritmo parallelo
Chiaramente, più grande è
il guadagno in velocità, migliore è l’algoritmo. Un altro
tipo di misura è l’Efficienza definita da : E(n)=T1(n)/pTp(n)
avendo posto con p il numero dei processori , con T1(n) il tempo
di esecuzione dell’algoritmo parallelo su un processore che non necessariamente
è lo stesso che si ottiene nel caso sequenziale. Si è inoltre
indicato con Tp(n) il tempo per risolvere lo stesso problema con
p processori.
3)
Il numero dei processori è un altro importante criterio per valutare
un algoritmo parallelo. Conoscere tale numero è importante per l’acquisto,
la manutenzione e la messa in opera degli stessi calcolatori. Naturalmente
più alto è il numero dei processori che un algoritmo
utilizza per risolvere un problema, più costoso diventa ottenere
la soluzione.
4)
Il numero dei passi eseguiti da tutti i processori per la risoluzione del
problema relativo al caso peggiore rappresenta un altra occasione di valutazione
dell’algoritmo parallelo, il costo. Se i processori eseguono lo stesso
numero dei passi possiamo formulare tale valutazione :
costo = Tempo di esecuzione in
parallelo X numero dei processori usati
cioè sfruttando la notazione
dei punti precedenti : c(n)=p(n) t(n). Se i processori
vengono utilizzati con un numero diverso di passi allora occorre
considerare il limite superiore. Ci troviamo nel caso ottimale se
il costo di un algoritmo parallelo coincide con il limite inferiore a meno
di una costante. Questo vuol significare che l’algoritmo non può
essere migliorato. Ovvio che è sempre possibile ridurre il tempo
di esecuzione incrementando il numero dei processori. Anche in questo caso
possiamo parlare di efficienza ottenuta da :
Tempo di esecuzione nel caso peggiore
del migliore algoritmo sequenziale
noto per il problema
Efficienza = --------------------------------
Costo dell’algoritmo in parallelo
Solitamente, l’efficienza è
minore o al massimo uguale a 1 altrimenti si rischia di aver un algoritmo
sequenziale più veloce di quello in parallelo, assurdo.
5)
Da molti anni ormai i calcolatori digitali vengono prodotti con una tecnologia
che prevede l’uso di porte logiche interconnesse su pacchetti di circuiti
integrati chiamati chip. Il numero delle porte residenti su ogni chip determina
il livello di integrazione. La più usata è la VLSI cioè
integrazione su grandissima scala dove si è in grado di ospitare
un milione di porte logiche su di un chip da 1centimetro quadrato. Per
valutare perciò algoritmi paralleli per VLSI possono essere usati
altri tipi di misure :
i) L’area del processore
ii) La lunghezza delle
connessioni
iii) Il periodo
del circuito.
Praticamente queste ultime misure
sono strettamente connesse alla sezione hardware sulla progettazione
di calcolatori specifici paralleli. D’altra parte, il costo dell’hardware
è sempre stato un grosso fattore di limitazione nella sperimentazione.
i) Normalmente l’area
occupata da ciascun processore è una quantità costante. Sapere
quanti processori può ospitare un chip risulta importante durante
la progettazione. In alternativa, se il numero dei processori è
fissato, allora la dimensione del chip sarà definita dall’area totale
che i processori richiedono. Se due algoritmi richiedono lo stesso tempo
per risolvere un problema, la preferenza viene data al circuito VLSI che
occupa un’area inferiore.
ii) Anche la lunghezza
delle connessioni fra processori in una data architettura occupa un ruolo
fondamentale nella valutazione. La lunghezza si dirà regolare se
i fili di connessione sono di dimensione uguale per tutti. Se invece la
lunghezza varia in diversi moduli separati, si dirà modulare. Fissare
la lunghezza delle connessioni significa che il tempo speso da un segnale
per propagarsi da un processore all’altro è sempre costante. Se
la lunghezza dei fili cambia da una sezione della rete ad un’altra, il
tempo di esecuzione diventa una funzione della lunghezza.
iii) Il tempo speso
da un algoritmo parallelo per ricevere i suoi ingressi e, una volta finito
di calcolare, per restituire le proprie uscite viene definito periodo.
Data una sequenza di ingressi A1 , A2 , ... , An disponibili
in una coda pronti per essere trattati, allora il periodo rappresenta il
tempo speso tra il momento in cui si è iniziato a considerare Ai
e quello in cui comincia Ai+1 . Un tempo, questo, che dovrebbe essere lo
stesso per tutti gli ingressi. Evidentemente, per un algoritmo parallelo
è desiderabile avere un periodo il più piccolo possibile.
Modelli paralleli
Per la progettazione di algoritmi
adatti a funzionare su architetture parallele di tipo generale vengono
introdotti dei modelli di calcolo. Questi modelli aiutano il programmatore
nella valutazione dell’algoritmo, nella descrizione e di conseguenza nella
possibilità di farne un’accurata analisi. Idealmente questi modelli
potrebbero soddisfare dei requisiti come la semplicità e la duttilità.
Nel primo caso, il modello dovrebbe essere abbastanza semplice da permettere
un’immediata descrizione e un’analisi sulle prestazioni come la velocità,
la comunicazione e l’uso della memoria. Inoltre si rende opportuno che
il modello sia il più indipendente possibile da particolari classi
di hardware. Una buona duttilità vuol significare che gli algoritmi
paralleli sviluppati possano facilmente essere adattabili su computers
di tipo parallelo. Di conseguenza è possibile sfruttare l’analisi
elaborata in generale per la valutazione dell’algoritmo su specifiche architetture.
Per lo sviluppo e l’analisi degli algoritmi, tra i modelli più usati
si riconoscono i Direct Acyclic Graphics, Shared Memory e
Network.
Altri tipi, meno utilizzati ma non certo di minore importanza sono il Parallel
Comparison Tree, Sorting Networks, e il
Boolean Circuits.
Comunque, nella ricerca teorica si fa uso frequente dei modelli a condivisione
di memoria (Shared Memory).
|