Bir oyunun% 100 CPU kullanması normal midir?


23

Oyun motorumda çok iş parçacıklı giriş işleme uygulamıştım; burada işletim sisteminden girdi toplamak için çağıran kod ve zaman damgaları ayrı bir iş parçacığında ve ana iş parçasındaki her karede bir araya toplanmış girdiyi yiyorum. mantıksal oyun zamanı. Hepsi işe yarıyor, ancak bu kurulum işlemcimin% 100'ünü kullanıyor. İki çekirdeğim var ve oyunu çalıştırırken% 100'e kadar çıkacak.

Bunu yapıp yapmadıklarını görmek için diğer oyunları kontrol ettim. Örneğin, Skyrim ve Doom 3,% 60'ın üzerinde bir CPU'yla iyi görünüyor.

% 100 CPU'yu kullanmak için çok iş parçacıklı girdi kullanan bir oyun için kabul edilebilir mi? Değilse, bu tür oyunların giriş iş parçacığı tarafından CPU kullanımını azaltmak için kullandıkları bazı püf noktaları nelerdir?


7
Öyleyse, temel olarak, sürekli olarak OS'yi yeni olaylar için sorgulayan bir döngü sırasında sonsuz bir iş parçacığınız var mı? while true do CheckForEvents;
Kromster, Monica 25-15 Eylül’e

5
Bir uygulama, kullanım ve CPU hızından bağımsız olarak CPU zamanının% 100'ünü kullanıyorsa, doğru bir hata sayılabilir. Monitör yenileme döngüsü başına bir kare oluşturmak için gerekenden daha fazla CPU zamanı kullanmamalısınız.
kasperd

3
@TheLightSpark Oy kullanma ipliği uyuyamıyor mu? Sürekli döngü yapıyor ve uyumadan kontrol ediyorsanız, muhtemelen gerekenden çok daha fazla CPU zamanı tüketeceksiniz.
Luke,

3
Re @Luke: Anketler arasında sadece bir milisaniyelik bir uyku bile olsa CPU kullanımını önemli ölçüde azaltabilirsiniz. Bir süre önce, bir girdi dosyasını alan ve bir çıktı dosyasını aşağı yukarı aynı boyutta yapan bir komut satırı aracı için bir GUI yazdım. Yüzdeyi tahmin etmek için, çıktı dosyasının dosya boyutunu okudum ve ilerleme çubuğunu (kullanarak while (true)) güncelledim . Bunu yapmak için bir CPU'nun% 90 + kullanıldı. Eklenen Thread.Sleep(5)işlem CPU kullanımını% 40'ın altına düşürdü. Anketler arasında 25 milisaniyeye gitmek,% 10'un altına düşürdü.
Cole Johnson

2
@AlecTeal Söylediklerime yeterince dikkat etmediğini düşünüyorum. Daha iyi grafikler oluşturmak aynı kullanım değildir ve elbette daha iyi grafikler sağlamak CPU tüketimini artıracaktır. Ancak daha hızlı bir CPU'ya geçmek, kodunuzun aynı sonucu elde etmek için sadece daha fazla döngü harcamasına neden olursa, kodunuz hatalı olur. Belirli bir CPU ile hangi grafik kalitesinin elde edilebileceğini otomatik olarak ölçmek makul bir varsayılandır. Ancak, kullanıcıların pil gücüyle çalışırken veya arka plan işleri için CPU'ya ihtiyaç duymaları durumunda seçim yapmalarına izin vermelisiniz.
kasperd

Yanıtlar:


41

Evet, gerçek zamanlı bir oyunda mümkün olduğu kadar hızlı ve iyi performans göstermek için% 100 CPU kullanmaya çalışmak normaldir . Böylece oyuncu saniyede kare veya iyi bir fizik simülasyonu veya PC'sinin sağlayabileceği herhangi bir şeyi görür.

Senin durumunda - Hayır, bu bir iş parçacığı almak ve bir döngüdeki olaylar için anket yapmak için yetersiz bir tasarıma benziyor while true do CheckForEvents;. Yanılıyorsam düzelt, ancak işletim sistemi olayları zaten oyluyor. Her kene kez ana iplikten onları kontrol etmelisin.

