Saya baru saja menerapkan penanganan input multi-threaded di mesin permainan saya di mana kode yang polling OS untuk mengumpulkan input dari itu dan waktu cap mereka berada di utas terpisah dan setiap frame di utas utama saya hanya memakan input yang dikumpulkan hingga waktu permainan logis. Semuanya berfungsi, tetapi pengaturan ini menggunakan 100% CPU saya. Saya memiliki dua core, dan itu naik hingga 100% saat menjalankan game saya.
Saya telah memeriksa dengan game lain untuk melihat apakah mereka juga melakukannya. Misalnya Skyrim dan Doom 3 tampaknya baik-baik saja dengan lebih dari 60% CPU.
Apakah dapat diterima untuk gim yang menggunakan input multi-utas untuk menggunakan CPU 100%? Jika tidak, apa saja trik yang digunakan game tersebut untuk menurunkan penggunaan CPU oleh utas input?
sumber
while true do CheckForEvents;
while (true)
). Digunakan 90% + dari satu CPU untuk melakukannya. DitambahkanThread.Sleep(5)
itu menyebabkan penggunaan CPU turun menjadi di bawah 40%. Menjadi 25 milidetik di antara jajak pendapat menjadikannya di bawah 10%.Jawaban:
Ya, ini normal untuk gim real-time mencoba menggunakan CPU 100% untuk bekerja secepat dan sebagus mungkin. Sehingga pemain melihat sebanyak frame per detik atau simulasi fisika yang baik atau apapun yang PC-nya dapat sediakan.
Dalam kasus Anda - Tidak, ini terlihat seperti desain yang tidak efisien, untuk mengambil utas dan menjadikannya polling untuk acara dalam satu lingkaran (
while true do CheckForEvents;
). Koreksi saya jika saya salah, tetapi OS sudah melakukan jajak pendapat. Anda harus memeriksanya dari utas utama Anda sekali setiap kutu.Putaran permainan utama harus cukup cepat untuk berjalan pada 30+ kutu per detik, yang cukup untuk perintah polling untuk banyak game. Pemain tidak akan melihat perbedaan jika perintahnya diproses mis. 0-33ms nanti. Di sisi lain Anda bisa menggunakan inti CPU ekstra untuk tugas-tugas yang lebih bermanfaat, seperti JAUH lebih baik AI atau fisika atau apa pun.
PS Seperti yang diminta untuk mengklarifikasi dalam komentar, jangan mengambil angka di atas secara membabi buta untuk semua jenis permainan. Sementara game TBS hanya membutuhkan 1 tick per putaran dan game RTS bisa baik-baik saja dengan 10 ticks turn, genre lain, seperti RaceSims membutuhkan lebih banyak. Dan tentu saja jangan ikat kutu logika dengan framerate, ini adalah dua hal yang terpisah.
sumber
Gim dengan penyegaran jendela aktif yang konstan sebagian besar akan dijalankan dalam mode layar penuh dan menjadi satu-satunya program (besar) dari mesin yang dikelola oleh OS. Jadi benar-benar dapat diterima untuk menggunakan 100% CPU, karena tidak ada yang lain yang membutuhkannya.
Namun , itu tidak berarti Anda harus selalu menggunakan 100% apa pun kondisi permainan Anda. Sebagian besar loop game menggunakan metode sleep sebagai pembatas framerate jika mereka selesai membuat bingkai sebelum batas frame-rate, agar tidak membuat CPU digunakan secara gratis.
Ini mungkin yang terjadi dalam contoh Anda: mesin Anda lebih cepat dari yang dibutuhkan Skyrim atau Doom 3, jadi mereka hanya menggunakan apa yang mereka butuhkan - tetapi semua yang mereka butuhkan.
Seperti yang dikatakan @KromSterm, OS biasanya sudah mengadakan polling untuk Anda, jadi tidak perlu membuat perulangan lebih cepat daripada OS. Jika Anda hanya memiliki dua inti, menggunakan 100% dari yang kedua hanya untuk deteksi peristiwa bukanlah ide yang baik, karena jika Anda hanya mentransfer acara ke loop pembaruan utama, sangat cepat untuk dijalankan. Anda harus mencoba menggunakan inti ini untuk bagian dari pekerjaan utas utama dengan utas lainnya.
sumber
Ada beberapa kelemahan dengan tujuan untuk menggunakan semua waktu CPU yang tersedia di PC atau game seluler.
Persyaratan sistem: Jika game dapat dimainkan di PC tempat Anda mengembangkan game, itu mungkin tidak dapat dimainkan di PC yang lebih lemah yang dimiliki oleh seseorang yang membeli game Anda. Membatasi penggunaan CPU akan membuat game tetap dapat digunakan pada mesin yang kemungkinan besar sudah dimiliki banyak orang. Jika Anda benar-benar ingin melihat apakah Anda membatasi pasar Anda, uji permainan PC Anda dan orang-orang dari pesaing Anda pada tenaga Atom yang dapat dilepas seperti Transformer Book, atau uji permainan ponsel Anda pada ponsel Android prabayar yang murah.
Penggunaan daya: Komputer laptop menghabiskan daya baterai lebih cepat ketika empat core digunakan pada 100 persen frekuensi penuh daripada ketika, katakanlah, dua core digunakan pada 60 persen setengah frekuensi. Jadi pastikan utas pengontrol polling Anda, utas AI, utas fisika, dan utas grafis diblokir hingga saatnya bagi mereka untuk berjalan kembali. Kecuali dalam beberapa genre yang sangat gelisah, seperti berkelahi dan ritme, Anda tidak perlu menyurvei pengontrol lebih cepat dari sekitar 60 Hz, jadi atur utas pemungutan suara Anda untuk berjalan pada penghitung waktu 60 Hz.
Variabilitas fisika: Jika fisika yang memengaruhi gameplay lebih detail pada mesin yang lebih kuat, aksi pemain yang sama akan memiliki hasil yang berbeda pada mesin yang berbeda. Ini berarti pemain mungkin bisa menipu dengan menggunakan mesin yang lebih kuat atau lebih lemah. Id's Quake III Arena terkenal karena frame rate memengaruhi ketinggian lompatan . Untuk menghindarinya, banyak game menggunakan langkah waktu tetap untuk fisika. Tetapi ini tidak mempengaruhi fisika yang terputus dari permainan, seperti efek partikel atau efek kain atau interpolasi koordinat antara bingkai fisika untuk membuat video pada kecepatan bingkai yang lebih tinggi daripada fisika. Jadi rancang fisika Anda menggunakan beberapa varian model-view-controller arsitektur, di mana hal-hal penting (percepatan, deteksi hit, dan sejenisnya) masuk dalam model dan permen mata yang dapat disesuaikan masuk dalam tampilan.
Variabilitas AI: Jika AI lebih detail pada mesin yang lebih kuat, musuh akan berperilaku berbeda pada mesin yang berbeda. Misalnya, dalam implementasi Go atau Catur, lawan akan lebih lemah pada PC yang lebih lemah, dan pemain dapat menipu dengan memainkan game pada PC yang lebih lemah atau dengan menjalankan proses latar belakang seperti transkoding antivirus atau video atau pembaruan sistem operasi.
sumber