Analizza l'efficienza della memoria

Le caratteristiche di utilizzo della memoria di un'app sono un aspetto fondamentale delle sue prestazioni. Puoi utilizzare System Profiler per analizzare queste caratteristiche esaminando le informazioni disponibili sul contatore della GPU.

Dispositivi Adreno

Sui dispositivi Adreno, inizia evidenziando un periodo di tempo coerente con un singolo frame della GPU, come descritto in Stimare i tempi di elaborazione dei frame della CPU e della GPU. Utilizza la tecnica descritta in quella pagina che prevede l'utilizzo del contatore Percentuale di utilizzo della GPU o di un contatore simile per i limiti di durata frame, in quanto tutti i contatori utilizzano la stessa tecnica di temporizzazione e consentono stime più accurate dell'utilizzo della memoria (rispetto all'utilizzo dei limiti di durata frame derivati dalle sezioni della GPU i cui dati vengono raccolti indipendentemente dai dati del contatore).

La traccia di utilizzo è allineata ai contatori pertinenti sottostanti
Figura 1. Traccia di utilizzo allineata ai contatori pertinenti sottostanti

Totali di lettura/scrittura

Dopo aver evidenziato un singolo frame nel profiler, inizia esaminando i contatori Lettura totale (byte/sec) e Scrittura totale (byte/sec). Questi contatori forniscono una buona panoramica della quantità di dati che attraversano il bus di memoria nel corso di un singolo frame. Fai del tuo meglio per ridurre al minimo la quantità di dati inviati tramite il bus, poiché la larghezza di banda della memoria è una delle principali cause di consumo eccessivo della batteria sui dispositivi mobili.

Contatori totali di lettura e scrittura
Figura 2. Contatori totali di lettura e scrittura

Puoi anche esaminare i contatori Lettura memoria vertici (byte/secondo) e Lettura memoria texture (byte/secondo) per determinare la porzione di larghezza di banda utilizzata per i dati di vertici e texture.

Vertex + Texture Memory Read Counters
Figura 3. Contatori di lettura della memoria di texture di Vertex

Ciò che consideri "buono" per questi valori dipende dal tipo di carichi di lavoro visualizzati nella tua app. Ad esempio, le applicazioni 2D potrebbero utilizzare quantità relativamente grandi (~2+ GB/s) di larghezza di banda di lettura della memoria delle texture, ma la larghezza di banda della memoria dei vertici potrebbe essere molto ridotta (~50 MB/s). Per ulteriori dettagli, consulta la documentazione relativa ad Analizza la larghezza di banda della memoria dei vertici e ad Analizza l'utilizzo della larghezza di banda della memoria delle texture.

Recupera stalli

Esamina i contatori % Vertex Fetch Stall, % Texture Fetch Stall e % Stall on System Memory, in quanto forniscono indicazioni sul rendimento complessivo della memoria della nostra applicazione. Se i valori sono superiori a circa il 5%, significa che la tua app non organizza i dati in memoria in modo efficiente o accede ai dati in modo efficiente per sfruttare la cache. Consulta le sezioni Analizzare la larghezza di banda della memoria dei vertici e Analizzare l'utilizzo della larghezza di banda della memoria delle texture per informazioni dettagliate su come migliorare l'utilizzo della memoria per questi tipi di asset.

Contatori di stallo della memoria
Figura 4. Contatori di stallo della memoria

Dispositivi in Mali

Sui dispositivi Mali, inizia evidenziando un periodo di tempo coerente con un singolo frame della GPU, come descritto in Stimare i tempi di elaborazione dei frame della CPU e della GPU. Utilizza la tecnica descritta in quella pagina che prevede l'utilizzo del contatore Percentuale di utilizzo della GPU o di un contatore simile per i limiti di durata frame, in quanto tutti i contatori utilizzano la stessa tecnica di temporizzazione e consentono stime più accurate dell'utilizzo della memoria (rispetto all'utilizzo dei limiti di durata frame derivati dalle sezioni della GPU i cui dati vengono raccolti indipendentemente dai dati del contatore).

La traccia di utilizzo è allineata ai contatori che ti interessano sottostanti
Figura 5. La traccia di utilizzo è allineata ai contatori che ti interessano sottostanti

Output External Totals

Dopo aver evidenziato un singolo frame in System Profiler, inizia esaminando i contatori Output External Read bytes e Output External Write bytes. Questi contatori forniscono una buona panoramica complessiva della quantità di dati che attraversano il bus di memoria nel corso di un singolo frame. Fai del tuo meglio per ridurre al minimo la quantità di dati che invii tramite il bus, poiché la larghezza di banda della memoria è una delle principali cause di consumo della batteria sui dispositivi mobili.

Output External counter tracks
Figura 6. Output External counter tracks

Inserisci totali interni

Sono presenti anche contatori che forniscono informazioni sulle cache stesse. I contatori che ti interessano sono "Input internal [read|write] stall cycles". Valori più alti indicano che stai accedendo correttamente alla cache, ma vengono effettuate troppe richieste di lettura e di conseguenza il codice shader si blocca in attesa di accedere alla memoria.

Input Internal counter tracks
Figura 7. Inserisci tracce del contatore interno

Recupera stalli

Il successivo set di contatori che puoi esaminare sono Vertex Prefetcher Stall Cycles e Texture Fetch Stall, che ti daranno alcuni suggerimenti sul rendimento complessivo della memoria della nostra applicazione. Se visualizzi valori superiori al 5% circa, significa che non stai disponendo i nostri dati in memoria in modo efficiente o che non stai accedendo ai nostri dati in modo efficiente per sfruttare la cache. Consulta gli articoli Analisi della larghezza di banda della memoria [Vertex|Texture] per informazioni dettagliate su come migliorare l'utilizzo della memoria per questi tipi di asset.

Recupera le tracce del contatore di stalli
Figura 8. Recupera le tracce del contatore di stalli