Menganalisis penggunaan bandwidth memori tekstur

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

Penghitung Qualcomm Adreno

Pada perangkat dengan GPU Qualcomm Adreno, beberapa penghitung yang terkenal meliputi:

Negosiasikan Deskripsi
BW Pembacaan Memori Tekstur (Byte/Detik) Bandwidth data tekstur yang dibaca dari memori eksternal.
% Tekstur L1 Tidak Ada Cache L1 tidak dapat mengambil tekstur.
% Tekstur Tingkat Non-Dasar Persentase pengambilan tekstur yang berupa mipmap.
% Difilter Anisotropik Persentase texel yang disaring anisotropik.

Penghitung ARM Mali

Pada perangkat dengan GPU ARM Mali, beberapa penghitung yang penting meliputi:

Negosiasikan Deskripsi
Tekstur yang membaca ketukan dari memori eksternal Data yang dibaca dari memori eksternal oleh unit tekstur, dirata-ratakan di atas inti shader.
Tekstur pembacaan ketukan dari cache L2 Data yang dibaca dari cache L2 oleh unit tekstur, dirata-ratakan dari inti shader.
[Lainnya]

Untuk menghitung bandwidth keseluruhan dari ketukan operasi 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 gambarkan dengan blok Pemakaian GPU yang berdekatan.

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

Sebaiknya bandwidth pembacaan memori tekstur rata-rata tidak lebih tinggi dari 1 GBps, dan bandwidth puncak tidak lebih tinggi dari 3 GBps. Tekstur cache L1 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 menggelembungkan ukuran paket Anda, lebih mahal serta dapat mengurangi efisiensi cache.
  • Tekstur tidak dikompresi: Semua ponsel Android mendukung beberapa jenis kompresi tekstur, baik itu ETC1 maupun ASTC. Tekstur harus dikompresi untuk mengurangi ukuran paket dan mengurangi bandwidth tekstur.
  • Lainnya: Berbagai masalah tekstur lainnya harus dipertimbangkan, termasuk tekstur power-of-2, mipmapping, penyaringan anisotropik, dan lainnya. Beberapa di antaranya dapat diamati dari Profil Sistem seperti yang dibahas di bawah, sedangkan yang lainnya mungkin memerlukan penyelidikan yang lebih mendalam.

Untuk game tiga dimensi dengan kamera gratis, aset tekstur harus menggunakan mipmapping, sehingga objek jauh dari kamera akan mengalami penurunan bandwidth memori, efisiensi cache tekstur yang lebih baik, dan kualitas gambar yang lebih baik. Untuk perangkat yang menggunakan GPU Qualcomm Adreno, % Tekstur Level Non-Dasar rata-rata yang lebih rendah dari 10% dapat menunjukkan mipmapping yang tidak memadai.

Tekstur tingkat non-dasar untuk frame tunggal, 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 penyaringan anisotropik, yang dijelaskan oleh penghitung % Anisotropik Difilter untuk GPU Qualcomm Adreno untuk proporsi texel yang difilter anisotropik. Meskipun dapat meningkatkan kualitas visual untuk beberapa game, hal ini juga bisa menjadi sangat mahal, dan penggunaannya harus diimbangi dengan biaya performa GPU.

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

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