Esecuzione di istruzioni in parallelo per un calcolatore digitale

Esecuzione di istruzioni in parallelo per un calcolatore digitale

Esecuzione di istruzioni in parallelo per un calcolatore digitale

L’obbiettivo primario dei progettisti dei calcolatori è stato sempre, fin dagli albori dell’informatica, quello di rendere i calcolatori quanto più veloci possibile: a tal proposito, ci si rese conto subito che le accelerazioni ottenibili tramite un miglioramento dell’hardware sono comunque limitate; ad esempio, le leggi della fisica dicono che  niente può andare più veloce della luce (cioè circa 30 cm per ns   nel vuoto e 20 cm in un filo di rame), il che comporta che, per realizzare  un calcolatore con un tempo di esecuzione di 1 ns per istruzione, la distanza totale su  cui il segnale elettrico può viaggiare, all’interno della CPU (central processing unit), verso la memoria e di ritorno dalla memoria, non può essere maggiore di 20 cm; in poche  parole,  calcolatori molto veloci devono anche essere molto  piccoli.

Non basta però dire che minori dimensioni equivalgono a  maggiori velocità:  infatti, i calcolatori veloci producono più calore di quelli lenti, per cui la riduzione delle dimensioni complica i meccanismi di dissipazione del calore. Proprio per  questo, alcuni supercalcolatori sono immersi nel freon liquido, usato come liquido di raffreddamento, per riuscire a trasferire all’esterno il calore il più velocemente possibile.

Sulla scorta di queste ed altre considerazioni relative ai vincoli fisici di realizzazione dei calcolatori, si è pensato che, al posto di costruire un’unica CPU ad alta velocità, si potrebbe costruire una macchina con molte ALU (unità aritmetica e logica) più lente (e quindi  più economiche e facili da realizzare) o perfino con diverse CPU complete, da  collegare e far funzionare in modo da ottenere la stessa potenza di calcolo ma ad un costo  minore. Si parla in questo caso genericamente di macchine parallele; vogliamo dare dei cenni ad alcune tecniche di realizzazione di questo tipo di macchine.

In primo luogo, le macchine parallele possono essere divise in tre categorie, a seconda di quanti flussi di istruzioni e di dati (esecuzione di istruzioni in parallelo) sono presenti in esse  (classificazione di Flynn):

  • macchine SISD (Single Instruction Single Data): flusso di istruzioni unico e flusso di dati unico;
  • macchine SIMD (Single Instruction Multiple Data): flusso di istruzioni unico e flusso di dati multiplo;
  • macchine MISD (Multiple Instruction Single Data): flusso di istruzioni multiplo e flusso di dati singolo;
  • macchine MIMD (Multiple Instruction Multiple Data): flusso di istruzioni multiplo e flusso di dati multiplo (le più utilizzate per efficienza).

La macchina tradizionale di Von Neumann è ovviamente di tipo SISD: essa ha un unico flusso di istruzioni (cioè un unico programma) eseguito da una CPU ed ha poi un’unica memoria che contiene i dati usati dal programma; la  prima  istruzione viene presa dalla memoria e poi eseguita, dopodiché si passa al prelievo ed alla esecuzione dell’istruzione successiva e così  via fino al termine del programma.

Si tratta perciò di un modello prettamente sequenziale. Nonostante questo, anche in un simile modello è possibile avere un limitato grado di parallelismo: infatti, si  può tentare di prelevare una nuova istruzione e cominciare ad eseguirla prima che quella attualmente in esecuzione sia completata. Ad esempio, il calcolatore CDC  6600 ed alcuni dei suoi successori erano dotati di unità funzionali multiple (ALU specializzate), ognuna delle quali poteva eseguire una sola operazione ad alta velocità.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *