Apakah normal jika gim menggunakan CPU 100%?

23

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?

Percikan Cahaya
sumber
7
Jadi, apa yang Anda katakan, pada dasarnya Anda memiliki utas dengan loop sementara tanpa akhir yang terus-menerus memilih OS untuk acara baru? while true do CheckForEvents;
Kromster berkata mendukung Monica
5
Jika suatu aplikasi menggunakan 100% dari waktu CPU terlepas dari penggunaan dan kecepatan CPU, maka itu dapat dianggap sebagai bug. Anda seharusnya tidak menggunakan lebih banyak waktu CPU daripada yang dibutuhkan untuk membuat frame per siklus refresh monitor.
kasperd
3
@TheLightSpark Apakah utas pemungutan suara tidak tidur? Jika Anda terus-menerus mengulang dan memeriksa tanpa tidur, Anda mungkin akan menghabiskan lebih banyak waktu CPU daripada yang diperlukan.
Luke
3
Re @Luke: Bahkan tidur hanya dalam satu milidetik di antara jajak pendapat akan secara drastis mengurangi penggunaan CPU. Beberapa waktu yang lalu, saya menulis GUI untuk alat baris perintah yang mengambil file input dan membuat file output berukuran hampir sama. Untuk memperkirakan persentase, saya membaca ukuran file dari file output dan memperbarui progress bar (menggunakan while (true)). Digunakan 90% + dari satu CPU untuk melakukannya. Ditambahkan Thread.Sleep(5)itu menyebabkan penggunaan CPU turun menjadi di bawah 40%. Menjadi 25 milidetik di antara jajak pendapat menjadikannya di bawah 10%.
Cole Johnson
2
@AlecTeal Saya pikir Anda tidak memperhatikan apa yang saya katakan. Rendering grafik yang lebih baik bukanlah penggunaan yang sama, dan tentu saja memungkinkan grafis yang lebih baik akan meningkatkan konsumsi CPU. Tetapi jika beralih ke CPU yang lebih cepat akan menyebabkan kode Anda hanya menghabiskan lebih banyak siklus menghasilkan hasil yang sama persis, kode Anda cacat. Secara otomatis mengukur kualitas grafis apa yang dapat diberikan dengan CPU tertentu adalah standar yang masuk akal. Tetapi Anda harus mengizinkan pengguna untuk memilih jika mereka menggunakan daya baterai atau juga membutuhkan CPU untuk pekerjaan latar belakang.
kasperd

Jawaban:

41

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.

Kromster berkata mendukung Monica
sumber
5
Saya akan menjawab pertanyaan ini, tetapi kemudian saya melihat Anda merekomendasikan 30 ticks per detik. IMHO (dan orang-orang dari banyak gamer lainnya), Anda harus mengincar 60 ticks (dan karenanya 60 frame) per detik. 60 FPS bagi banyak orang terlihat lebih lancar, bermain lebih responsif dan kecil kemungkinannya memberikan subset tertentu dari pengguna mabuk perjalanan.
Nzall
4
Penundaan input 33ms sangat nyata ...
Synxis
1
@NateKerkhofs: Saya berasal dari latar belakang RTS, di mana 10 ticks biasa. Ini dunia yang luas, saya akan menambahkan detail tentang itu. Terima kasih telah menunjukkan.
Kromster mengatakan mendukung Monica
1
@KromStern: Saya tidak bisa berbicara untuk Nate sepenuhnya, tetapi paragraf ketiga dapat diartikan sebagai "30hz harus menjadi target Anda" meskipun itu juga dapat diartikan sebagai "30 hz adalah minimum yang dapat Anda toleransi" (yang mungkin Anda maksudkan ).
Sean Middleditch
1
Menggunakan 100% CPU adalah praktik yang mengerikan. Anda mengacaukan pengguna laptop untuk hal-hal yang tidak dengan cara, bentuk atau bentuk apa pun perlu menggunakan CPU 100%. Kode loop game yang tepat yang dapat memberi makan frame ke monitor secara efisien.
Chris Dennett
9

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.

Aracthor
sumber
"gunakan metode tidur" - apakah saya benar dalam berpikir bahwa ini dikenal sebagai pembatas framerate?
Gusdor
3
sleep bukanlah metode pembatasan bingkai yang akurat, jika tujuannya adalah membatasi frame untuk memantau kecepatan refresh, maka yang lebih baik adalah menggunakan vsync yang didukung perangkat keras (atau sinkronisasi-g nvidia, jika tersedia)
Sarge Borsch
8

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.

Damian Yerrick
sumber
4
+1 untuk Penggunaan Daya. Terutama karena Anda harus mempertimbangkan industri ponsel dan tablet, di mana ini sangat penting.
akaltar
1
Penggunaan daya juga memengaruhi kebisingan, bahkan pada desktop. Ini umum untuk desktop modern untuk menjaga penggemar mereka lambat & tenang ketika sistem dingin. Juga, mungkin pengguna meng-encode video (dengan prioritas rendah) saat diputar, sehingga waktu CPU yang tersisa tidak terbuang sia-sia. Atau bagi pemain yang melakukan streaming dengan kedutan, meninggalkan lebih banyak siklus untuk encoding video adalah masalah besar, dan memungkinkan video berkualitas lebih tinggi. (Pengkodean video merupakan pertukaran tiga arah antara waktu, bitrate, dan kualitas CPU, jadi lebih banyak waktu CPU berarti pengodean waktu-nyata dengan kualitas lebih tinggi pada bitrate yang sama.)
Peter Cordes
1
Penggunaan daya harus menjadi pertimbangan utama, semua pertimbangan lain sekunder, IMHO. Satu-satunya hal yang saya akan gunakan untuk CPU 100% (jika benar-benar membantu!) Adalah hal-hal VR.
Chris Dennett