Ana oyun döngüsü, saniyede 30+ tik atmak için yeterince hızlı olmalıdır; bu, birçok oyunda oy kullanma komutları için oldukça yeterlidir. Oyuncu, komutları örneğin 0-33ms sonra işlenirse bir fark görmez. Öte yandan, bu ekstra CPU çekirdeğini, MUCH daha iyi yapay zeka veya fizik veya başka herhangi bir şey gibi daha faydalı işler için kullanabilirdiniz.

PS Yorumlarda açıklığa kavuşturulması istendiği gibi, her türlü oyun için yukarıdaki sayıları kör almayın. TBS oyunu, tur başına sadece 1 tene ihtiyaç duyabilse de, RTS oyunu 10 turda iyi olsa da, RaceSims gibi diğer türler de çok daha fazla ihtiyaç duyuyor. Ve tabii ki mantık kenelerini kare hızına bağlamayın, bunlar iki ayrı şeydir.


5
Bu soruyu geçersiz kıldım, ama sonra saniyede 30 tik önerdiğini görüyorum. IMHO (ve diğer birçok oyuncununki), saniyede 60 tik (ve dolayısıyla 60 kare) hedeflemelisiniz. Birçok insan için 60 FPS daha akıcı görünüyor, daha fazla tepki veriyor ve belirli bir kullanıcı alt grubuna hareket hastalığı verme olasılığı daha düşük.
Nzall

4
Giriş için 33ms gecikme çok belirgindir ...
Synxis 25:15

1
@NateKerkhofs: 10 tik'in olağan olduğu RTS arkaplanından geldim. Bu geniş bir dünya, bunun hakkında detaylar ekleyeceğim. Gösterdiğin için teşekkürler.
Kromster destek Monica diyor

1
@KromStern: Nate için tamamen konuşamıyorum, ancak üçüncü paragraf "30hz hedefiniz olmalı" olarak da yorumlanabilir, ancak "30hz tahammül edebilecek en düşük miktardır" olarak da yorumlanabilir (bu, ne demek istediğinizi olabilir) ).
Sean Middleditch

1
% 100 CPU kullanımı korkunç bir uygulamadır. % 100 CPU kullanması gereken herhangi bir şekilde, şekil veya biçimde olmayan şeyler için dizüstü bilgisayar kullanıcılarını beceriyorsunuz. Çerçeveleri monitöre verimli bir şekilde besleyebilecek uygun bir oyun döngüsü kodlayın.
Chris Dennett,

9

Sürekli aktif pencere yenileme özelliğine sahip bir oyun çoğunlukla tam ekran modunda çalıştırılacak ve işletim sistemi tarafından yönetilen makinenin tek (büyük) programı olacak. Bu yüzden, CPU'nun% 100'ünü kullanmak tamamen kabul edilebilir, çünkü başka hiçbir şeye ihtiyacınız yok.

Ancak , bu elbette, oyun durumunuz ne olursa olsun% 100 kullanmak zorunda kalmazsınız. Oyun döngülerinin çoğu , CPU'yu hiçbir şey için kullanmamak için kare hız sınırından önce bir kare oluşturmayı tamamladılarsa bir kare sınırlayıcı olarak bir uyku yöntemi kullanır .
Muhtemelen örneklerinizde olan şey şu: makineniz Skyrim veya Doom 3'ün çalışması gerekenden daha hızlı, bu yüzden sadece ihtiyaç duydukları şeyi kullanıyorlar - ihtiyaç duydukları şeyleri de.

@KromSterm'in dediği gibi, OS zaten sizin için olayları zaten araştırır, bu yüzden OS'den daha hızlı bir döngü yapmanıza gerek yoktur. Yalnızca iki çekirdeğiniz varsa, ikincisinin% 100'ünü yalnızca olay algılama için kullanmak iyi bir fikir değildir, çünkü olayları yalnızca ana güncelleme döngüsüne aktarırsanız, yürütülmesi çok hızlıdır. Bu çekirdeği, ana iş parçacığı işinin bir parçası için başka bir iş parçacığı ile kullanmaya çalışmalısınız.


"bir uyku yöntemi kullan" - Bunun bir kare sınırlayıcı olarak bilindiğini düşünmekte haklı mıyım?
Gusdor

