A largura de banda da memória dos dados de textura pode ser um possível gargalo para o desempenho da GPU do seu app. Há alguns contadores em um perfil do sistema AGI que podem ajudar a diagnosticar problemas de largura de banda da memória de textura.
Contadores do Qualcomm Adreno
Em dispositivos com GPUs Qualcomm Adreno, alguns contadores importantes incluem:
| Contador | Descrição |
|---|---|
| Largura de banda de leitura da memória de textura (bytes/segundo) | Largura de banda dos dados de textura lidos da memória externa. |
| % de falha de L1 de textura | Ausência no cache L1 ao buscar texturas. |
| % de texturas não básicas | Porcentagem de buscas de textura que são mipmaps. |
| % filtrado anisotrópico | Porcentagem de texels filtrados anisotropicamente. |
Contadores do ARM Mali
Em dispositivos com GPUs ARM Mali, alguns contadores importantes incluem:
| Contador | Descrição |
|---|---|
| Leituras de textura de memória externa | Bits de dados lidos da memória externa pela unidade de textura, com média nos núcleos do shader. |
| Leituras de textura superam leituras da cache L2 | Taxas de dados lidas do cache L2 pela unidade de textura, com média nos núcleos do shader. |
| [Mais] |
Para calcular a largura de banda geral com base nas batidas de leitura médias, o valor do contador é multiplicado pela largura do barramento (normalmente 16 bytes) e pelo número total de núcleos de shader.
Análise de contadores
Para medir o comportamento desses contadores, meça a largura de banda média e de pico ao longo de um único frame da GPU e, em seguida, delimite com um bloco contíguo de utilização da GPU.
Recomendamos uma largura de banda média de leitura da memória de textura de no máximo 1 GBps e uma largura de banda máxima de no máximo 3 GBps. A ausência no cache L1 de textura também não pode ser superior a 10%. Valores mais altos para largura de banda ou cache L1 podem indicar problemas mais graves de textura, incluindo:
- O tamanho das texturas é muito grande: texturas grandes aumentam o tamanho do pacote, são mais caras e podem reduzir a eficiência do cache.
- As texturas não estão compactadas: todos os smartphones Android são compatíveis com alguns tipos de compactação de textura, seja ETC1 ou ASTC. As texturas precisam ser compactadas para reduzir o tamanho do pacote e a largura de banda da textura.
- Outros: é preciso considerar vários outros problemas de textura, incluindo texturas de potência de 2, mipmapping, filtragem anisotrópica e muito mais. Alguns deles podem ser observados no perfil do sistema, conforme discutido abaixo, enquanto outros podem exigir uma investigação mais detalhada.
Para jogos tridimensionais com uma câmera livre, os recursos de textura precisam usar mipmapping. Assim, objetos distantes da câmera terão largura de banda de memória reduzida, melhor eficiência do cache de textura e melhor qualidade de imagem. Para dispositivos que usam GPUs Qualcomm Adreno, contadores de % Texturas de nível não básico abaixo de 10% em média podem indicar mipmapping inadequado.
Outra consideração é o uso da filtragem anisotrópica, que é descrita pelo contador % Anisotropic Filtered para GPUs Qualcomm Adreno na proporção de texels filtrados anisotropicamente. Embora isso possa melhorar a qualidade visual de alguns jogos, também pode ser muito caro, e o uso precisa ser avaliado em relação ao custo de desempenho da GPU.
A melhor maneira de diagnosticar problemas mais específicos é fazer um rastreamento de perfil de frame para analisar recursos de textura.