Menganalisis penggunaan bandwidth memori tekstur

Bandwidth memori data tekstur dapat menjadi potensi hambatan untuk performa GPU aplikasi Anda. Ada beberapa penghitung di Profil Sistem AGI yang dapat membantu mendiagnosis masalah bandwidth memori tekstur.

Penghitung Qualcomm Adreno

Di perangkat dengan GPU Qualcomm Adreno, beberapa penghitung penting mencakup:

Pengukur Deskripsi
BW Baca Memori Tekstur (Byte/Detik) Bandwidth data tekstur yang dibaca dari memori eksternal.
% Kesalahan Tekstur L1 Cache L1 tidak ditemukan saat mengambil tekstur.
% Tekstur Non-Level Dasar Persentase pengambilan tekstur yang merupakan mipmap.
% Penyaringan Anisotropik Persentase texel yang difilter anisotropik.

Penghitung ARM Mali

Di perangkat dengan GPU ARM Mali, beberapa penghitung penting mencakup:

Pengukur Deskripsi
Detak baca tekstur dari memori eksternal Data yang dibaca dari memori eksternal oleh unit tekstur, dirata-ratakan di seluruh core shader.
Beat baca tekstur dari cache L2 Data yang dibaca dari cache L2 oleh unit tekstur, dirata-ratakan di seluruh core shader.
[Lainnya]

Untuk menghitung bandwidth keseluruhan dari irama baca rata-rata, nilai penghitung dikalikan dengan lebar bus (biasanya 16 byte) dan dengan jumlah total inti shader.

Analisis penghitung

Untuk mengukur perilaku penghitung ini, ukur bandwidth rata-rata dan puncak selama satu frame GPU, lalu batasi dengan blok Penggunaan GPU yang berdekatan.

Bandwidth baca memori tekstur untuk satu frame, dengan nilai rata-rata 565 MBps dan nilai puncak 2,30 GBps
Gambar 1. Bandwidth baca memori tekstur untuk satu frame, dengan nilai rata-rata 565 MBps dan nilai puncak 2,30 GBps

Sebaiknya gunakan bandwidth baca memori tekstur rata-rata tidak lebih dari 1 GBps, dan bandwidth puncak tidak lebih dari 3 GBps. Cache L1 tekstur yang tidak ditemukan juga tidak boleh lebih tinggi dari 10%. Nilai yang lebih tinggi untuk bandwidth atau cache L1 dapat menjadi indikator masalah tekstur yang lebih dalam, termasuk:

  • Tekstur terlalu besar: Tekstur besar akan memperbesar ukuran paket, lebih mahal, dan dapat mengurangi efisiensi cache.
  • Tekstur tidak dikompresi: Semua ponsel Android mendukung beberapa jenis kompresi tekstur, baik ETC1 maupun ASTC. Tekstur harus dikompresi untuk mengurangi ukuran paket dan mengurangi bandwidth tekstur.
  • Lainnya: Berbagai masalah tekstur lainnya harus dipertimbangkan, termasuk tekstur pangkat dua, mipmapping, penyaringan anisotropik, dan lainnya. Beberapa di antaranya dapat diamati dari Profil Sistem seperti yang dibahas di bawah, sedangkan yang lain mungkin memerlukan penyelidikan lebih mendalam.

Untuk game tiga dimensi dengan kamera bebas, aset tekstur harus menggunakan mipmapping, sehingga objek yang berjarak dari kamera akan memiliki bandwidth memori yang lebih rendah, efisiensi cache tekstur yang lebih baik, dan kualitas gambar yang lebih baik. Untuk perangkat yang menggunakan GPU Qualcomm Adreno, penghitung % Non-Base Level Textures yang rata-rata lebih rendah dari 10% dapat menunjukkan mipmapping yang tidak memadai.

Tekstur tingkat non-dasar untuk satu frame, dengan nilai rata-rata 9,2%
Gambar 2. Tekstur tingkat non-dasar untuk satu frame, dengan nilai rata-rata 9,2%

Pertimbangan lainnya adalah penggunaan pemfilteran anisotropik, yang dijelaskan oleh penghitung % Anisotropic Filtered untuk GPU Qualcomm Adreno untuk proporsi texel yang difilter anisotropik. Meskipun dapat meningkatkan kualitas visual untuk beberapa game, hal ini juga dapat sangat mahal, dan penggunaannya harus dipertimbangkan terhadap biaya performa GPU.

Persentase filter anisotropik untuk satu frame, dengan nilai rata-rata 10,8%
Gambar 3. Persentase filter anisotropik untuk satu frame, dengan nilai rata-rata 10,8%

Cara terbaik untuk mendiagnosis masalah yang lebih spesifik adalah dengan merekam rekaman aktivitas profil frame untuk menganalisis aset tekstur.