Gestione delle eccezioni nelle CPU con problemi multipli

2

Da quanto ho letto, i VLIW eseguono le istruzioni in bundle , cioè la CPU carica un fascio di istruzioni e le invia tutte in una volta. Questo è possibile perché le istruzioni programmate del compilatore in modo tale che non ci siano dipendenze tra le istruzioni in un singolo pacchetto (su un'architettura superscalare le istruzioni da eseguire contemporaneamente sono pianificate dinamicamente dalla CPU).

Ora, supponiamo che una delle operazioni in un bundle generi un'eccezione, ad es. una divisione per zero o una lettura dal registro vuoto. Questo è facile da ragionare e può essere gestito senza molti sforzi: la CPU passa a un modello di esecuzione sequenziale, elabora l'eccezione, torna alla modalità operativa normale e continua l'esecuzione come se nulla fosse accaduto.

Esempio 1: un'eccezione in un singolo pacchetto

; pseudo-asm code
; assume, two-instruction bundles

loadint r1,#0
loadint r2,#2

; raises "divide by zero"
divideint r3,r2,r1
nop

La mia domanda è - cosa succede quando due (o forse più) istruzioni in un singolo pacchetto sollevano un'eccezione? Come la gestisce la CPU? Un'idea che ho ottenuto è che la CPU può memorizzare l'ordine di spedizione delle istruzioni e gestire tutte le eccezioni nello stesso ordine in cui sono state inviate le istruzioni che le hanno generate, quindi continuare.

Esempio due: due eccezioni in un singolo pacchetto

; pseudo-asm code
; assume, two-instruction bundles

loadint r1,#0
loadint r2,#2

; raises "divide by zero"
divideint r3,r2,r1
; raises "read from empty register (r4)"
addint r5,r3,r4

La letteratura che ho trovato discute solo il caso di una eccezione attiva o tratta altri aspetti della gestione delle eccezioni (ad esempio, le prestazioni).

    
posta Mael 09.11.2015 - 13:03
fonte

0 risposte

Leggi altre domande sui tag