otimização multi em jogos é mais complicado que aplicativos, para se usar 8 núcleos por exemplo, não basta o programador lançar 8 threads, ele precisa lançar muito mais que isso, umas 3 ou 4 vezes mais threads.
Isso acontece porque diferente de aplicativos em que cada thread trabalha de forma independente, em jogos, cada thread está condicionado ao trabalho dos outros, ou seja, quando um núcleo termina um serviço de física por exemplo, ele não pode ir imediatamente processar a física do próximo frame, precisa antes esperar que os outros núcleos terminem de fazer as partes de cada um deles, e somente quando o frame estiver pronto, eles saltam para o próximo.
o que um nucleo pode fazer é tentar pegar outro thread que ainda não esteja sendo processado. Se o chip tem 4 cores, e o jogo lança 8 threads, enquanto o thread principal e mais pesado é processado, os outros 3 cores ficam processando os outros 7 threads mais leves, fazendo mais de um thread cada um. É por isso para usar 100% de um chip quad core, um jogo antigo que lançava 4 threads não é suficiente, isso só acontece em jogos modernos que lançam de 8 threads pra cima.
E teoricamente, para usar 100% de um chip de 8 cores, você precisaria de um jogo que lançasse uns 24 threads. Não é a mesma coisa que cinebench, onde o numero de threads lançadas é igual ao numero de nucleos.
Além disso, não adianta fragmentar demais a quantidade de threads, se ainda existir uma threrad gigante super pesada que vai atrasar todo o processo. O tempo que ela leva para processar está vinculada diretamente a performance single thread do chip, e essa é a razão dela ainda ser importante em jogos. Se existe umas 20 threads lançadas com peso "100", e uma thread com peso "1000", no fim das contas, toda essa fragmentação vai ser inútil, porque ainda vai ter uma thread super pesada sendo o gargalo da CPU.