Acabo de implementar el manejo de entrada de subprocesos múltiples en mi motor de juego, donde el código que sondea el sistema operativo para recopilar información de él y las marca de tiempo está en un hilo separado y cada cuadro en el hilo principal acabo de comer la entrada reunida hasta un Tiempo de juego lógico. Todo funciona, pero esta configuración está utilizando el 100% de mi CPU. Tengo dos núcleos, y va hasta el 100% mientras ejecuto mi juego.
He consultado con otros juegos para ver si ellos también lo hacen. Por ejemplo, Skyrim y Doom 3 parecen estar bien con poco más del 60% de CPU.
¿Es aceptable que un juego que usa entrada de subprocesos múltiples use hasta un 100% de CPU? Si no, ¿cuáles son algunos trucos que usan estos juegos para reducir el uso de la CPU por el hilo de entrada?
fuente
while true do CheckForEvents;
while (true)
). Utilicé el 90% + de una CPU para hacerlo. AgregadoThread.Sleep(5)
a, redujo el uso de la CPU a menos del 40%. Pasar a 25 milisegundos entre las encuestas lo redujo a menos del 10%.Respuestas:
Sí, esto es normal para un juego en tiempo real para tratar de usar el 100% de la CPU para rendir lo más rápido y bien posible. Para que el jugador vea tantos fotogramas por segundo o tan buena simulación física o cualquier otra cosa que su PC pueda proporcionar.
En su caso, no, esto parece un diseño ineficiente, para tomar un hilo y hacerlo sondear eventos en un bucle (
while true do CheckForEvents;
). Corrígeme si me equivoco, pero el sistema operativo ya sondea los eventos. Debes verificarlos desde tu hilo principal una vez cada tic.El ciclo principal del juego debe ser lo suficientemente rápido como para correr a más de 30 tics por segundo, lo cual es suficiente para sondear comandos para muchos juegos. El jugador no verá una diferencia si sus comandos se procesan, por ejemplo, 0-33 ms después. Por otro lado, podría haber utilizado ese núcleo de CPU adicional para tareas más beneficiosas, como una IA o física mucho mejor o lo que sea.
PD: como se solicitó aclarar en los comentarios, no tome los números anteriores a ciegas para todo tipo de juegos. Mientras que el juego TBS podría necesitar solo 1 tick por turno y el juego RTS podría estar bien con 10 ticks por turno, otros géneros, como RaceSims, necesitan mucho más. Y, por supuesto, no vincule los tics lógicos con la velocidad de fotogramas, estas son dos cosas separadas.
fuente
Un juego con una actualización constante de la ventana activa se ejecutará principalmente en modo de pantalla completa y será el único programa (grande) de la máquina administrado por el sistema operativo. Por lo tanto, es totalmente aceptable usar el 100% de la CPU, porque nada más debería necesitarlo.
Sin embargo , eso no significa, por supuesto, que siempre debes usar el 100%, sea cual sea tu estado de juego. La mayoría de los bucles de juego usan un método de suspensión como delimitador de velocidad de fotogramas si terminaron de procesar un fotograma antes del límite de velocidad de fotogramas, para no hacer que la CPU se use para nada.
Esto es probablemente lo que sucede en sus ejemplos: su máquina es más rápida de lo que Skyrim o Doom 3 necesitan para ejecutarse, por lo que solo usan lo que necesitan, pero todo lo que necesitan.
Como dijo @KromSterm, el sistema operativo generalmente ya sondea eventos para usted, por lo que no es necesario hacer un ciclo más rápido que el sistema operativo. Si solo tiene dos núcleos, usar el 100% del segundo solo para la detección de eventos no es una buena idea, porque si solo transfiere eventos al ciclo de actualización principal, es muy rápido de ejecutar. En su lugar, debe intentar usar este núcleo para una parte del trabajo del subproceso principal con otro subproceso.
fuente
Hay algunos inconvenientes de utilizar todo el tiempo de CPU disponible en una PC o juego móvil.
Requisitos del sistema: si el juego se puede jugar en la PC donde desarrollas tu juego, es posible que no se pueda jugar en una PC más débil propiedad de alguien que compró tu juego. Limitar el uso de la CPU mantendrá un juego utilizable en máquinas que es probable que ya tengan más personas. Si realmente desea ver si está limitando su mercado, pruebe sus juegos de PC y los de sus competidores en un dispositivo desmontable con tecnología Atom como Transformer Book, o pruebe sus juegos móviles en un teléfono Android prepago de bajo costo.
Uso de energía: una computadora portátil agota su batería más rápido cuando se usan cuatro núcleos al 100 por ciento de la frecuencia total que cuando, por ejemplo, se usan dos núcleos al 60 por ciento de la frecuencia media. Por lo tanto, asegúrese de que su hilo de sondeo del controlador, el hilo AI, el hilo físico y el hilo gráfico estén bloqueados hasta que sea hora de que se ejecuten nuevamente. Excepto en algunos géneros muy nerviosos, como las peleas y el ritmo, no necesitará sondear los controladores más rápido que aproximadamente 60 Hz, así que configure su hilo de votación para que se ejecute en un temporizador de 60 Hz.
Variabilidad física: si la física que afecta el juego es más detallada en máquinas más fuertes, la misma acción del jugador tendrá diferentes resultados en diferentes máquinas. Esto significa que el jugador puede hacer trampa usando una máquina más fuerte o más débil. Id's Quake III Arena es conocido por hacer que la velocidad de fotogramas afecte la altura del salto . Para evitar esto, muchos juegos usan un paso de tiempo fijo para la física. Pero esto no afecta a la física que está desconectada de la jugabilidad, como los efectos de partículas o los efectos de tela o la interpolación de coordenadas entre cuadros de física para reproducir video a una velocidad de cuadro mayor que la física. Así que diseña tu física usando alguna variante de model-view-controller arquitectura, donde las cosas esenciales (aceleración, detección de golpes y similares) van en el modelo y los dulces visuales ajustables van a la vista.
Variabilidad de la IA: si la IA es más detallada en máquinas más fuertes, los enemigos se comportarán de manera diferente en diferentes máquinas. Por ejemplo, en una implementación de Go o Chess, el oponente será más débil en una PC más débil, y los jugadores pueden hacer trampa jugando el juego en una PC más débil o ejecutando procesos en segundo plano, como la transcodificación de antivirus o video o las actualizaciones del sistema operativo.
fuente