Cosa significa bancario quando applicato ai registri?


13

Questa risposta a una domanda su StackOverflow su cosa significhi bancario nel contesto dei registri bancari di ARM indica che c'è un po 'di confusione sul significato di bancario quando applicato ai registri.

Cosa significa bancario per quanto riguarda i registri?

Risposte:


16

Il termine bancario viene utilizzato in due sensi diversi quando applicato ai registri.

Registri bancari per la gestione degli interrupt

Il senso che riguarda la questione StackOverflow è simile all'uso nella commutazione ( memoria) di banchi (utilizzata da alcuni processori a 8 e 16 bit) in funzione . I nomi di una raccolta di registri sono associati a una diversa raccolta di registri fisici. ARMv7 fornisce un banco aggiuntivo per 7 dei suoi 16 GPR e altri cinque banchi per il registro puntatore dello stack e il registro dei collegamenti (ARM utilizza il registro dei collegamenti per salvare il PC da utilizzare per il ritorno dall'interruzione). Itanium fornisce un banco in più per 16 dei suoi 31 GPR statici. (MIPS fornisce interi set di 31 GPR, chiamandoli "set di registri ombra".)

A differenza del cambio di banco di memoria, lo scopo principale di questo tipo di registro di banca è (in genere) non estendere l'archiviazione indirizzabile ma fornire una gestione degli interruzioni più veloce evitando la necessità di salvare i valori di registro, caricare i valori utilizzati dal gestore di interruzioni e ripristinare l'originale registrare i valori e semplificare la gestione degli interrupt.

(L'uso dello stack dell'applicazione per salvare lo stato del registro apre la possibilità di overflow della memoria allocata per questo stack, generando un'eccezione che deve quindi gestire il salvataggio dello stato in qualche modo. Peggio ancora, se la pagina di memoria immediatamente oltre il limite dello stack è scrivibile dal escalation dei privilegi del gestore degli interrupt ma non dell'applicazione, quindi l'applicazione sta effettivamente scrivendo su una pagina in cui non dispone dell'autorizzazione di scrittura. Alcuni ABI hanno evitato questo problema definendo uno o più registri come volatili tra gli interrupt. gestore per caricare un puntatore per il salvataggio dello stato senza ostruire lo stato dell'applicazione, ma a differenza dei registri bancati, tali registri volatili di interruzione definiti dal software non possono essere ritenuti invariati dal software applicativo.)

(È stato proposto di utilizzare banche di registri come finestre fisse per estendere il numero di registri disponibili, ad esempio "Aumentare il numero di registri efficaci in un processore a bassa potenza utilizzando un file di registro con finestre", Rajiv A. Ravindran et al., 2003. Si potrebbe anche notare una somiglianza con lo stack di registro utilizzato per evitare il salvataggio del registro e ripristinare l'overhead per le chiamate di funzione come in Itanium e SPARC [che utilizza il termine "finestre di registro"], sebbene questi meccanismi in genere spostino i nomi dei registri anziché scambiarli su.)

In termini di hardware, i registri bancati possono essere implementati rinominando i registri nella decodifica delle istruzioni. Per il sistema bancario relativamente complesso di ARM questo sarebbe probabilmente il meccanismo preferito. Per un sistema bancario più semplice come quello utilizzato da Itanium con una singola banca aggiuntiva con una potenza di due numeri di registri, può essere pratico incorporare la ridenominazione nell'indicizzazione del file di registro stesso. (Naturalmente, questo non sarebbe compatibile con alcune forme di ridenominazione utilizzate per supportare l'esecuzione fuori ordine.)

Riconoscendo che non si accede contemporaneamente a banchi diversi, un'ottimizzazione intelligente che utilizza questo meccanismo può ridurre l'overhead di area (limitata dal filo) di un file di registro ad alta porta utilizzando "registri 3D". (Questa tecnica è stata proposta nel contesto delle finestre di registro di SPARC - "Un file di registro tridimensionale per processori superscalari", Tremblay et al., 1995 - e una variante è stata utilizzata da Intel per SoEMT - "The Multi-Threaded, Parity-Protected File di registro di 128 parole su un processore dual-core della famiglia Itanium ", Fetzer et al., 2005.)

Attività bancarie per aumentare il numero di accessi possibili

Il secondo senso in cui il termine bancario è usato per i registri si riferisce alla suddivisione di un insieme di registri in gruppi (banche) a ciascuno dei quali è possibile accedere in parallelo. L'uso di quattro banche aumenta il numero massimo di accessi supportato da un fattore quattro, consentendo a ciascuna banca di supportare un numero inferiore di porte di accesso (riducendo l'area e il consumo di energia) per un dato conteggio effettivo degli accessi. Tuttavia, nella misura in cui gli accessi in un determinato ciclo non sono distribuiti uniformemente tra le banche, il numero massimo di accessi non sarà raggiunto. Anche con un gran numero di banche rispetto al conteggio di accesso desiderato, i conflitti bancari possono, nel peggiore dei casi, limitare il conteggio di accesso effettivo al numero di porte fornite da una singola banca.

