Menganalisis efisiensi memori

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

Perangkat Adreno

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

Jalur pemanfaatan sesuai dengan konter terkait di bawahnya
Gambar 1. Jalur pemanfaatan yang selaras dengan penghitung relevan di bawahnya

Total baca/tulis

Setelah Anda menandai satu frame di profiler, mulailah dengan melihat penghitung Read Total (Bytes/dtk) dan Write Total (Bytes/dtk). Penghitung ini memberikan gambaran menyeluruh yang bagus 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 merupakan sumber daya baterai yang besar pada perangkat seluler.

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

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

Penghitung Pembaca Memori Vertex + Tekstur
Gambar 3. Penghitung Pembacaan Memori Vertex + Tekstur

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

Ambil kios

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

Penghitung Kios Memori
Gambar 4. Penghitung Memory Stall

Perangkat Mali

Di perangkat Mali, mulailah dengan terlebih dahulu menyoroti jangka waktu yang konsisten dengan satu frame GPU seperti yang dijelaskan dalam Perkirakan waktu pemrosesan frame CPU dan GPU. Gunakan teknik yang dijelaskan di halaman tersebut yang melibatkan penggunaan Pemakaian % GPU atau trek penghitung serupa untuk batas waktu render frame karena penghitung melacak semuanya menggunakan teknik pengaturan waktu yang sama dan akan memungkinkan perkiraan penggunaan memori yang lebih akurat (dibandingkan dengan menggunakan batas waktu render frame yang berasal dari bagian GPU yang datanya dikumpulkan secara terpisah dari data trek penghitung).

Jalur pemanfaatan yang berbaris dengan konter yang Anda minati di bawahnya
Gambar 5. Jalur pemanfaatan yang sesuai dengan penghitung yang Anda minati di bawahnya

Total Eksternal Output

Setelah Anda menandai satu frame di System Profiler, mulailah dengan melihat penghitung Output External Read bytes Output External Write bytes. Penghitung ini memberikan gambaran menyeluruh yang bagus tentang berapa banyak data yang melintasi memory bus selama satu frame. Lakukan yang terbaik untuk meminimalkan jumlah data yang Anda kirim melalui bus, karena bandwidth memori merupakan sumber daya baterai yang cepat habis pada perangkat seluler.

Trek penghitung eksternal output
Gambar 6. Jalur penghitung eksternal output

Masukkan total internal

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

Masukkan trek penghitung Internal
Gambar 7. Input jalur penghitung Internal

Ambil kios

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

Ambil jalur penghitung Kios
Gambar 8. Ambil jalur penghitung Kios