Analisar o uso da largura de banda da memória da textura

A largura de banda da memória dos dados de textura pode ser um possível gargalo para o desempenho da GPU do app. Existem alguns contadores em um perfil de sistema AGI que podem ajudar a diagnosticar problemas de largura de banda de memória de textura.

Contadores Qualcomm Adreno

Em dispositivos com GPUs Qualcomm Adreno, alguns contadores importantes incluem:

Enviar contraoferta Descrição
Leitura de memória de textura BW (bytes/segundo) Largura de banda dos dados de textura lidos da memória externa.
% de perda de textura L1 Ausência de cache L1 ao buscar texturas.
Porcentagem de texturas de nível não básico Porcentagem de buscas de textura que são mipmaps.
Porcentagem de filtros anisotrópicos Porcentagem de texels que são filtrados anisotrópicos.

Contadores da ARM Mali

Em dispositivos com GPUs ARM Mali, alguns contadores importantes incluem:

Enviar contraoferta Descrição
A leitura de textura bate da memória externa Os dados superam os dados lidos da memória externa pela unidade de textura, com a média sobre os núcleos do sombreador.
Batidas de leitura de textura do cache L2 Os tempos de dados lidos do cache L2 pela unidade de textura, com média sobre os núcleos do sombreador.
[Mais]

Para calcular a largura de banda geral a partir das batidas médias de leitura, o valor do contador é multiplicado pela largura do barramento (normalmente 16 bytes) e pelo número total de núcleos de sombreador.

Análise de contagem

Para medir o comportamento desses contadores, meça a largura de banda média e máxima ao longo de um único frame de GPU e, em seguida, delineie com um bloco contíguo de utilização da GPU.

Largura de banda de leitura de memória da textura para um único frame, com valor médio de 565 MBps e valor de pico de 2,30 GBps
Figura 1. Largura de banda de leitura de memória de textura para um único frame, com valor médio de 565 MBps e valor de pico de 2,30 GBps

Recomendamos uma largura de banda média de leitura de memória de textura não superior a 1 GBps e um pico de largura de banda não superior a 3 GBps. A ausência de cache L1 da textura também não pode ser maior que 10%. Valores mais altos para largura de banda ou cache L1 podem indicar problemas de textura mais profundos, incluindo:

  • Texturas muito grandes: texturas grandes ocupam o tamanho do pacote, são mais caras e podem reduzir a eficiência do cache.
  • Texturas nã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: diversos outros problemas de textura precisam ser considerados, incluindo texturas de poder 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 profunda.

Para jogos tridimensionais com uma câmera sem custo financeiro, os recursos de textura precisam usar mipmapping para que objetos à distância da câmera tenham largura de banda de memória reduzida, melhor eficiência de cache de textura e melhor qualidade de imagem. Para dispositivos que usam GPUs Qualcomm Adreno, os contadores de porcentagem de texturas de nível não básico menores que 10%, em média, podem indicar mipmapping inadequado.

Texturas de nível não básico para um único frame, com valor médio de 9,2%
Figura 2. Texturas de nível não básico para um único frame, com um valor médio de 9,2%

Outra consideração é o uso da filtragem anisotrópica, que é descrita pelo contador % filtrado anisotrópico para GPUs Qualcomm Adreno para a proporção de texels que são filtrados anisotrópicos. Embora isso possa melhorar a qualidade visual para alguns jogos, também pode ser muito caro e deve ser comparado com o custo de desempenho da GPU.

Perecente do anisotrópico filtrado para um único frame, com valor médio de 10,8%
Figura 3. Perecente do anisotrópico filtrado para um único frame, com valor médio de 10,8%

A melhor maneira de diagnosticar problemas mais específicos é fazer um rastro de perfil de frame para analisar os recursos de textura.