Du point de vue des supercalculateurs, il est préférable de ne pas penser en pourcentage de la charge CPU / GPU mais de déterminer le nombre d'opérations nécessaires à votre problème, puis de le comparer aux performances maximales du système.
Si vous obtenez une utilisation du processeur à 100%, cela ne signifie pas nécessairement que vous obtenez toutes les performances du système. Les processeurs peuvent souvent faire plusieurs choses différentes en même temps, par exemple une division et une addition. Si vous pouvez commencer la division plus tôt, l’ajout risque de chevaucher celle-ci. Le processeur de votre ordinateur de bureau a très probablement une unité en panne qui réorganisera les instructions afin de tirer parti de tels chevauchements. Ou si vous avez le programme suivant:
if (expr1)
expr2;
else
expr3;
Un processeur en réorganisation essaiera de calculer les trois expressions en même temps , puis jettera le résultat de l'une d'entre elles. Cela le rend plus rapide en général. Si vous avez un bloqueur dans votre programme et que vous ne pouvez pas réorganiser, vous utilisez moins de voies dans la CPU, mais il affichera probablement encore 100%.
Ensuite, vous avez des fonctions SIMD dans les CPU qui sont des opérations vectorielles. Cela ressemble à GPGPU-light en ce sens que vous n’avez généralement que quatre ou huit opérations à la fois, les GPU en ont 32 ou 64. Vous devez néanmoins l’utiliser pour créer les FLOPS.
Des choses comme un faux partage peuvent engendrer des coûts de synchronisation élevés qui apparaissent généralement sous la forme d'une charge de noyau sous Linux. La CPU est complètement utilisée mais vous n’avez pas beaucoup de débit utile.
J'ai fait de la programmation sur une machine IBM Blue Gene / Q. Il comporte de nombreux niveaux de hiérarchie ( schéma de Blue Gene / L obsolète ) et est donc difficile à programmer efficacement. Vous devrez utiliser la hiérarchie complète allant de SIMD à SMT (Intel appelle cet HyperThreading) pour obtenir des performances optimales.
Et puis le réseau vous limite souvent. Par conséquent, il s'avère que le temps (de l'horloge murale) est plus rapide pour calculer des éléments sur plusieurs processeurs en même temps au lieu de les communiquer via le réseau. Cela mettra plus de charge sur les processeurs et accélérera l'exécution du programme. Toutefois, le débit réel du programme n’est pas aussi bon qu’il semble en ce qui concerne les chiffres bruts.
Si vous ajoutez des GPU au mélange, il deviendra encore plus difficile d'orchestrer tout cela pour générer des performances. Ce sera l’une des choses que je commencerai à faire dans ma thèse de maîtrise sur le QCD du réseau dans quelques mois.
NO-OP
s en même temps, ce qui entraînera une charge de 100% pour les deux.