fence

fence

Assembly RISC-V Riferimento

lyszt.net tratta fence e altre istruzioni RISC-V in modo più dettagliato.

Descrizione

Le istruzioni FENCE vengono utilizzate per ordinare l'I/O dei dispositivi e gli accessi alla memoria come visti da altri hart RISC-V e da dispositivi esterni o coprocessori. Qualsiasi combinazione di input di dispositivo (I), output di dispositivo (O), letture di memoria (R) e scritture di memoria (W) può essere ordinata rispetto a qualsiasi combinazione delle stesse. In modo informale, nessun altro hart RISC-V o dispositivo esterno può osservare un'operazione nell'insieme successor successivo a un FENCE prima di un'operazione nell'insieme predecessor precedente al FENCE. memorymodel fornisce una descrizione precisa del modello di coerenza della memoria RISC-V.

Le istruzioni FENCE ordinano anche le letture e le scritture di memoria effettuate dall'hart come osservate dalle letture e scritture di memoria effettuate da un dispositivo esterno. Tuttavia, le istruzioni FENCE non ordinano le osservazioni di eventi effettuate da un dispositivo esterno utilizzando qualsiasi altro meccanismo di segnalazione.

ℹ
Un dispositivo potrebbe osservare un accesso a una posizione di memoria tramite un qualche meccanismo di comunicazione esterno, ad esempio un registro di controllo mappato in memoria che pilota un segnale di interrupt verso un controller di interrupt. Questa comunicazione è al di fuori dell'ambito del meccanismo di ordinamento FENCE e quindi le istruzioni FENCE non possono fornire alcuna garanzia su quando una modifica del segnale di interrupt sia visibile al controller di interrupt. Dispositivi specifici potrebbero fornire garanzie di ordinamento aggiuntive per ridurre il sovraccarico software, ma queste sono al di fuori dell'ambito del modello di memoria RISC-V.

L'EEI definirà quali operazioni di I/O sono possibili e, in particolare, quali indirizzi di memoria, quando acceduti da istruzioni di load e store, saranno trattati e ordinati rispettivamente come operazioni di input di dispositivo e output di dispositivo anziché come letture e scritture di memoria. Ad esempio, i dispositivi di I/O mappati in memoria saranno tipicamente acceduti con load e store non in cache che sono ordinati utilizzando i bit I e O anziché i bit R e W. Estensioni del set di istruzioni potrebbero anche descrivere nuove istruzioni di I/O che saranno anch'esse ordinate utilizzando i bit I e O in un'istruzione FENCE.

Codifica della modalità Fence

Il campo modalità FENCE fm definisce la semantica dell'istruzione FENCE. Un FENCE (con fm=0000) ordina tutte le operazioni di memoria nel suo insieme predecessore prima di tutte le operazioni di memoria nel suo insieme successore.

Un'istruzione FENCE.TSO è codificata come un'istruzione FENCE con fm=1000, predecessor=RW e successor=RW. FENCE.TSO ordina tutte le operazioni di load nel suo insieme predecessore prima di tutte le operazioni di memoria nel suo insieme successore, e tutte le operazioni di store nel suo insieme predecessore prima di tutte le operazioni di store nel suo insieme successore. Questo lascia le operazioni di store non-AMO nell'insieme predecessore di FENCE.TSO non ordinate rispetto ai load non-AMO nel suo insieme successore.

ℹ
Poiché FENCE RW,RW impone un sovrainsieme degli ordinamenti che FENCE.TSO impone, è corretto ignorare il campo fm e implementare FENCE.TSO come FENCE RW,RW.

I campi inutilizzati nelle istruzioni FENCE--rs1 and rd--sono riservati per fence a granularità più fine in future estensioni. Per la compatibilità futura, le implementazioni di base devono ignorare questi campi#, e il software standard deve azzerare questi campi. Allo stesso modo, molte impostazioni di fm e degli insiemi predecessore/successore sono anch'esse riservate per uso futuro. Le implementazioni di base devono trattare tutte queste configurazioni riservate come istruzioni FENCE (con fm=0000), e il software standard deve utilizzare solo configurazioni non riservate.

ℹ
Abbiamo scelto un modello di memoria rilassato per consentire alte prestazioni da implementazioni macchina semplici e da probabili future estensioni di coprocessori o acceleratori. Separiamo l'ordinamento di I/O dall'ordinamento R/W di memoria per evitare serializzazione non necessaria all'interno di un hart di driver di dispositivo e anche per supportare percorsi alternativi non di memoria per controllare coprocessori o dispositivi di I/O aggiunti. Le implementazioni semplici possono inoltre ignorare i campi predecessor and successor ed eseguire sempre un FENCE conservativo su tutte le operazioni.