Condividi tramite


Modello GpuMmu

Nel modello GpuMmu , l'unità di elaborazione grafica (GPU) ha una propria unità di gestione della memoria (MMU) che converte gli indirizzi virtuali GPU per processo in indirizzi fisici.

Ogni processo dispone di spazi indirizzi virtuali di CPU e GPU separati che usano tabelle di pagine distinte. Lo strumento di gestione della memoria video gestisce lo spazio indirizzi virtuale GPU di tutti i processi ed è responsabile dell'allocazione, della crescita, dell'aggiornamento, della residenza e della liberazione delle tabelle delle pagine. Il formato hardware delle tabelle di pagine, usato dall'MMU GPU, è sconosciuto alla gestione della memoria video ed è astratta tramite le interfacce dei driver di dispositivo . L'astrazione supporta una conversione a più livelli, inclusa una tabella di pagine a dimensione fissa e una tabella di pagina radice ridimensionabile.

Anche se la gestione memoria video è responsabile della gestione dello spazio indirizzi virtuale GPU e delle relative tabelle di pagina sottostanti, gestione memoria video non assegna automaticamente indirizzi virtuali GPU alle allocazioni. Questa responsabilità rientra nel driver in modalità utente.

Gestione memoria video offre due set di servizi per il driver in modalità utente. In primo luogo, il driver in modalità utente può allocare memoria video tramite il callback Allocate esistente e liberare tale memoria tramite il callback Deallocate esistente. Proprio come oggi, questo restituisce il driver in modalità utente un handle per un'allocazione di gestione della memoria video, che può essere gestita da un motore GPU. Tale allocazione rappresenta solo la parte fisica di un'allocazione e può essere fatto riferimento da un motore, che opera fisicamente, tramite riferimento all'elenco di allocazione.

Per i motori in esecuzione in modalità virtuale, è necessario assegnare in modo esplicito un indirizzo virtuale GPU a un'allocazione prima di accedervi virtualmente. A questo scopo, gestione memoria video offre i servizi driver in modalità utente per riservare o liberare indirizzi virtuali GPU e per eseguire il mapping di intervalli di allocazione specifici nello spazio di indirizzi virtuali GPU di un processo. Questi servizi sono molto flessibili e consentono il controllo granulare del driver in modalità utente su uno spazio indirizzi virtuale GPU di processo. Il driver in modalità utente può decidere di assegnare un indirizzo virtuale GPU molto specifico a un'allocazione oppure consentire a Gestione memoria video di selezionarne automaticamente uno, eventualmente specificando alcuni limiti di indirizzi virtuali GPU min e max. Una singola allocazione può avere più mapping di indirizzi virtuali GPU associati e i servizi vengono forniti al driver in modalità utente per implementare il contratto di risorsa riquadro.

Analogamente, in una configurazione della scheda di visualizzazione collegata, il driver in modalità utente può eseguire il mapping esplicito dell'indirizzo virtuale GPU a istanze di allocazione specifiche e scegliere per ogni mapping se il mapping deve essere autonomo o a una GPU peer specifica. In questo modello gli indirizzi virtuali CPU e GPU assegnati a un'allocazione sono indipendenti. Un driver in modalità utente può decidere di mantenerli uguali in entrambi gli spazi degli indirizzi o mantenerli indipendenti.

Gli indirizzi virtuali GPU vengono gestiti logicamente con una granularità di pagina fissa di 4 KB tramite l'interfaccia DDI. Gli indirizzi virtuali GPU possono fare riferimento alle allocazioni, che si trovano in un segmento di memoria o in una memoria di sistema. La memoria di sistema viene gestita con granularità fisica di 4 KB, mentre i segmenti di memoria vengono gestiti a 4 KB o 64 KB a scelta del driver. Tutte le allocazioni di gestione memoria video sono allineate e ridimensionate in modo che siano multiple delle dimensioni di pagina scelte dal driver.

L'accesso a un intervallo non valido di indirizzi virtuali GPU genera una violazione di accesso e la chiusura del contesto e/o del dispositivo che ha causato l'errore di accesso. Per eseguire il ripristino da un errore di questo tipo, gestione memoria video avvia una reimpostazione del motore che viene alzata di livello a un recupero TDR (Adapter Wide Timeout Detection Recovery) in caso di esito negativo.

Il modello GpuMmu è illustrato di seguito:

Diagramma che mostra il modello GpuMmu con i relativi componenti e interazioni.