A GPU é um ótimo mecanismo para pequenas operações altamente previsíveis, o tipo de que é necessário aos milhares para pintar uma única imagem em uma tela (buffer de memória) para ser exibido em uma tela.
A GPU pode realizar centenas de operações em um único buffer de memória simultaneamente usando o que é conhecido como shader programs, isso é usado para deixar as imagens bonitas, adicionando recursos que tornam os jogos modernos tão impressionantes. O problema é que, devido a sua necessidade de alta velocidade e rendimento de dados, esses programas precisam ser continuamente alterados, apontados para novos dados e geralmente gerenciados.
Esta é apenas uma das coisas que uma CPU faz para jogos modernos. A placa gráfica faz com que pareça bonito, enquanto a CPU diz apenas como para torná-lo bonito. Muitos jogos de estratégia também exigem o rastreamento em tempo real de muitos milhares de objetos no jogo e o que esses objetos estão fazendo em qualquer momento.
Por exemplo, vou lhe dar uma ideia usando um jogo, o Supreme Commander.
Você tem uma única unidade. Bastante simples.
Essa unidade pode estar em movimento, caso em que você precisa acompanhar os vetores de direção e velocidade para esse objeto.
A unidade tem uma arma e, nesse caso, você precisa rastrear se está ou não disparando.
A arma dispara balas, para cada bala disparada o jogo tem que criar um objeto detalhando a direção e a velocidade dessa bala, ou pelo menos criar uma linha virtual a partir da arma e então testar se outros objetos no jogo se cruzam linha.
Digamos que não seja uma arma simples, mas sim algo como um lançador balístico, ela precisa de uma simulação balística mais realista. A bala precisa ser rastreada enquanto cruza o mapa, tendo sua velocidade e altura constantemente simuladas por um modelo balístico (próximo) do mundo real. Isso precisará ser feito centenas de vezes por segundo para que o projétil pareça correto.
Isto é tudo ao mesmo tempo que dizer à placa de vídeo apenas o que pintar de onde você mente.
O projétil precisa ser constantemente testado para ver se ele está ocupando o mesmo espaço que uma unidade inimiga, caso em que você tem um ataque, caso contrário, continue.
Se ocorrer um acerto, você precisa calcular o que acontece, a unidade recebe dano ou é morta? Em ambos os casos, precisamos mostrar ao usuário algum tipo de animação "estridente"? Pedaços de estilhaços voando, esse tipo de coisa ... Nesse caso, cada um desses fragmentos de estilhaços precisa ser rastreado, animado e eventualmente destruído, para que eles não precisem mais ser simulados.
Agora imagine que cada jogador pode ter até 500 unidades, todas potencialmente capazes de se mover, para disparar várias armas ou lançadores de mísseis, para ter que testar se há inimigos próximos para atirar em primeiro lugar. Potencialmente, milhares de interações de balas, caminhos de mísseis e projéteis balísticos que precisam ser todos criados, rastreados, testados e têm ações visíveis que acontecem como resultado. Coloque 8 jogadores nesse jogo e você terá rapidamente vários milhares de unidades com dezenas de milhares de projéteis em jogo, todos com "objetos" de programação associados que precisam ser criados, rastreados e destruídos ao longo da vida do objeto.
Essa é uma quantia enorme de cálculos que é necessária para exibir cada quadro de gráficos, e isso antes de você dizer à placa gráfica o que ela mostra.
Em muitos jogos você pode (meio) ignorar qualquer coisa que esteja fora da tela ou fora de área no momento, mas não com um jogo RTS, cada unidade pode se mover, disparar e morrer independentemente do que você está olhando naquele momento dado. Cada unidade também tem um "AI" embutido para dizer como deve se mover, como evitar obstáculos, como chegar ao inimigo, quando deveria estar atirando, como ele pode disparar.
Essas coisas não se prestam ao tipo de coisa que uma placa gráfica poderia facilmente fazer. Placas gráficas funcionam bem executando centenas de cópias de um único programa pequeno contra grandes blocos de dados e não se dão muito bem com o tipo de cálculos grandes e longos que cada etapa do cálculo do status de uma única unidade está fazendo. Claro que ele poderia lidar com os projéteis balísticos e coisas assim, mas para cada bit que você rastreia, você perde energia que poderia ser usada para exibir imagens.
As CPUs são muito poderosas e podem lidar com programas de ramificação muito mais complexos do que uma placa gráfica e são muito mais adequadas para gerenciamento em larga escala de um sistema geral, enquanto placas gráficas são boas para processamento de números e exibindo fotos bonitas. p>