Condividi tramite


Uso dei segmenti di memoria per descrivere lo spazio degli indirizzi GPU

La gestione della memoria video (VidMm) è responsabile della gestione dello spazio degli indirizzi della GPU. Prima di poter eseguire questa operazione, il driver miniport in modalità kernel deve descrivere lo spazio indirizzi della GPU in VidMm usando segmenti di memoria.

KmD crea segmenti di memoria per generalizzare e virtualizzare le risorse di memoria video. Può configurare segmenti di memoria in base ai tipi di memoria supportati dall'hardware ( ad esempio, memoria buffer di frame o apertura della memoria di sistema).

Durante l'inizializzazione del driver, il KMD deve restituire l'elenco dei tipi di segmento che descrivono come VidMm può gestire le risorse di memoria. Il KMD specifica il numero di tipi di segmento supportati e descrive ogni tipo di segmento rispondendo alle chiamate alla relativa funzione DxgkDdiQueryAdapterInfo. Il driver descrive ogni segmento usando una struttura DXGK_SEGMENTDESCRIPTOR. Per altre informazioni, vedere Inizializzazione dell'uso dei segmenti di memoria.

Successivamente, il numero e i tipi di segmenti rimangono invariati. VidMm:

  • Garantisce che ogni processo riceva una quota equa delle risorse in qualsiasi segmento specifico,

  • Gestisce tutti i segmenti in modo indipendente.

I segmenti non si sovrappongono. VidMm può quindi allocare una quantità equa di risorse di memoria video da un segmento indipendentemente dalla quantità di risorse che un'applicazione contiene da un altro segmento.

Il KMD assegna un identificatore di segmento a ognuno dei relativi segmenti di memoria. Successivamente, quando VidMm richiede di creare allocazioni per le risorse video ed eseguire il rendering di tali risorse, il KMD:

  • Identifica i segmenti che supportano la richiesta.

  • Specifica, in ordine, i segmenti che il driver preferisce usare da VidMm .

Per altre informazioni, vedere Specifica di segmenti durante la creazione di allocazioni.

Il KMD non è necessario per specificare tutte le risorse di memoria video disponibili per la GPU nei segmenti di memoria. Tuttavia, il KmD deve specificare tutte le risorse di memoria gestite da VidMm tra tutti i processi in esecuzione nel sistema. Ad esempio:

  • Un microcodice del vertex shader che implementa una pipeline di funzioni fisse può risiedere nello spazio di indirizzi GPU, ma all'esterno della memoria gestita da VidMm , ovvero non parte di un segmento. Questa configurazione è possibile perché il microcodice è sempre disponibile per tutti i processi e non è mai l'origine di conflitti tra processi.

  • Per risorse come vertex buffer, trame, destinazioni di rendering e codice shader specifico dell'applicazione, VidMm deve allocare risorse di memoria video da uno dei segmenti di memoria del driver. Questo requisito è dovuto al fatto che i tipi di risorse devono essere abbastanza disponibili per tutti i processi.

La figura seguente mostra un esempio di come un kmD può configurare segmenti di memoria dallo spazio indirizzi GPU.

Diagramma che illustra la divisione dello spazio indirizzi GPU in segmenti di memoria.

I numeri nella figura corrispondono ai segmenti di memoria seguenti:

  1. Segmento lineare accessibile dalla CPU: questo segmento è accessibile dalla CPU ed è organizzato come spazio indirizzi lineare.

  2. Segmento lineare non accessibile dalla CPU: questo segmento è organizzato come spazio indirizzi lineare, ma non è accessibile dalla CPU. Viene usato per le risorse che non richiedono l'accesso alla CPU.

  3. Segmento di apertura AGP di sola lettura: questo segmento viene usato per l'accesso in sola lettura alla memoria AGP (Porta grafica accelerata).

  4. Segmento Aperture: questo segmento viene usato per le risorse a cui si accede tramite l'apertura AGP.

Le caselle nascoste rappresentano segmenti di memoria che il KMD non espone a VidMm. La memoria video nascosta da VidMm non può essere mappata nello spazio utente o resa disponibile esclusivamente per qualsiasi processo specifico. In questo modo vengono interrotte le regole fondamentali della memoria virtuale che richiedono che tutti i processi in esecuzione nel sistema abbiano accesso a tutta la memoria.