18 / 24 · Concetto
Dipendenze, conflitti di risorse e inoltro
Confronta stalli e inoltro quando un'operazione richiede un risultato precedente.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
La sovrapposizione richiede più della conservazione dell'ordine
I calcoli indipendenti in streaming non leggono risultati precedenti, quindi le transazioni possono sovrapporsi in sicurezza. Un operatore con banco registri può invece richiedere il risultato di un'operazione precedente. Leggere un registro prima che una scrittura più vecchia diventi disponibile crea un conflitto di dati di lettura dopo scrittura. L'aritmetica può essere corretta, pur avendo campionato l'operando troppo presto.
Parti da R1=4. I0 esegue R1←R1+3 e I1 esegue R2←R1×2. In questo esempio, I0 acquisisce l'operando 4 al fronte 0, calcola 7 durante il ciclo successivo e scrive R1 al fronte 1. I1, campionando R1 al fronte 1, può vedere il vecchio valore 4, producendo R2=8. L'esecuzione sequenziale richiede R2=14. Specifica esplicitamente il comportamento di lettura e scrittura del banco registri sullo stesso fronte.
| Rimedio | Operando visto da I1 | Requisito |
|---|---|---|
| Leggere R1 precedente | 4 | Errato in questo caso |
| Attendere fino al fronte 2 | 7 | Conservare operazione e campi associati |
| Inoltrare il risultato di esecuzione | 7 subito prima del fronte 1 | Risultato disponibile e percorso conforme alla temporizzazione |
L'inoltro seleziona un risultato calcolato prima che raggiunga la memoria architetturale. La corrispondenza dei numeri di destinazione non basta: il produttore deve essere valido, scrivere effettivamente il registro e avere un risultato pronto. Con più produttori corrispondenti, scegli l'operazione più recente tra quelle precedenti. Non inoltrare mai una bolla o un'operazione annullata.
Un caricamento la cui risposta non è arrivata non può essere risolto inoltrando dati non disponibili. Ferma il consumatore conservando opcode, identificatori delle sorgenti e tag. Decidi se altri stadi indipendenti possono continuare.
I conflitti strutturali si verificano quando due stadi richiedono una sola porta di memoria nello stesso momento. Occorrono arbitraggio o risorse aggiuntive anche senza dipendenza di dati. I salti introducono conflitti di controllo che richiedono di annullare il lavoro sul percorso errato. Analizza che cosa attende ogni operazione e quale stato deve essere mantenuto. Il nostro progetto finale rimane un flusso indipendente; superarlo non dimostra la gestione delle dipendenze di una CPU.
Prova tu
Con R1=4, I0 aggiunge tre e I1 raddoppia il risultato. Confronta il risultato di I1 leggendo la vecchia memoria e usando l'inoltro corretto. Che cosa accade se I0 è un caricamento i cui dati non sono ancora disponibili?
Leggi la spiegazione
Leggere il vecchio 4 dà 8; inoltrare 7 dà 14. Un risultato di caricamento non disponibile richiede uno stallo del consumatore conservandone operazione e tag. Una corrispondenza di destinazione non giustifica l'inoltro di dati incompleti.