3
Uyku, yenileme hızını izlemek için çerçeveleri sınırlamaksa, çerçeveyi sınırlamanın doğru bir yöntemi değildir, o zaman daha iyi olan donanım destekli vsync kullanmaktır (ya da varsa nvidia'nın g-sync özelliğini kullanmak)
Sarge Borsch

8

Bir bilgisayar veya mobil oyunda kullanılabilir tüm CPU zamanını kullanmayı amaçlamanın bazı sakıncaları vardır.

Sistem gereksinimleri: Oyun, oyununuzu geliştirdiğiniz PC'de oynanabilirse, oyununuzu satın alan birinin sahip olduğu daha zayıf bir bilgisayarda oynatılamayabilir. CPU kullanımını sınırlamak, oyunu daha fazla kişinin sahip olması muhtemel makinelerde kullanılabilir kılar. Pazarınızı sınırlandırıp sınırlamadığınızı gerçekten görmek istiyorsanız, PC oyunlarınızı ve rakiplerinizin oyunlarını Transformer Book gibi Atom destekli bir ayrılabilir cihazda test edin ya da mobil oyunlarınızı ucuz bir ön ödemeli Android telefonla test edin.

Güç kullanımı: Bir dizüstü bilgisayar, tam frekansın yüzde 100'ünde dört çekirdek kullanıldığında, yani iki çekirdeğin yarı frekansın yüzde 60'ında kullanıldığında pilini daha hızlı tüketir. Bu nedenle, denetleyicinizin oy verme iş parçacığının, AI iş parçacığının, fizik iş parçacığının ve grafik iş parçacığının yeniden çalışma zamanı gelene kadar engellendiğinden emin olun. Mücadele ve ritim gibi bir kaç seğirmeli tür dışında, denetleyicileri yaklaşık 60 Hz'den daha hızlı sorgulamanıza gerek kalmaz, bu nedenle yoklama ipliğinizi 60 Hz zamanlayıcıda çalışacak şekilde ayarlayın.

Fizik değişkenliği: Oyunu etkileyen fizik, daha güçlü makinelerde daha ayrıntılıysa, aynı oyuncunun farklı makinelerde farklı sonuçları olacaktır. Bu, oyuncunun daha güçlü veya daha zayıf bir makine kullanarak hile yapabileceği anlamına gelir. Id's Quake III Arena , kare hızının zıplama yüksekliğini etkilemesi nedeniyle ünlü . Bundan kaçınmak için, birçok oyun fizik için sabit bir zaman adımı kullanır. Ancak bu, parçacık efektleri veya kumaş efektleri gibi oyunla bağlantısı kesilen fiziği veya videoyu fizikten daha yüksek kare hızında görüntülemek için fizik çerçeveleri arasında koordinatların enterpolasyonunu etkilemez. Bu nedenle, bazı model-görünüm denetleyicileri kullanarak fizik tasarımınızı yapın temel şeylerin (ivme, isabet algılama ve benzeri) modele girdiği ve ayarlanabilir göz şekeri görünümüne girdiği mimari.

AI değişkenliği: AI daha güçlü makinelerde daha ayrıntılıysa, farklı makinelerde düşmanlar farklı davranacaktır. Örneğin, bir Go veya Satranç uygulamasında, rakip daha zayıf bir PC'de daha zayıf olacaktır ve oyuncular oyunu daha zayıf bir PC'de oynayarak veya virüsten koruma veya video dönüştürme veya işletim sistemi güncellemeleri gibi arka plan işlemlerini gerçekleştirerek hile yapabilir.


4
Güç Kullanımı için +1. Özellikle mobil ve tablet endüstrisini göz önünde bulundurmanız gerektiği gibi, bunun son derece önemli olduğu yerler.
akaltar

1
Güç kullanımı masaüstlerinde bile gürültüyü etkiler. Modern masaüstlerinde, sistem soğukken fanlarının yavaş ve sessiz kalması sık rastlanan bir durumdur. Ayrıca, kullanıcı oynatırken bir videoyu (düşük öncelikli) kodluyor, dolayısıyla boş CPU zamanı boşa harcanmıyor. Ya da seğirmeye akan oyuncular için, video kodlama için daha fazla döngü bırakmak büyük bir iştir ve daha yüksek kalitede video sağlar. (video kodlama CPU zamanı, bit hızı ve kalite arasında üç yönlü bir işlemdir, bu nedenle daha fazla CPU zamanı aynı bit hızında daha yüksek kalitede gerçek zamanlı kodlama anlamına gelir.)
Peter Cordes

1
Güç kullanımı birincil düşünce olmalı, diğer tüm hususlar ikincildir, IMHO. % 100 CPU'yu kullanacağım tek şey (eğer gerçekten yardımcı olduysa!) VR olayı.
Chris Dennett,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.