La GPU es un gran motor para pequeñas operaciones altamente predecibles, del tipo de las cuales se requieren por miles para pintar una sola imagen en un lienzo (búfer de memoria) para que se muestre en una pantalla.
La GPU puede realizar cientos de operaciones en un solo búfer de memoria simultáneamente usando lo que se conoce como programas de sombreado, esto se usa para hacer que las imágenes sean bonitas, agregando características que hacen que los juegos modernos se vean tan impresionantes. El problema es que debido a su requerimiento de alta velocidad y rendimiento de datos, estos programas necesitan ser cambiados continuamente, apuntados a nuevos datos y generalmente administrados.
Esta es solo una de las cosas que hace una CPU para los juegos modernos. La tarjeta gráfica lo hace ver bonito, mientras que la CPU le dice cómo hacerlo bonito. Muchos juegos de estrategia también requieren el seguimiento en tiempo real de miles de objetos en el juego y lo que esos objetos están haciendo en un momento dado.
Por ejemplo, te daré una idea usando un juego, Supreme Commander.
Tienes una sola unidad. Suficientemente simple.
Esa unidad puede moverse, en cuyo caso debe realizar un seguimiento de los vectores de dirección y velocidad para ese objeto.
La unidad tiene una pistola, en cuyo caso debe rastrear si está disparando o no.
El arma dispara balas, por cada bala disparada el juego tiene que crear un objeto que detalle la dirección y la velocidad de esa bala, o al menos crear una línea virtual desde el arma y luego probar para ver si otros objetos en el juego se cruzan con esa línea.
Digamos que no es un arma simple, sino que es algo así como un lanzador balístico, necesita una simulación balística más realista. La bala necesita ser rastreada mientras cruza el mapa, teniendo su velocidad y altura constantemente simuladas por un modelo balístico (cercano) del mundo real. Eso tendrá que hacerse cientos de veces por segundo para que el proyectil se vea bien.
Todo esto es al mismo tiempo que decirle a la tarjeta gráfica qué pintar donde más le importe.
El proyectil necesita ser probado constantemente para ver si está ocupando el mismo espacio que una unidad enemiga, en cuyo caso tiene un impacto, de lo contrario continúe.
Si ocurre un golpe, entonces debes calcular qué sucede, ¿la unidad sufre daño o muere? En cualquier caso, ¿debemos mostrarle al usuario algún tipo de animación "explosiva"? Trozos de metralla volando, ese tipo de cosas ... En cuyo caso, cada uno de esos pedazos de metralla necesita ser rastreado y animado y eventualmente destruido para que ya no necesite simularse.
Ahora imagine que cada jugador puede tener hasta 500 unidades, todas potencialmente capaces de moverse, disparar múltiples armas o lanzadores de misiles, para tener que probar si hay enemigos cercanos para disparar en primer lugar. Potencialmente miles de interacciones de balas, rutas de misiles y proyectiles balísticos que deben crearse, rastrearse, probarse y tener acciones visibles que sucedan como resultado. Pon a 8 jugadores en ese juego y rápidamente tendrás varios miles de unidades con decenas de miles de proyectiles en juego, todos con "objetos" de programación asociados que deben crearse, rastrearse y destruirse durante la vida útil del objeto.
Esa es una cantidad enorme de cálculos que se necesitan para mostrar todos y cada uno de los cuadros de gráficos, y eso es antes de decirle a la tarjeta gráfica lo que puede mostrar.
En muchos juegos puedes (un poco) ignorar cualquier cosa que esté fuera de la pantalla o fuera del área en ese momento, pero no es así con un juego de estrategia en tiempo real, cada unidad puede moverse, disparar y morir independientemente de lo que estás viendo. momento. Cada unidad también tiene una "IA" incorporada para indicarle cómo debe moverse, cómo evitar obstáculos, cómo llegar al enemigo, cuándo debe disparar, cómo puede disparar.
Estas cosas no se prestan al tipo de cosas que una tarjeta gráfica podría hacer fácilmente. Las tarjetas gráficas funcionan bien ejecutando cientos de copias de un solo programa pequeño contra grandes bloques de datos y no funcionan demasiado bien con el tipo de cálculos grandes y largos que cada paso de calcular el estado de una sola unidad está haciendo. Claro que podría manejar los proyectiles balísticos y cosas así, pero por cada bit que rastrea de esa manera pierde energía que podría usarse para mostrar imágenes.
Las CPU son bastante potentes y pueden manejar programas de ramificación mucho más complejos que una tarjeta gráfica, y son mucho más adecuadas para la administración a gran escala de un sistema general, mientras que las tarjetas gráficas son buenas para el crujido de números y mostrar imágenes bonitas.