Menganalisis penjadwalan thread

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

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

Multithreading

Banyak game dan mesin game menggunakan multithreading untuk membagi pekerjaan CPU menjadi tugas logis, yang dapat dijalankan secara agak independen. Satu konfigurasi umum adalah thread game untuk logika input dan game, 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 secara serentak di core yang berbeda. Hal ini tidak akan selalu memungkinkan, seperti dalam kasus dengan dependensi data bersama; namun, jika memungkinkan, hal ini dapat menghasilkan waktu CPU yang lebih rendah dan dengan demikian berpotensi menghasilkan kecepatan frame yang lebih tinggi.

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

Afinitas core CPU

Salah satu faktor yang memengaruhi performa workload CPU Anda secara signifikan adalah cara workload tersebut dijadwalkan di core. Hal ini dapat dibagi menjadi dua komponen:

  • Apakah thread game Anda berjalan di core yang paling sesuai untuk workload-nya.
  • Apakah thread game Anda sering beralih antar-core.

Perangkat modern sering menggunakan arsitektur yang disebut komputasi heterogen, dengan core yang memiliki tingkat performa yang berbeda:

  • Satu atau beberapa core menawarkan performa puncak tertinggi, tetapi menggunakan lebih banyak daya. Core ini terkadang disebut core "besar".
  • Core lainnya memiliki performa puncak yang lebih rendah, tetapi lebih hemat daya. Core ini terkadang disebut core "kecil".
  • Opsional: satu atau beberapa core menawarkan keseimbangan antara performa dan daya. Core ini terkadang disebut core "menengah".

Anda dapat menyelidiki perilaku thread CPU di bagian Penggunaan CPU dengan mengaktifkan CPU di konfigurasi profil saat mengambil pelacakan. Dengan memperbesar bagian pelacakan <200 md, Anda dapat melihat proses individual yang berjalan di core CPU perangkat. Biasanya, core yang lebih kecil sesuai dengan indeks yang lebih kecil (misalnya, CPU '0'-'3'), sedangkan core yang lebih besar sesuai dengan indeks yang lebih tinggi (misalnya, CPU '6'-'7') dan core tengah jika ada akan menempati indeks di antaranya (misalnya, CPU '5'-'6'). Hal ini berdasarkan konvensi umum, tetapi tidak dijamin.

Jika Anda menemukan bahwa thread tertentu dijadwalkan di CPU yang tidak memenuhi kebutuhan performa atau daya, pertimbangkan untuk menetapkan afinitas CPU secara manual untuk thread tersebut.

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

Anda juga dapat mengamati apakah thread Anda beralih antar-core. Pengalihan core tersebut menimbulkan overhead dari pengalihan konteks dan hilangnya status dengan cache/register core.

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

Menetapkan afinitas CPU untuk thread akan menginstruksikan sistem untuk menjadwalkannya di core yang diberikan saat game Anda berada di latar depan. Ada beberapa faktor yang perlu dipertimbangkan saat melakukannya:

  • Software platform tidak dapat menyesuaikan penempatan tugas secara dinamis untuk faktor runtime seperti beban dan pembatasan termal.
  • Pengujian performa di perangkat yang berbeda dapat menghasilkan karakteristik performa yang sangat berbeda, terutama jika perangkat sangat bervariasi berdasarkan harga atau tanggal rilis.

    Perangkat yang lebih baru atau lebih mahal mungkin menjalankan workload tertentu dengan nyaman di core kecil, tetapi perangkat yang lebih lama atau lebih terjangkau mungkin memerlukan core yang lebih besar untuk memenuhi batas waktu workload yang sama.

  • Dengan memaksa afinitas ke core besar, Anda mungkin akan meningkatkan pengurasan baterai dan beban termal secara tidak perlu.

Karena alasan ini, sebaiknya hindari menetapkan afinitas CPU secara manual.