¿Vale la pena preocuparse por la localidad de referencia de la GPU?

9

¿La localidad de referencia hace tanta diferencia en el rendimiento de la GPU como el rendimiento de la CPU?

Por ejemplo, si envío 200 comandos de dibujo a la GPU, ¿veré una diferencia (potencialmente) notable si los datos de cada comando son contiguos en la memoria en lugar de saltar alrededor de los mapas de búferes / texturas?

Pregunta secundaria: supongo que la GPU garantiza contra problemas de uso compartido falso al tener la mayoría de los recursos inmutables. Pero en el caso de que no lo sean, ¿es por eso que los hilos siempre hacen el trabajo de cuatro fragmentos?

Xenoprimate
fuente

Respuestas:

10

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.

concepto3d
fuente
3

Originalmente, las GPU solo se usaban para aplicaciones multimedia que mostraban poca reutilización de datos. A medida que las GPU se utilizan cada vez más para aplicaciones de uso general (de ahí el término GPGPU), ahora cuentan con cachés administrados por hardware de gran tamaño, por ejemplo, la GPU Fermi tiene 768 KB de caché de último nivel, la GPU Kepler tiene 1536 KB de caché de último nivel, y la GPU Maxwell tiene 2048 KB de caché de último nivel. Esto, junto con una gran cantidad de investigaciones sobre cachés de GPU muestra que la localidad de datos es definitivamente importante para las GPU. Consulte mi documento de encuesta para obtener detalles y referencias para lo anterior.

usuario984260
fuente