Processore in sistemi paralleli

Negli anni '80, un processore per scopi speciali era popolare per chiamare i multicomputer Transputer. Un transputer consisteva in un core processor, una piccola memoria SRAM, un'interfaccia di memoria principale DRAM e quattro canali di comunicazione, tutti su un singolo chip. Per effettuare una comunicazione parallela con il computer, i canali sono stati collegati per formare una rete di Transputers. Ma ha una mancanza di potenza di calcolo e quindi non è in grado di soddisfare la crescente domanda di applicazioni parallele. Questo problema è stato risolto dallo sviluppo di processori RISC ed era anche economico.

Il moderno computer parallelo utilizza microprocessori che utilizzano il parallelismo a diversi livelli come il parallelismo a livello di istruzione e il parallelismo a livello di dati.

Processori ad alte prestazioni

I processori RISC e RISCy dominano l'attuale mercato dei computer paralleli.

Le caratteristiche del RISC tradizionale sono:

  • Ha poche modalità di indirizzamento.
  • Ha un formato fisso per le istruzioni, solitamente 32 o 64 bit.
  • Ha istruzioni di caricamento / memorizzazione dedicate per caricare i dati dalla memoria per registrare e memorizzare i dati dal registro alla memoria.
  • Le operazioni aritmetiche vengono sempre eseguite sui registri.
  • Utilizza pipelining.

La maggior parte dei microprocessori oggigiorno sono superscalari, ovvero in un computer parallelo vengono utilizzate più pipeline di istruzioni. Pertanto, i processori superscalari possono eseguire più di un'istruzione allo stesso tempo. L'efficacia dei processori superscalari dipende dalla quantità di parallelismo a livello di istruzione (ILP) disponibile nelle applicazioni. Per mantenere le pipeline piene, le istruzioni a livello di hardware vengono eseguite in un ordine diverso da quello del programma.

Molti microprocessori moderni utilizzano l' approccio del super pipelining . Nel super pipeline , per aumentare la frequenza di clock, il lavoro svolto all'interno di una fase della pipeline viene ridotto e il numero di fasi della pipeline viene aumentato.

Processori VLIW (Very Large Instruction Word)

Questi sono derivati ​​dalla microprogrammazione orizzontale e dall'elaborazione superscalare. Le istruzioni nei processori VLIW sono molto grandi. Le operazioni all'interno di una singola istruzione vengono eseguite in parallelo e vengono inoltrate alle unità funzionali appropriate per l'esecuzione. Quindi, dopo aver recuperato un'istruzione VLIW, le sue operazioni vengono decodificate. Quindi le operazioni vengono inviate alle unità funzionali in cui vengono eseguite in parallelo.

Processori vettoriali

I processori vettoriali sono un coprocessore per un microprocessore generico. I processori vettoriali sono generalmente registro-registro o memoria-memoria. Un'istruzione vettoriale viene recuperata e decodificata e quindi viene eseguita una determinata operazione per ciascun elemento dei vettori operandi, mentre in un normale processore un'operazione vettoriale necessita di una struttura ad anello nel codice. Per renderlo più efficiente, i processori vettoriali concatenano diverse operazioni vettoriali, cioè il risultato di un'operazione vettoriale viene inoltrato a un'altra come operando.

Caching

Le cache sono un elemento importante dei microprocessori ad alte prestazioni. Dopo ogni 18 mesi, la velocità dei microprocessori diventa il doppio, ma i chip DRAM per la memoria principale non possono competere con questa velocità. Quindi, vengono introdotte cache per colmare il divario di velocità tra il processore e la memoria. Una cache è una memoria SRAM veloce e piccola. Molte più cache vengono applicate nei processori moderni come le cache TLB (Translation Look-Apart Buffers), le cache di istruzioni e di dati, ecc.

Cache mappata diretta

Nelle cache mappate direttamente, una funzione "modulo" viene utilizzata per la mappatura uno a uno degli indirizzi nella memoria principale per le posizioni della cache. Poiché la stessa voce di cache può avere più blocchi di memoria principale mappati su di essa, il processore deve essere in grado di determinare se un blocco di dati nella cache è il blocco di dati effettivamente necessario. Questa identificazione viene eseguita memorizzando un tag insieme a un blocco della cache.

Cache completamente associativa

Una mappatura completamente associativa consente di posizionare un blocco cache in qualsiasi punto della cache. Utilizzando alcuni criteri di sostituzione, la cache determina una voce di cache in cui memorizza un blocco di cache. Le cache completamente associative hanno una mappatura flessibile, che riduce al minimo il numero di conflitti di immissione nella cache. Poiché un'implementazione completamente associativa è costosa, non vengono mai utilizzate su larga scala.

Set-associative Cache

Una mappatura insieme-associativa è una combinazione di una mappatura diretta e una mappatura completamente associativa. In questo caso, le voci della cache sono suddivise in set di cache. Come nella mappatura diretta, esiste una mappatura fissa dei blocchi di memoria su un set nella cache. Ma all'interno di un set di cache, un blocco di memoria è mappato in modo completamente associativo.

Strategie di cache

Oltre al meccanismo di mappatura, le cache richiedono anche una serie di strategie che specifichino cosa dovrebbe accadere in caso di determinati eventi. In caso di cache (set-) associative, la cache deve determinare quale blocco di cache deve essere sostituito da un nuovo blocco che entra nella cache.

Alcune strategie di sostituzione ben note sono:

  • First-In First Out (FIFO)
  • Usato meno di recente (LRU)