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 aiutare a diagnosticare i problemi di larghezza di banda della memoria di trama.
Contatori Qualcomm Adreno
Sui dispositivi con GPU Qualcomm Adreno, alcuni contatori degni di nota sono:
Negozia | Descrizione |
---|---|
BW lettura memoria texture (byte/secondo) | Larghezza di banda dei dati delle texture letti dalla memoria esterna. |
% texture L1 mancanti | Errore della cache L1 a causa del recupero delle texture. |
% di texture non di base | Percentuale di recuperi di texture che sono mipmap. |
% filtrata anisotropica | Percentuale di texel filtrata anisotropica. |
Contatori ARM Mali
Sui dispositivi con GPU ARM Mali, alcuni contatori degni di nota includono:
Negozia | Descrizione |
---|---|
Lettura della trama dalla memoria esterna | Battiti di dati letti dalla memoria esterna dall'unità di texture, calcolati in media sui core dello shabbyr. |
Battiti di lettura texture dalla cache L2 | Battiti di dati letti dalla cache L2 dall'unità di texture, calcolata in media sui core dello shardr. |
[Altro] |
Per calcolare la larghezza di banda complessiva dai battiti medi di lettura, il valore del contatore viene moltiplicato per la larghezza del bus (in genere 16 byte) e per il numero totale di core dello shabbyr.
Analisi dei contatori
Per misurare il comportamento di questi contatori, misura la larghezza di banda media e massima nel corso di un singolo frame GPU, quindi definisci la definizione con un blocco contiguo di utilizzo della GPU.
![Larghezza di banda per la lettura della memoria della texture per un singolo frame, con un valore medio di 565 MBps e un valore di picco di 2,30 GBps](https://developer.android.com/static/images/agi/texture-memory-images/sample_tex_bw.png?authuser=9&hl=it)
Consigliamo una larghezza di banda media di lettura della memoria di trama non superiore a 1 GBps e una larghezza di banda di picco non superiore a 3 GBps. Inoltre, il fallimento della cache L1 della texture non deve essere superiore al 10%. Valori più elevati per la larghezza di banda o la cache L1 possono essere indicatori di problemi di texture più profondi, tra cui:
- Texture troppo grandi: le texture di grandi dimensioni aumentano le dimensioni del pacco, sono più costose e possono ridurre l'efficienza della cache.
- Le texture non sono compresse: tutti gli smartphone Android supportano alcuni tipi di compressione delle texture, che sia ETC1 o ASTC. Le texture devono essere compresse per ridurre le dimensioni del pacchetto e la larghezza di banda della texture.
- Altro: dovrebbero essere presi in considerazione diversi altri problemi relativi alle texture, tra cui le texture Power-of-2, la mipmapping, il filtro anisotropico e altro ancora. Alcuni di questi possono essere osservati nel profilo di sistema, come descritto di seguito, mentre altri potrebbero richiedere un'indagine più approfondita.
Per i giochi tridimensionali con fotocamera senza costi, gli asset texture dovrebbero utilizzare mipmapping, in modo che gli oggetti distanti dalla fotocamera abbiano una larghezza di banda di memoria ridotta, una migliore efficienza della cache delle texture e una migliore qualità dell'immagine. Per i dispositivi che utilizzano GPU Qualcomm Adreno, la percentuale di contatori di texture non di base inferiori in media al 10% potrebbe indicare una mipmapping inadeguata.
![Texture non di base per un singolo fotogramma, con un valore medio del 9,2%](https://developer.android.com/static/images/agi/texture-memory-images/sample_nonbase.png?authuser=9&hl=it)
Un altro fattore da considerare è l'uso del filtro anisotropico, descritto dal contatore % filtro anisotropico per le GPU Qualcomm Adreno per la proporzione di texl filtrati in modo anisotropico. Sebbene ciò possa migliorare la qualità visiva per alcuni giochi, può anche essere molto costoso e il suo utilizzo deve essere ponderato in base ai costi delle prestazioni della GPU.
![Percentuale di anisotropica filtrata per un singolo frame, con un valore medio del 10,8%](https://developer.android.com/static/images/agi/texture-memory-images/sample_anisotropic.png?authuser=9&hl=it)
Il modo migliore per diagnosticare problemi più specifici è eseguire una traccia del profilo del frame per analizzare gli asset delle texture.