Articolo pubblicato sul n. 129 di MCmicrocomputer (Edizioni Technimedia Srl - Roma) nel maggio 1993 La tassonomia di Flynn Non si tratta di una ricetta per un gustoso aperitivo a base di cedro, ma della piu' valida (e chiara) classificazione delle macchine parallele del tipo "von Neumann". Per i piu' curiosi aggiungiamo subito che il concetto di architettura parallela va anche oltre le macchine "von Neumann" come i sistemi data flow che pero' esulano dal contesto di quest'articolo. Prima di continuare, cari lettori, vorrei esplicitare la mia particolare emozione che provo nel momento stesso in cui mi accingo a scrivere questo pezzo: mi sembra di essere ritornato ai bei tempi dei miei articoli di "Appunti di Informatica", degli anni '86-'89, quanto con tanta pazienza ed altrettanto coraggio affrontavo temi di "informatica tosta" sviscerandone i concetti essenziali per la stesura di articoli sicuramente dedicati a tutti i lettori di MC e per nulla ai soli esperti. Spero solo che qualche mio "affezionato lettore" (spesso le lettere che giungono in redazione si presentano con queste due paroline magiche) del periodo sopra evidenziato si ricordi ancora qualcosa di quegli articoli ai quali ho dedicato sempre il massimo e continuano a rappresentare per la mia carriera di giornalista tecnico un modestissimo fiore all'occhiello. Ma torniamo a Flynn e alla sua classificazione. Iniziamo col dire che essa risale addirittura ai primordi dell'elaborazione in parallelo e piu' precisamente al 1966. Si basa fondamentalmente sui due concetti tipici delle macchine von Neumann: il flusso di istruzioni e il flusso di dati. Il modello von Neumann, per chi non lo sapesse rappresenta il tipo di calcolatore, mi si conceda il termine, piu' "normale" possibile: un "qualcosa" contenente dei dati, un altro "qualcosa" contenente un programma (una sequenza di istruzioni), e un ultimo "qualcosa" in grado di eseguire le istruzioni sui dati per ottenere risultati. Tutti i personal computer finora prodotti si rifanno a tale modello, ma sono macchine von Neumann anche i supercomputer, i mainframe, le workstation e... le centraline d'iniezione elettronica dei motori, la logica di controllo e programmazione del vostro videoregistratore, nonche' quella di alcune macchine per cucire particolarmente evolute (a quest'ultime ormai manca solo la compatibilita PostScript e una porta AppleTalk...). Dicevamo, flusso istruzioni e flusso dati: a seconda della molteplicita' dell'uno o dell'altro flusso individuiamo quattro ben precise classe di architetture parallele: le macchine SISD, SIMD, MISD, MIMD. In questi quattro acronimi le "S" stanno per Single, "M" per Multiple, "I" per Instruction (nel senso di "flusso di istruzioni"), "D" per Data (nel senso di "flusso di dati"). Cosi' una macchina SISD e' un computer con flusso di istruzioni e flusso di dati singolo (Single Instruction-stream Single Data-stream) una macchina MIMD ha invece flusso dati e flusso istruzioni multiplo (Multiple Instruction-stream Multiple Data-stream). Fin qui il rigore scientifico, adesso svisceriamo alla "Appunti di Informatica". Mi aspetto, infatti, che chi non conosce gia' l'argomento ha capito poco o nulla del discorso appena fatto o comunque vorrebbe capire un po' meglio. L'accontento subito, rispondendo (a chi ha gia' capito tutto) alla prima, piu' probabile, obiezione: se un computer e' SISD (lavora con un flusso singolo di dati e un altrettanto singolo flusso di istruzioni) perche' classificarlo tra le architetture parallele? La risposta e' molto semplice: il parallelismo puo' benissimo essere presente solo all'interno del processore nel modo in cui lo stesso elabora le istruzioni. Il Macintosh che ho davanti in questo momento e' certamente una macchina SISD ma, rullo di tamburo, ha un'architettura parallela in quanto la pipeline interna al processore in pratica fa si' che in ogni istante vi siano piu' istruzioni in esecuzione, pur appartenenti allo stesso flusso. Altrettanto singolo e' il flusso dei dati in quanto il processore (unico) accede ai dati in memoria piu' o meno cosi': prendo questo dato qui, prendo quest'altro dato li', scrivo il risultato in questa determinata cella ecc. ecc. Il primo vero salto di qualita' lo incontriamo con le macchine SIMD (Single Instruction-stream, Multiple Data-stream). A questa classe appartengono i cosiddetti computer vettoriali, piu' propriamente detti "array processor". In queste macchine una istruzione puo' essere eseguita contemporaneamente su un insieme di dati: da questo, per l'appunto, la caratteristica di essere SIMD. Immaginiamo ad esempio di eseguire la somma di due vettori: il processore avra' al suo interno un'unica unita' istruzioni (che si occupa della decodifica delle stesse) piu' un certo numero di unita' esecutive capaci di lavorare in parallelo. Dovendo ad esempio effettuare la somma di due vettori (come vedete il flusso delle istruzioni e' singolo, in un ogni istante una ed una sola istruzione "entra" nel processore), le unita' esecutive riceveranno in parallelo (il flusso dati e' invece multiplo) ognuna un elemento del primo vettore, altrettanto in parallelo il corrispondente elemento del secondo vettore, per eseguirne la somma di tutti gli elementi in un colpo solo ed avere come risultato un terzo vettore. Nelle architetture MIMD, tanto i dati quanto le istruzioni vengono processati secondo flussi multipli. In ogni istante piu' istruzioni (differenti) operano parallelamente su piu' dati (differenti). E' questo il caso delle macchine multiprocessori che a loro volta si suddividono in due grosse categorie: le macchine ad ambiente globale e quelle ad ambiente locale. Nelle prime la memoria principale e' unica per tutti i processori i quali accedono a questa attraverso un ben preciso meccanismo di arbitraggio che evita collisioni sugli accessi in memoria. Nelle seconde ogni processore ha la sua memoria "privata" e colloquia con gli altri processori attraverso una struttura di interconnessione. I Transputer della INMOS, ad esempio, si prestano molto bene per le macchine ad ambiente locale essendo dotati all'interno del chip stesso di quattro link seriali per il collegamento diretto con altrettanti Transputer. In piu', mentre per le macchine a memoria unica non si puo' aumentare piu' di tanto il numero di processori poiche' oltre un certo valore l'overhead determinato dall'arbitraggio fa si' che le prestazioni peggiorino invece di migliorare, per le macchine ad ambiente locale possiamo collegare tra loro quanti processori vogliamo (anche migliaia o milioni) per costruire quelle che comunemente sono dette macchine a parallelismo massiccio. Non abbiamo parlato delle macchine MISD, le quali sono state ugualmente classificate da Flynn per motivi di simmetria, ma ben poco hanno a che fare con la realta': non si e' ancora riusciti a trovare (per la verita' non credo che qualcuno ci abbia pensato per piu' di tre minuti di seguito) una possibile applicazione di una macchina MISD. A costruirla, infatti, non ci vorrebbe nulla: il problema rimarrebbe solo "per farci cosa?". Verrebbe fuori una macchina nella quale in parallelo piu' programmi diversi tra loro elaborano lo stesso flusso di dati per ottenere, parimenti, un unico flusso di risultati. Concedo anche a voi i tre minuti di cui sopra... Per concludere questa breve carrellata sulle architetture parallele desidero sottolineare il fatto che i risultati ottenibili dalle architetture parallele sono fortemente dipendenti dalle applicazioni. Per fare calcolo vettoriale non serve una macchina a parallelismo massiccio utilizzabile solo ed esclusivamente per problemi intrinsecamente paralleli. Le macchine multiprocessori a memoria comune vanno molto bene per le applicazioni parallele in cui piu' processi diversi cooperano per portare a termine l'elaborazione su dati condivisi. Non appena ci spostiamo dai rispettivi campi di applicazione potremmo avere risultati a dir poco deludenti: inutile tentare di fare fuoristrada con una testarossa o partecipare al Gran Premio di Monza con un camper. L'unica cosa da aggiungere, a questo punto, riguarda naturalmente la possibilita' di avere architetture miste ad esempio macchine MIMD nelle quali ogni processore e' una macchina SIMD (computer multiprocessori parallelo) o semplicemente SISD ma con parallelismo interno come visto prima. In pratica "fritti misti" sempre esistiti e sempre graditi! Impaginato originale... Articolo pubblicato su www.digiTANTO.it - per ulteriori informazioni clicca qui |