Analyser l'utilisation de la bande passante de la mémoire des données de texture

La bande passante mémoire des données de texture peut être un goulot d'étranglement potentiel pour les performances du GPU de votre application. Certains compteurs d'un profil système AGI peuvent vous aider à diagnostiquer les problèmes de bande passante de la mémoire de texture.

Compteurs Qualcomm Adreno

Sur les appareils équipés de GPU Qualcomm Adreno, voici quelques compteurs notables :

Compteur Description
Bande passante de lecture de la mémoire de texture (octets/seconde) Bande passante des données de texture lues à partir de la mémoire externe.
% Texture L1 Miss Échec du cache L1 lors de la récupération des textures.
% de textures de niveau non de base Pourcentage de récupérations de textures qui sont des mipmaps.
% filtré anisotrope Pourcentage de texels filtrés de manière anisotrope.

Compteurs ARM Mali

Sur les appareils équipés de GPU ARM Mali, voici quelques compteurs notables :

Compteur Description
Battements de lecture de texture à partir de la mémoire externe Débits de données lues à partir de la mémoire externe par l'unité de texture, moyennés sur les cœurs de nuanceur.
Lectures de textures à partir du cache L2 Battements de données lus à partir du cache de niveau 2 par l'unité de texture, en moyenne sur les cœurs de nuanceur.
[Plus]

Pour calculer la bande passante globale à partir des battements de lecture moyens, la valeur du compteur est multipliée par la largeur du bus (généralement 16 octets) et par le nombre total de cœurs de nuanceur.

Analyse des contre-mesures

Pour mesurer le comportement de ces compteurs, mesurez la bande passante moyenne et maximale sur la durée d'un seul frame de GPU, puis délimitez-la avec un bloc contigu d'utilisation du GPU.

Bande passante de lecture de la mémoire de texture pour un seul frame, avec une valeur moyenne de 565 Mo/s et une valeur maximale de 2,30 Go/s
Figure 1 Bande passante de lecture de la mémoire de texture pour un seul frame, avec une valeur moyenne de 565 Mbit/s et une valeur maximale de 2,30 Gbit/s

Nous recommandons une bande passante de lecture de la mémoire de texture moyenne ne dépassant pas 1 Go/s et une bande passante maximale ne dépassant pas 3 Go/s. Le taux d'échec du cache L1 de texture ne doit pas non plus dépasser 10 %. Des valeurs plus élevées pour la bande passante ou le cache L1 peuvent indiquer des problèmes de texture plus profonds, y compris :

  • Textures trop grandes : les textures volumineuses augmentent la taille de votre package, sont plus coûteuses et peuvent réduire l'efficacité du cache.
  • Les textures ne sont pas compressées : tous les téléphones Android sont compatibles avec certains types de compression de texture, qu'il s'agisse d'ETC1 ou d'ASTC. Les textures doivent être compressées pour réduire la taille du package et la bande passante des textures.
  • Autres : vous devez tenir compte de divers autres problèmes liés aux textures, y compris les textures de puissance 2, le mipmapping, le filtrage anisotrope, etc. Certains de ces problèmes peuvent être observés à partir du profil système, comme indiqué ci-dessous, tandis que d'autres peuvent nécessiter une analyse plus approfondie.

Pour les jeux en trois dimensions avec une caméra libre, les composants de texture doivent utiliser le mipmapping, de sorte que les objets éloignés de la caméra aient une bande passante mémoire réduite, une meilleure efficacité du cache de texture et une meilleure qualité d'image. Pour les appareils utilisant des GPU Qualcomm Adreno, les compteurs % de textures de niveau non de base inférieurs à 10 % en moyenne peuvent indiquer un mipmapping insuffisant.

Textures de niveau non de base pour une seule frame, avec une valeur moyenne de 9,2 %
Figure 2 Textures de niveau non de base pour un seul frame, avec une valeur moyenne de 9,2 %

Il faut également tenir compte de l'utilisation du filtrage anisotrope, qui est décrit par le compteur % filtré anisotrope pour les GPU Qualcomm Adreno, qui indique la proportion de texels filtrés de manière anisotrope. Bien que cela puisse améliorer la qualité visuelle de certains jeux, cela peut également être très coûteux. Son utilisation doit être mise en balance avec le coût des performances du GPU.

Pourcentage de filtrage anisotrope pour une seule frame, avec une valeur moyenne de 10,8 %
Figure 3 Pourcentage de filtrage anisotrope pour une seule frame, avec une valeur moyenne de 10,8 %

Le meilleur moyen de diagnostiquer des problèmes plus spécifiques consiste à effectuer un traçage du profil de frame pour analyser les éléments de texture.