Analisar a eficiência da memória

As características de uso da memória de um app são um aspecto fundamental do desempenho dele. Use o System Profiler para analisar essas características consultando as informações disponíveis do contador de GPU.

Dispositivos Adreno

Em dispositivos Adreno, comece destacando um período consistente com um único frame de GPU, conforme descrito em Estimar tempos de processamento de frames da CPU e da GPU. Use a técnica descrita nessa página envolvendo o uso do % de utilização da GPU ou de um contador semelhante para rastrear os limites de tempo para a renderização do frame. Como todos os contadores usam a mesma técnica de tempo, é possível fazer estimativas mais precisas da utilização da memória (em comparação com o uso dos limites de tempo para a renderização do frame derivados dos intervalos da GPU, cujos dados são coletados de forma independente dos dados de rastreamento do contador).

A faixa de utilização alinhada com os contadores relevantes abaixo dela
Figura 1. A linha de acompanhamento de utilização alinhada com os contadores relevantes abaixo dela

Totais de leitura/gravação

Depois de destacar um único frame no profiler, comece analisando os contadores Total de leitura (bytes/s) e Total de gravação (bytes/s). Esses contadores oferecem uma boa visão geral de quantos dados estão cruzando o barramento de memória ao longo de um único frame. Faça o possível para minimizar a quantidade de dados enviados pelo barramento, já que a largura de banda da memória é uma grande fonte de consumo elevado da bateria em dispositivos móveis.

Contadores totais de leitura e gravação
Figura 2. Contadores totais de leitura e gravação

Você também pode examinar os contadores Leitura de memória de vértice (bytes/segundo) e Leitura de memória de textura (bytes/segundo) para determinar a parte da largura de banda usada para dados de vértice e textura.

Contadores de leitura de memória de textura e vértice
Figura 3. Contadores de leitura de memória de textura e vértice

O que você considera "bom" para esses valores depende do tipo de carga de trabalho no app. Por exemplo, aplicativos 2D podem ter quantidades relativamente grandes (~2 GB/s ou mais) de largura de banda de leitura de memória de textura sendo usadas, mas a largura de banda de memória de vértice pode ser muito pequena (~50 MB/s). Para mais detalhes, consulte a documentação sobre Analisar a largura de banda da memória de vértices e Analisar o uso da largura de banda da memória de textura.

Buscar bancas

Analise os contadores % Parada de busca de vértices, % Parada de busca de textura e % Parada na memória do sistema, já que eles dão algumas dicas sobre o desempenho geral da memória do aplicativo. Se os valores forem maiores que aproximadamente 5%, isso sugere que o app não está organizando os dados na memória de maneira eficiente ou não está acessando os dados de maneira eficiente para aproveitar o cache. Confira Analisar a largura de banda da memória de vértice e Analisar o uso da largura de banda da memória de textura para detalhes sobre como melhorar o uso da memória para esses tipos de recursos.

Contadores de espera de memória
Figura 4. Contadores de espera de memória

Dispositivos Mali

Em dispositivos Mali, comece destacando um período consistente com um único frame da GPU, conforme descrito em Estimar tempos de processamento de frames da CPU e da GPU. Use a técnica descrita nessa página envolvendo o uso do % de utilização da GPU ou de um contador semelhante para rastrear os limites de tempo para a renderização do frame. Como todos os contadores usam a mesma técnica de tempo, é possível fazer estimativas mais precisas da utilização da memória (em comparação com o uso dos limites de tempo para a renderização do frame derivados dos intervalos da GPU, cujos dados são coletados de forma independente dos dados de rastreamento do contador).

Alinhamento da faixa de utilização com os contadores de interesse abaixo dela
Figura 5. A linha de acompanhamento de utilização alinhada com os contadores de interesse abaixo

Gerar totais externos

Depois de destacar um único frame no System Profiler, comece analisando os contadores Output External Read bytes e Output External Write bytes. Esses contadores oferecem uma boa visão geral de quantos dados estão cruzando o barramento de memória ao longo de um único frame. Faça o possível para minimizar a quantidade de dados enviados pelo barramento, já que a largura de banda da memória é uma grande fonte de consumo de bateria em dispositivos móveis.

Gerar rastreamentos de contadores externos
Figura 6. Saída de rastreamentos de contadores externos

Inserir totais internos

Também há contadores que fornecem informações sobre os próprios caches. Os contadores de interesse são "Ciclos de espera internos de entrada [leitura|gravação]". Valores mais altos significam que você está acessando o cache com sucesso, mas há muitas solicitações de leitura sendo feitas. Como resultado, o código do shader está aguardando o acesso à memória.

Inserir faixas de contadores internos
Figura 7. Entrada de faixas de contador interno

Buscar bancas

O próximo conjunto de contadores que você pode analisar são os ciclos de espera do Vertex Prefetcher e o espera de busca de textura, que dão algumas dicas sobre o desempenho geral da memória do aplicativo. Se você estiver vendo valores maiores que 5%, isso significa que não está organizando os dados na memória de maneira eficiente ou acessando os dados de maneira eficiente para aproveitar o cache. Confira os artigos "Analisar largura de banda de memória [Vertex|Texture]" para saber como melhorar o uso da memória para esses tipos de recursos.

Buscar rastreamentos do contador de interrupções
Figura 8. O contador de paradas de busca rastreia