Analiza el uso del ancho de banda de la memoria de texturas

El ancho de banda de la memoria de los datos de textura puede ser un cuello de botella potencial para el rendimiento de la GPU de tu app. Hay algunos contadores en un perfil del sistema de AGI que pueden ayudar a diagnosticar problemas de ancho de banda de la memoria de textura.

Contadores de Qualcomm Adreno

En los dispositivos con GPUs Qualcomm Adreno, algunos contadores notables incluyen los siguientes:

Contador Descripción
Texture Memory Read BW (Bytes/Second) Ancho de banda de los datos de textura que se leen de la memoria externa
% Texture L1 Miss Error de caché L1 por la recuperación de texturas
% Non-Base Level Textures Porcentaje de recuperaciones de texturas que son mipmaps
% Anisotropic Filtered Porcentaje de texels que se filtran de forma anisotrópica

Contadores de ARM Mali

En los dispositivos con GPUs ARM Mali, algunos contadores notables incluyen los siguientes:

Contador Descripción
Texture read beats from external memory Latidos de datos leídos de la memoria externa por la unidad de textura, promediados en los núcleos del sombreador
Texture read beats from L2 cache Latidos de datos leídos de la caché L2 por la unidad de textura, promediados en los núcleos del sombreador
[Más]

Para calcular el ancho de banda general a partir de los latidos de lectura promedio, el valor del contador se multiplica por el ancho del bus (por lo general, 16 bytes) y por la cantidad total de núcleos del sombreador.

Análisis de contadores

Para medir el comportamiento de estos contadores, mide el ancho de banda promedio y máximo durante un solo fotograma de la GPU y, luego, delimita con un bloque contiguo de utilización de la GPU.

Ancho de banda de lectura de memoria de textura para un solo fotograma, con un valor promedio de 565 MB/s y un valor máximo de 2.30 GB/s
Figura 1. Ancho de banda de lectura de la memoria de textura para un solo fotograma, con un valor promedio de 565 MB/s y un valor máximo de 2.30 GB/s

Recomendamos un ancho de banda de lectura de la memoria de textura promedio que no supere 1 GB/s y un ancho de banda máximo que no supere 3 GB/s. El error de caché L1 de textura tampoco debe superar el 10%. Los valores más altos para el ancho de banda o la caché L1 pueden ser indicadores de problemas de textura más profundos, incluidos los siguientes:

  • Las texturas son demasiado grandes: Las texturas grandes aumentan el tamaño del paquete, son más costosas y pueden reducir la eficiencia de la caché.
  • Las texturas no están comprimidas: Todos los teléfonos Android admiten algunos tipos de compresión de texturas, ya sea ETC1 o ASTC. Las texturas deben comprimirse para reducir el tamaño del paquete y el ancho de banda de la textura.
  • Otros: Se deben tener en cuenta una variedad de otras inquietudes sobre las texturas, incluidas las texturas de potencia de 2, el mipmapping, el filtrado anisotrópico y mucho más. Algunos de estos se pueden observar en el perfil del sistema como se describe a continuación, mientras que otros pueden requerir una investigación más profunda.

En el caso de los juegos tridimensionales con una cámara libre, los recursos de textura deben usar mipmapping, de modo que los objetos que se encuentren a una distancia de la cámara tengan un ancho de banda de memoria reducido, una mejor eficiencia de la caché de texturas y una mejor calidad de imagen. En el caso de los dispositivos que usan GPUs Qualcomm Adreno, los contadores de Non-Base Level Textures inferiores al 10% en promedio pueden indicar un mipmapping inadecuado.

Texturas que no son de nivel base para un solo fotograma, con un valor promedio del 9.2%
Figura 2: Texturas de nivel no base para un solo fotograma, con un valor promedio de 9.2%

Otra consideración es el uso del filtrado anisotrópico, que se describe con el contador % Anisotropic Filtered para las GPUs Qualcomm Adreno para la proporción de texels que se filtran de forma anisotrópica. Si bien esto puede mejorar la calidad visual de algunos juegos, también puede ser muy costoso, y su uso debe sopesarse con el costo de rendimiento de la GPU.

Porcentaje de filtrado anisotrópico para un solo fotograma, con un valor promedio del 10.8%
Figura 3. Porcentaje de filtrado anisotrópico para un solo fotograma, con un valor promedio de 10.8%

La mejor manera de diagnosticar problemas más específicos es tomar un registro de perfil de fotograma para analizar los recursos de textura.