Immagine: Microsoft
Microsoft ha rilasciato un nuovo aggiornamento DirectX 12 che può consentire a entrambi i processori di accedere contemporaneamente alla memoria della GPU. La funzione si chiama GPU Upload Heaps ed è disponibile in Agility SDK 1.710.0. GPU Upload Heaps è un’altra funzione che può essere utilizzata come parte di Resizable BAR per migliorare le prestazioni eliminando la necessità di copiare i dati tra CPU e GPU. Microsoft spiega che questa nuova funzionalità risolve un problema per cui le app non potevano accedere completamente al frame buffer di una discreta GPU video.
Da Microsoft:
Era tipico per una GPU discreta avere solo una piccola parte del suo frame buffer esposto sul Bus PCI. D3D ha scelto di non esporlo perché la regione di I/O per un frame buffer è solitamente di soli 256 MB, il che non è molto utile. Un problema più grande era che non è una risorsa adeguatamente virtualizzabile. Se l’app A arriva e alloca tutti i 256 MB, l’app B non sarebbe in grado di allocarne nessuno. Quindi non possiamo fornire alcuna garanzia al riguardo, a quel punto sembrava una cattiva idea esporlo alle app.
Tuttavia, ora ci sono molte GPU che supportano un registro degli indirizzi di base ridimensionabile ( noto anche come BARRA ridimensionabile). Con una barra ridimensionabile, Windows rinegozierà le dimensioni della BAR di una GPU in WDDM versione 2.0 e successive. Un altro buon motivo per cui D3D12 espone la BAR ridimensionabile è che alcuni test delle prestazioni su alcune piattaforme hanno dimostrato che i giochi funzionano meglio con la BAR ridimensionabile abilitata.”
GPU Upload Heaps non richiede altro da parte dell’utente se non l’abilitazione della barra ridimensionabile su dispositivi compatibili hardware insieme a driver aggiornati. Resizable BAR ha già mostrato guadagni impressionanti con la grafica AMD e NVIDIA sin dal suo rilascio e Intel lo consiglia per prestazioni ottimali delle sue schede grafiche Arc Alchemist. Poiché la funzione è appena stata rilasciata, ci vorrà del tempo prima che gli sviluppatori implementino l’aggiornamento DirectX 12 dopo i propri test. Gli sviluppatori devono seguire i passaggi per utilizzare GPU Upload Heaps in quanto non viene utilizzato automaticamente da DirectX ma non sembrano essere eccessivamente complicati.
Istruzioni
Crea un risorsa utilizzando D3D12_HEAP_TYPE_GPU_UPLOAD, con D3D12_CPU_PAGE_PROPERTY_UNKNOWN e D3D12_MEMORY_POOL_UNKNOWN. (Oppure D3D12_HEAP_TYPE_CUSTOM, quindi utilizzare GetCustomHeapProperties per ottenere la proprietà della pagina e il pool di memoria) Utilizzare Map per ottenere un puntatore della CPU alla risorsa e caricare i dati della CPU nella risorsa. Facoltativo (Pix): utilizza TrackWrite per notificare a Pix le modifiche alla risorsa. Utilizzare la risorsa direttamente senza copiarla in un heap predefinito.
Unisciti alla discussione per questo post sui nostri forum…