NVIDIA, attraverso questo articolo pubblicato sul proprio portale, cerca di spiegare agli sviluppatori che fanno  uso del pacchetto GameWorks, che le DirectX12 non sono un'API abbastanza matura per essere sfruttata adeguatamente, e che quindi sarebbe il caso di non esagerare con l'utilizzo delle nuove feature (che per ora avvantaggiano solo la rivale AMD): "The DX12 API places more responsibilities on the programmer than any former DirectX™ API. This starts with resource state barriers and continues with the use of fences to synchronize command queues. Likewise illegal API usage won’t be caught or corrected by the DX-runtime or the driver. In order to stay on top of things the developer needs to strongly leverage the debug runtime and pay close attention to any errors that get reported. Also make sure to be thoroughly familiar with the DX12 feature specifications".

 

 


Per questo, la casa californiana si pronuncia a favore di un basso parallelismo dei task (situazione che avvantaggia l'architettura GCN di AMD), ed a favore di un'implementazione molto DX11-style: "Don’t rely on the driver to parallelize any Direct3D12 works in driver threads [...] Don’t toggle between compute and graphics on the same command queue more than absolutely necessary This is still a heavyweight switch to make [...] Don’t create too many threads or too many command lists [...] Be aware of the fact that there is a cost associated with setup and reset of a command list: •You still need a reasonable number of command lists for efficient parallel work submission •Fences force the splitting of command lists for various reasons ( multiple command queues, picking up the results of queries) [...] ecc".


Questa situazione si è venuta a creare in quanto le architetture di NVIDIA non riescono a sfruttare adeguatamente l'Asyncronous Computing, caratteristica che permette di far macinare alla GPU thread anche fuori sequenza (al pari delle CPU Out-of-Order). Fino ad oggi le GPU hanno avuto un disegno prettamente In-Order, ed i driver video hanno avuto un peso determinante nelle prestazioni elargite dalle schede video (allocazione dei thread, gestione delle risorse, ecc). Grazie all'Async Compute gli sviluppatori possono, finalmente, sfruttare più liberamente ed in maniera efficace la potenza teorica resa disponinbile dalle varie GPU più recenti, senza dover dipendere esclusivamente dai driver proprietari.
Forse, proprio per questo, sebbene nella guida non si specifichi un'architettura particolare, i consigli finali sembrano proprio mirati per tirare fuori il meglio dall'architettura Maxwell, attualmente in evidente difficoltà (soprattutto nella fascia media e medio-alta) contro GCN.