Menganalisis efisiensi memori

Karakteristik penggunaan memori aplikasi adalah aspek mendasar dari performanya. Anda dapat menggunakan System Profiler untuk menganalisis karakteristik ini dengan melihat informasi penghitung GPU yang tersedia.

Perangkat Adreno

Di perangkat Adreno, mulailah dengan menandai periode waktu yang konsisten dengan satu frame GPU seperti yang dijelaskan dalam Memperkirakan waktu pemrosesan frame CPU dan GPU. Gunakan teknik yang dijelaskan di halaman tersebut yang melibatkan penggunaan GPU % Utilization atau jalur penghitung serupa untuk batas waktu frame Anda karena jalur penghitung semuanya menggunakan teknik waktu yang sama dan akan memungkinkan perkiraan penggunaan memori yang lebih akurat (dibandingkan dengan menggunakan batas waktu frame yang berasal dari bagian GPU yang datanya dikumpulkan secara terpisah dari data jalur penghitung).

Penggunaan yang sesuai dengan penghitung yang relevan di bawahnya
Gambar 1. Jalur penggunaan yang selaras dengan penghitung yang relevan di bawahnya

Total baca/tulis

Setelah menandai satu frame di profiler, mulailah dengan melihat penghitung Read Total (Bytes/sec) dan Write Total (Bytes/sec). Penghitung ini memberikan gambaran keseluruhan yang baik tentang jumlah data yang melintasi bus memori selama satu frame. Lakukan yang terbaik untuk meminimalkan jumlah data yang Anda kirim melalui bus, karena bandwidth memori adalah sumber besar konsumsi baterai di perangkat seluler.

Total Penghitung Baca + Tulis
Gambar 2. Penghitung Total Baca + Tulis

Anda juga dapat memeriksa penghitung Vertex Memory Read (Bytes/Second) dan Texture Memory Read (Bytes/Second) untuk menentukan bagian bandwidth yang digunakan untuk data vertex dan tekstur.

Vertex + Penghitung Baca Memori Tekstur
Gambar 3. Penghitung Baca Memori Vertex + Tekstur

Apa yang Anda anggap “baik” untuk nilai ini bergantung pada jenis beban kerja yang terlihat di aplikasi Anda. Misalnya, aplikasi 2D mungkin melihat bandwidth baca memori tekstur dalam jumlah yang relatif besar (~2+GB/dtk) digunakan, tetapi bandwidth memori vertex mungkin sangat minimal (~50MB/dtk). Untuk mengetahui detail selengkapnya, lihat dokumentasi untuk Menganalisis bandwidth memori vertex dan Menganalisis penggunaan bandwidth memori tekstur.

Kios pengambilan

Lihat penghitung % Vertex Fetch Stall, % Texture Fetch Stall, dan % Stall on System Memory karena penghitung ini akan memberi Anda beberapa petunjuk tentang performa memori keseluruhan aplikasi kita. Jika nilainya lebih tinggi dari sekitar 5%, hal ini menunjukkan bahwa aplikasi Anda tidak menata data dalam memori secara efisien atau mengakses datanya secara efisien untuk memanfaatkan cache. Lihat Menganalisis bandwidth memori vertex dan Menganalisis penggunaan bandwidth memori tekstur untuk mengetahui detail tentang cara meningkatkan penggunaan memori untuk jenis aset ini.

Penghitung Penundaan Memori
Gambar 4. Penghitung Kios Memori

Perangkat Mali

Di perangkat Mali, mulailah dengan menandai periode waktu yang konsisten dengan satu frame GPU seperti yang dijelaskan dalam Memperkirakan waktu pemrosesan frame CPU dan GPU. Gunakan teknik yang dijelaskan di halaman tersebut yang melibatkan penggunaan GPU % Utilization atau jalur penghitung serupa untuk batas waktu frame Anda karena jalur penghitung semuanya menggunakan teknik waktu yang sama dan akan memungkinkan perkiraan penggunaan memori yang lebih akurat (dibandingkan dengan menggunakan batas waktu frame yang berasal dari bagian GPU yang datanya dikumpulkan secara terpisah dari data jalur penghitung).

Jalur pemanfaatan yang selaras dengan penghitung yang Anda minati di bawahnya
Gambar 5. Jalur penggunaan yang selaras dengan penghitung yang Anda minati di bawahnya

Total Eksternal Output

Setelah menandai satu frame di System Profiler, mulailah dengan melihat penghitung Output External Read bytes Output External Write bytes. Penghitung ini memberikan gambaran keseluruhan yang baik tentang jumlah data yang melintasi bus memori selama satu frame. Lakukan yang terbaik untuk meminimalkan jumlah data yang Anda kirim melalui bus, karena bandwidth memori adalah sumber besar konsumsi baterai di perangkat seluler.

Output External counter tracks
Gambar 6. Jalur penghitung Eksternal Output

Total internal input

Ada juga penghitung yang memberi Anda informasi tentang cache itu sendiri. Penghitung yang Anda minati adalah “Input internal [read|write] stall cycles”. Nilai yang lebih tinggi untuk penghitung ini berarti Anda berhasil mengakses cache, tetapi ada terlalu banyak permintaan baca yang dibuat dan akibatnya kode shader terhenti menunggu untuk mendapatkan akses ke memori.

Memasukkan jalur penghitung Internal
Gambar 7. Jalur penghitung Internal Input

Kios pengambilan

Kumpulan penghitung berikutnya yang dapat Anda lihat adalah penghitung Vertex Prefetcher Stall Cycles dan Texture Fetch Stall karena penghitung ini akan memberi Anda beberapa petunjuk tentang performa memori keseluruhan aplikasi kita. Jika Anda melihat nilai yang lebih tinggi dari ~5%, hal ini menunjukkan bahwa Anda tidak menata data dalam memori secara efisien atau mengakses data secara efisien untuk memanfaatkan cache. Lihat artikel Menganalisis Bandwidth Memori [Vertex|Tekstur] untuk mengetahui detail tentang cara meningkatkan penggunaan memori untuk jenis aset ini

Mengambil jalur penghitung Penghentian
Gambar 8. Jalur penghitung Kios Pengambilan