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.

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.

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.

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.