Ci sono stati molti documenti accademici su file di registro bancario ( ricerca di Google Scholar) e sono state proposte diverse tecniche generali per ridurre l'impatto dei conflitti bancari. La tecnica più ovvia è bufferizzare le istruzioni (come avviene per l'esecuzione fuori ordine) fornendo una media statistica dei conflitti bancari. È anche possibile leggere un operando di registro prima che l'istruzione sia pronta per l'esecuzione (ad esempio, se un altro operando non è ancora pronto o un'esecuzione di un ritardo strutturale ritarda). L'assegnazione dei registri alle banche può sfruttare le informazioni sull'uso previsto per ridurre la probabilità di conflitti. (Il software può aiutare utilizzando preferibilmente i registri nel modo previsto.) Usando i nomi dei registri fisici virtuali, è possibile ritardare l'allocazione dei nomi dei registri fisici (e quindi delle banche) fino a quando il valore non viene memorizzato nel registro;

Questo tipo di operazioni bancarie viene talvolta chiamato pseudo-multiporting poiché fornisce l'illusione di un numero maggiore di porte di accesso. Questa tecnica viene comunemente utilizzata per le cache poiché la struttura fisica è spesso suddivisa in matrici di memoria separate per altri motivi.

(Un'alternativa a tale sistema bancario è la replica del file di registro. L'uso di due copie del file di registro consente a ciascuna copia di richiedere la metà del numero di porte di lettura, sebbene sia necessario lo stesso numero di porte di scrittura. Questa tecnica è stata utilizzata in POWER2 e Alpha 21264 ed è comunemente usato nei processori ad alte prestazioni.)

Sommario

Può essere utile distinguere questi due tipi di servizi bancari come servizi bancari temporali in cui la selezione bancaria è diffusa nel tempo (come i registri bancari di ARM per interruzioni rapide) e servizi bancari spaziali in cui l'accesso bancario può essere simultaneo nel tempo ma distribuito spazialmente.

L'attività bancaria temporale è in genere esposta al software e viene utilizzata per ridurre l'overhead (e la complessità) degli interrupt. (Concettualmente, la commutazione dei thread in un processore Switch-on-Event-MultiThreaded è molto simile alla gestione degli interrupt e può utilizzare meccanismi simili per ridurre le spese generali).

L'attività bancaria spaziale è meno frequentemente parte dell'ISA (sebbene Itanium richiedesse il caricamento e l'archiviazione di coppie di registri a virgola mobile per utilizzare numeri di registro pari e dispari - il che non è garantito dato l'uso della rotazione dei registri - consentendo un banale design a due banchi per fornire il extra requisiti di accesso ai file di registro) e viene utilizzato per ridurre i costi di fornitura di un numero maggiore di accessi ai registri per ciclo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.