Menganalisis penjadwalan thread

Ada beberapa hal yang perlu dipertimbangkan untuk menentukan apakah thread proses game Anda digunakan dengan tepat dan dijadwalkan untuk performa terbaik.

  • Kecepatan frame
  • Multithreading dan paralelisasi thread
  • Afinitas core CPU

Multithreading

Banyak game dan game engine menggunakan multithreading untuk membagi kerja CPU menjadi tugas logis, yang dapat dijalankan secara terpisah. Salah satu konfigurasi umum adalah thread game untuk logika game dan input, thread render untuk menyiapkan dan mengirimkan objek yang akan digambar, dan thread pekerja untuk subtugas lainnya seperti animasi atau audio.

Sebaiknya paralelkan thread untuk memanfaatkan peningkatan performa multithreading. Contohnya adalah skenario saat thread game dan render berjalan sebagian atau sepenuhnya serentak pada core yang berbeda. Hal ini tidak selalu memungkinkan, seperti dalam kasus dengan dependensi data bersama; tetapi, jika memungkinkan, hal ini dapat menyebabkan waktu CPU yang lebih rendah dan berpotensi kecepatan frame yang lebih tinggi.

Game dengan thread utama dan render yang diparalelkan, serta thread pekerja dan thread audio
Gambar 1. Bermain game dengan thread utama dan render yang diparalelkan, serta thread pekerja dan thread audio

Afinitas core CPU

Salah satu faktor yang memengaruhi performa beban kerja CPU secara signifikan adalah cara penjadwalan beban kerja di core. Hal ini dapat dibagi menjadi dua komponen:

  • Apakah thread game Anda berjalan di core terbaik untuk performa
  • Apakah thread game Anda sering beralih antar-core

Anda dapat menyelidiki perilaku thread CPU pada bagian Penggunaan CPU dengan mengaktifkan CPU pada konfigurasi profil saat melakukan perekaman aktivitas. Dengan memperbesar bagian rekaman aktivitas <200 md, Anda dapat melihat setiap proses yang berjalan di core CPU perangkat. Biasanya, core kecil sesuai dengan indeks yang lebih kecil (misalnya CPU 0-3), sedangkan core besar sesuai dengan indeks yang lebih tinggi (misalnya CPU 6-7).

Umumnya, saat game berada di latar depan, thread persisten seperti thread game dan thread render harus berjalan pada core besar berperforma tinggi, sedangkan thread proses dan pekerja lainnya mungkin dijadwalkan pada core yang lebih kecil.

Game dengan thread utama dan render yang terutama berjalan pada core besar (CPU 6-7), yang ditampilkan dalam warna biru muda
Gambar 2. Game dengan thread utama dan render yang terutama berjalan pada core besar (CPU 6-7), yang ditampilkan dengan warna biru muda

Anda juga dapat mengamati apakah thread game Anda sering beralih antar-core, jika thread utama dan render Anda berganti core dalam satu frame CPU atau antara dua frame CPU yang berurutan. Perilaku CPU ini kemungkinan merupakan indikator bahwa thread game Anda tidak diafinitaskan dengan benar. Sakelar inti tersebut menimbulkan beberapa overhead dari switch konteks dan hilangnya status dengan cache/register inti, sehingga menambah panjang frame CPU Anda.

Game dengan thread utama (Thread-7) dan thread render (Thread-8) yang beralih antar-core, ditampilkan dalam warna ungu
Gambar 3. Game dengan thread utama (Thread-7) dan thread render (Thread-8) yang beralih antar-core, ditampilkan dengan warna ungu