La localidad de referencia es importante, pero no tiene que preocuparse tanto ... porque no tiene el control absoluto.
Cuando usa OpenGL / DirectX, generalmente tiene un control limitado sobre el diseño de la memoria, el controlador hará el resto. Por ejemplo, puede probar varios diseños de búferes de vértices, como el uso de datos de vértices intercalados o no intercalados y, dependiendo de sus datos / controlador / GPU, el rendimiento variará. Perfile y elija el que mejor se adapte a su aplicación.
Por ejemplo, en la optimización de GPU Gems Pipeline, la localidad de referencia se menciona dos veces , la primera:
Acceda a los datos de vértice de una manera relativamente secuencial. Las GPU modernas acceden a la memoria caché al buscar vértices. Como en cualquier jerarquía de memoria, la localidad de referencia espacial ayuda a maximizar los éxitos en la memoria caché, reduciendo así los requisitos de ancho de banda.
Y el segundo
Optimice para el caché de vértices post-T & L. Las GPU modernas tienen una pequeña caché de primero en entrar, primero en salir (FIFO) que almacena el resultado de los vértices transformados más recientemente; un golpe en este caché guarda todo el trabajo de transformación e iluminación, junto con todo el trabajo realizado anteriormente en la tubería. Para aprovechar esta memoria caché, debe usar primitivas indexadas y debe ordenar sus vértices para maximizar la localidad de referencia sobre la malla. Hay herramientas disponibles, incluidas D3DX y NVTriStrip (NVIDIA 2003), que pueden ayudarlo con esta tarea.
En mi opinión, esas recomendaciones siguen lo que he mencionado e implican que no tienes control absoluto sobre el diseño de la memoria, pero sobre lo que tienes control, por ejemplo, cómo se presentan los vértices de cada VBO puede tener un efecto en el rendimiento.
Si su aplicación está teniendo un impacto en el rendimiento, primero debe detectar el cuello de botella, puede que no sea un problema en la localidad de referencia de datos, pero podría deberse a que hay una gran cantidad de datos sin sacrificio, por ejemplo, no está realizando el sacrificio de frustum. etc Puedes consultar mi respuesta aquí sobre el tema.
Creo que debería preocuparse más por la localidad de referencia al usar OpenCL / CUDA, donde a menudo tiene un control absoluto sobre el diseño de la memoria.