La larghezza di banda della memoria dei dati delle texture può essere un potenziale collo di bottiglia per le prestazioni della GPU della tua app. In un profilo di sistema AGI sono presenti alcuni contatori che possono aiutarti a diagnosticare i problemi di larghezza di banda della memoria delle texture.
Contatori Qualcomm Adreno
Sui dispositivi con GPU Qualcomm Adreno, alcuni contatori importanti includono:
| Contatore | Descrizione |
|---|---|
| BW di lettura della memoria delle texture (byte/secondo) | Larghezza di banda dei dati delle texture letti dalla memoria esterna. |
| % Texture L1 Miss | Fallimento della cache L1 durante il recupero delle texture. |
| % di texture non di base | Percentuale di recuperi di texture che sono mipmap. |
| % Anisotropic Filtered | Percentuale di texel filtrati in modo anisotropico. |
Contatori ARM Mali
Sui dispositivi con GPU ARM Mali, alcuni contatori importanti includono:
| Contatore | Descrizione |
|---|---|
| Texture read beats from external memory | Battute di dati lette dalla memoria esterna dall'unità di texture, calcolate in media sui core dello shader. |
| Texture read beats dalla cache L2 | Battute di dati lette dalla cache L2 dall'unità texture, calcolate in media sui core dello shader. |
| [Altro] |
Per calcolare la larghezza di banda complessiva dai battiti di lettura medi, il valore del contatore viene moltiplicato per la larghezza del bus (in genere 16 byte) e per il numero totale di core shader.
Analisi del contatore
Per misurare il comportamento di questi contatori, misura la larghezza di banda media e di picco nel corso di un singolo frame della GPU, quindi delimita con un blocco contiguo di utilizzo della GPU.
Consigliamo una larghezza di banda di lettura della memoria delle texture media non superiore a 1 GBps e una larghezza di banda di picco non superiore a 3 GBps. Anche i fallimenti della cache L1 della texture non devono superare il 10%. Valori più elevati per la larghezza di banda o la cache L1 possono essere indicatori di problemi di texture più profondi, tra cui:
- Le texture sono troppo grandi: le texture di grandi dimensioni aumentano le dimensioni del pacchetto, sono più costose e potrebbero ridurre l'efficienza della cache.
- Le texture non sono compresse: tutti gli smartphone Android supportano alcuni tipi di compressione delle texture, ad esempio ETC1 o ASTC. Le texture devono essere compresse per ridurre le dimensioni del pacchetto e la larghezza di banda delle texture.
- Altro: è necessario prendere in considerazione una serie di altri problemi relativi alle texture, tra cui texture con potenza di 2, mipmapping, filtraggio anisotropico e altro ancora. Alcuni di questi possono essere osservati dal profilo di sistema, come descritto di seguito, mentre altri potrebbero richiedere un'indagine più approfondita.
Per i giochi tridimensionali con una videocamera libera, gli asset texture devono utilizzare il mipmapping, in modo che gli oggetti distanti dalla videocamera abbiano una larghezza di banda della memoria ridotta, una migliore efficienza della cache delle texture e una migliore qualità dell'immagine. Per i dispositivi che utilizzano GPU Qualcomm Adreno, i contatori % Texture non di base inferiori al 10% in media potrebbero indicare un mipmapping inadeguato.
Un'altra considerazione riguarda l'utilizzo del filtro anisotropico, descritto dal contatore % Anisotropic Filtered per le GPU Qualcomm Adreno per la proporzione di texel filtrati in modo anisotropico. Sebbene ciò possa migliorare la qualità visiva di alcuni giochi, può anche essere molto costoso e il suo utilizzo deve essere valutato in base al costo delle prestazioni della GPU.
Il modo migliore per diagnosticare problemi più specifici è eseguire una traccia del profilo dei frame per analizzare gli asset delle texture.