La località di riferimento è importante, ma non devi preoccuparti così tanto ... perché non hai il controllo assoluto.
Quando si utilizza OpenGL / DirectX di solito si ha un controllo limitato sul layout della memoria, il driver farà il resto. Ad esempio, è possibile provare più layout di buffer di vertici, ad esempio l'utilizzo dei dati dei vertici interleaved o non interleaved e in base alle prestazioni dei dati / driver / GPU varierà. Profilo e scegli ciò che meglio si adatta alla tua applicazione.
Ad esempio nell'ottimizzazione della GPU Gems Pipeline Pipeline, la località di riferimento viene menzionata due volte , la prima:
Accedi ai dati dei vertici in modo relativamente sequenziale. Le GPU moderne accedono alla memoria cache quando recuperano i vertici. Come in qualsiasi gerarchia di memoria, la località spaziale di riferimento aiuta a massimizzare gli hit nella cache, riducendo così i requisiti di larghezza di banda.
E il secondo
Ottimizza per la cache dei vertici post-T & L. Le GPU moderne hanno una piccola cache FIFO (first-in, first-out) che memorizza il risultato dei vertici trasformati più di recente; un successo in questa cache salva tutto il lavoro di trasformazione e illuminazione, insieme a tutto il lavoro svolto in precedenza nella pipeline. Per sfruttare questa cache, è necessario utilizzare primitive indicizzate e ordinare i vertici per massimizzare la località di riferimento sulla mesh. Sono disponibili strumenti, tra cui D3DX e NVTriStrip (NVIDIA 2003), che possono aiutarti in questo compito.
A mio avviso, tali raccomandazioni seguono ciò di cui sto parlando e implicano che non si ha il controllo assoluto sul layout della memoria, tuttavia ciò su cui si ha il controllo, ad esempio il modo in cui sono disposti i vertici di VBO, può influire sulle prestazioni.
Se la tua applicazione ha un impatto sulle prestazioni, dovresti prima rilevare il collo di bottiglia, potrebbe non essere un problema di localizzazione dei dati di riferimento, ma potrebbe esserci perché ci sono enormi quantità di dati senza abbattimento, ad esempio non stai eseguendo l'abbattimento del frustum. ecc. Puoi controllare la mia risposta qui sull'argomento.
Penso che dovresti preoccuparti di più sulla località di riferimento quando usi OpenCL / CUDA dove hai spesso il controllo assoluto sul layout della memoria.