Come funziona la virtualizzazione della GPU

Anteprima - Virtualizzare la GPU per usare Quick Sync su un sistema Z68. Questo è Virtu.

Avatar di Tom's Hardware

a cura di Tom's Hardware

Come funziona la virtualizzazione della GPU

Alcune delle tecnologie del progetto Hydra di Lucidlogix entrano in gioco anche nel software Virtu.

Normalmente quando avviate un gioco - diciamo un titolo DirectX 11 come Metro 2033 - questo richiama alcune DLL basate sull'hardware installato. Se state usando una Radeon HD 4870, per esempio, il gioco funzionerà solo con il code path DirectX 10 o DirectX 9. Lo stesso succede in un sistema dotato solo dell'HD Graphics di Intel.

Virtu inserisce un "abstraction layer" tra l'applicazione e il sistema operativo. A seconda del tipo di software che richiede risorse, Virtu assegna il carico di lavoro all'HD Graphics o alla GPU discreta. L'abstraction layer e il manager che gestisce il carico sono figli del lavoro svolto con Hydra.

jpg

Le applicazioni che non richiedono schede video con elevate prestazioni, o che funzionano meglio sull'Intel HD Graphics, sono gestite dalla GPU integrata di Intel: sono i contenuti web, la riproduzione video e l'interfaccia Aero, anche le applicazioni ottimizzate per Quick Sync.

I giochi naturalmente girano meglio sulle schede video dedicate, e per questo Virtu li fa gestire dalla GPU dedicata. Il motore InterOp di Lucid mappa la memoria della scheda video discreta in quella della dell'HD Graphics, un passaggio necessario poiché le uscite sono connesse a quel componente.

Gestione dell'overhead

Il processo di mappatura della memoria di un componente in quella dell'altro avviene attraverso il PCI Express e ha un impatto, solitamente 1 o 1,2 millisecondi.

Facciamo un esempio. Diciamo che state giocando a Call of Duty a 100 fps. Questo significa che ogni frame viene renderizzato in 10 millisecondi. Sommate a questo valore il tempo richiesto per spostarlo dalla GPU discreta all'altra GPU per la visualizzazione e ottenete un procedimento che richiede 11,2 millisecondi, per un risultato poco superiore agli 89 frame al secondo.

Ora prendete questo numero, ma dall'altro estremo. Diciamo che state giocando a Metro 2033 a 20 frame al secondo. Ogni frame è renderizzato in 50 millisecondi. Aggiungete 1,2 millisecondi per il trasferimento di memoria e avete 51,2 millisecondi o 19,53 frame al secondo. Chiaramente più è alto il numero di frame al secondo, e meno rilevante è il peso dell'overhead.

Sebbene questi cali di frame rate non abbiano un impatto così elevato, c'è sempre un modo per evitarli - almeno in una certa misura. Abbiamo già visto la strategia di Nvidia con la tecnologia Optimus:

"Per preservare la coerenza, l'engine 3D non fa il rendering fino a quando il trasferimento mem2mem non è terminato. Quest'operazione DMA sincrona che richiede tempo può mandare il stallo l'engine 3D e avere un impatto negativo sulle prestazioni. Il nuovo Optimus Copy Engine si affida al bandwidth bidirezionale del bus PCI Express per consentire un rendering 3D simultaneo e copiare i dati di visualizzazione dalla memoria della GPU all'area di memoria principale usata come frame buffer dell'IGP".

Lucid usa analogamente una copia asincrona attraverso più buffer per trasferire i dati durante il processo di rendering. In teoria ciò significa che avrete ancora 100 fps in Call of Duty e le prestazioni risentiranno solo di un piccolo quantitativo di latenza. Questa latenza è mascherata dal fatto che un gioco DirectX immagazzina in anticipo fino a tre frame. Nella pratica, notiamo ancora una perdita di prestazioni, seppure minima.

Tuttavia l'accesso al Quick Sync per voi è importante - o magari lo sarà tra un anno o due - e Virtu offre un compromesso tollerabile. La futura versione di Virtu sarà persino più interessante, come vedremo.