Do ponto de vista da supercomputação, é melhor não pensar na porcentagem de carga da CPU / GPU, mas sim determinar quantas operações o seu problema em questão precisa e depois comparar isso com o desempenho máximo do sistema.
Se você obtiver 100% de utilização da CPU, isso não significa necessariamente que você obtém todo o desempenho do sistema. Muitas vezes, as CPUs podem fazer várias coisas diferentes ao mesmo tempo, digamos uma divisão e uma adição. Se você pode iniciar a divisão mais cedo, ela poderá se sobrepor à adição. A CPU da sua área de trabalho provavelmente possui uma unidade fora de ordem que reordenará as instruções para se beneficiar dessas sobreposições. Ou se você possui o seguinte programa:
if (expr1)
expr2;
else
expr3;
Uma CPU reordenada tentará calcular as três expressões ao mesmo tempo e depois descartará o resultado de uma delas. Isso o torna mais rápido no geral. Se você possui algum bloqueador em seu programa e não pode reordenar, está utilizando menos faixas na CPU, mas provavelmente ainda mostrará 100%.
Então você tem recursos SIMD nas CPUs, que são operações vetoriais. É como 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ê precisa usá-lo para acionar os FLOPS.
Coisas como compartilhamento falso podem levar a um alto custo de sincronização que geralmente aparece como carga de kernel no Linux. A CPU é completamente usada, mas você não possui muita taxa de transferência útil.
Eu fiz alguma programação em uma máquina IBM Blue Gene / Q. Possui muitos níveis hierárquicos ( esquemático do Blue Gene / L desatualizado ) e, portanto, é difícil de programar com eficiência. Você precisará usar a hierarquia completa até SIMD e SMT (a Intel chama isso de HyperThreading) para obter o desempenho.
E então a rede geralmente limita você. Portanto, é mais rápido no tempo (relógio de parede) computar coisas em várias CPUs ao mesmo tempo, em vez de comunicá-las pela rede. Isso colocará mais carga nas CPUs e tornará o programa mais rápido. Mas a taxa de transferência real do programa não é tão boa quanto parece dos números brutos.
Se você adicionar GPUs à mistura, será ainda mais difícil orquestrar tudo isso para obter desempenho. Essa será uma das coisas que começarei a fazer na minha dissertação de mestrado Lattice QCD em alguns meses.
NO-OP
s ao mesmo tempo, o que fará com que ambos tenham uma carga de 100%.