De um ponto de vista de supercomputação, é melhor não pensar em porcentagem de CPU / GPU, mas sim determinar quantas operações seu problema precisa e depois compará-lo ao desempenho máximo do sistema.
Se você obtiver 100% de utilização da CPU, isso não significa necessariamente que você obtenha todo o desempenho do sistema. As CPUs geralmente podem fazer várias coisas diferentes ao mesmo tempo, digamos uma divisão e uma adição. Se você puder iniciar a divisão mais cedo, ela poderá ser sobreposta com a adição. Sua CPU de desktop provavelmente tem uma unidade fora de ordem que irá reordenar as instruções para se beneficiar de tais sobreposições. Ou se você tiver o seguinte programa:
if (expr1)
expr2;
else
expr3;
Um reordenamento da CPU tentará calcular as três expressões ao mesmo tempo e depois descartará o resultado de uma delas. Isso torna mais rápido em geral. Se você tem algum bloqueador em seu programa e não pode reordená-lo, então você está utilizando menos pistas na CPU, mas provavelmente ele ainda mostrará 100%.
Então você tem recursos SIMD nas CPUs, que são operações vetoriais. É como o GPGPU-light, no sentido de que você normalmente só tem quatro ou oito operações ao mesmo tempo, as GPUs têm 32 ou 64. Ainda assim, você tem que usar isso para ativar os FLOPS.
Coisas como o compartilhamento falso podem levar a um custo de sincronização pesado, que geralmente aparece como carga do kernel no Linux. A CPU é completamente usada, mas você não tem muito processamento útil.
Eu fiz alguma programação em uma máquina IBM Blue Gene / Q. Tem muitos níveis hierárquicos ( esquema de desatualizado Blue Gene / L ) e é Portanto, é difícil programar com eficiência. Você terá que usar a hierarquia completa até SIMD e SMT (Intel chama isso de HyperThreading) para obter o desempenho.
E a rede geralmente limita você. Portanto, verifica-se que é mais rápido no tempo (relógio de parede) calcular as coisas em várias CPUs ao mesmo tempo, em vez de comunicá-las pela rede. Isso colocará mais carga nas CPUs e fará o programa rodar mais rápido. Mas a taxa de transferência real do programa não é tão boa quanto parece nos números brutos.
Se você adicionar GPUs ao mix, ficará ainda mais difícil orquestrar tudo isso para gerar desempenho. Essa será uma das coisas que vou começar a fazer na minha tese de mestrado da QCD da Lattice em alguns meses.