# CPU bound

En informatique, CPU bound (ou compute bound) est l'état d'un ordinateur lorsque le temps requis pour effectuer une tâche est déterminé principalement par la vitesse de son processeur. L'utilisation du processeur est alors élevée, peut-être à 100%, pendant plusieurs secondes ou plusieurs minutes.
Le terme français pour CPU bound est subordonné au temps de calcul, mais ce terme est peu utilisé et les informaticiens utilisent presque toujours le terme CPU bound.
Lorsqu'un ordinateur est CPU bound, cela implique que l'augmentation de la puissance du processeur ou l'optimisation du code source du programme exécuté améliorera les performances globales de l'ordinateur.

## Historique

Le concept de CPU bound a été développé à l'époque des premiers ordinateurs, lorsque le cheminement des données entre les composants de l'ordinateur était plus simple et qu'il était possible de constater visuellement qu'un composant fonctionnait pendant qu'un autre était inactif. On pouvait alors voir facilement un très haut niveau d'activité pour des composants tels que le processeur, la mémoire RAM, les lecteurs de bandes magnétiques, les disques durs, les lecteurs de cartes et les imprimantes. Les ordinateurs qui présentaient un haut niveau d'activité de leurs périphériques étaient caractérisés comme I/O bound. Les ordinateurs qui étaient limités par la taille de leur mémoire RAM étaient caractérisés comme memory bound.
Avec l'avènement des bus multiples, du parallélisme, de la multiprogrammation, du multitâche préemptif, des cartes graphiques avancées, des cartes de son avancées et, généralement, des charges plus décentralisées, il est devenu moins facile d'identifier un composant particulier comme étant toujours un goulot d'étranglement. Dans les ordinateurs modernes, il est probable que le goulot d'étranglement se déplace rapidement entre les composants de l'ordinateur.
Les tâches exigées des ordinateurs modernes mettent souvent l'accent sur des composants assez différents, de sorte que la résolution d'un goulot d'étranglement pour une tâche peut ne pas affecter la performance d'une autre tâche. Pour cette raison, l'augmentation de la puissance du processeur n'a pas toujours un effet significatif sur la performance d'un ordinateur. L'état de CPU bound est maintenant l'un des nombreux facteurs pris en compte dans l'analyse de la performance des ordinateurs modernes.

## Utilisation de fonctions CPU bound pour combattre le courrier indésirable

En 1992, deux chercheurs d'IBM, Cynthia Dwork et Moni Naor, ont publié un article intitulé Pricing via Processing or Combating Junk Mail (traduction littérale française, Tarification via le traitement ou la lutte contre le courrier indésirable), suggérant la possibilité d'utiliser des fonctions CPU bound pour dissuader les abuseurs d'envoyer du courrier indésirable. La suggestion était basée sur l'idée que les utilisateurs d'ordinateur sont plus susceptibles d'abuser d'une ressource si le coût de la ressource est négligeable. Selon ce raisonnement, les pourriels sont très répandus parce que l'envoi d'un pourriel se fait à un coût minime pour l'expéditeur.
Dwork et Naor ont suggéré que le nombre de pourriels pourrait être réduit en injectant dans le processus d'envoi d'un courriel un coût supplémentaire sous la forme d'une fonction CPU bound coûteuse, c'est-à-dire une fonction qui générerait une grande utilisation du CPU. Ces fonctions consommeraient les ressources CPU de l'expéditeur pour chaque message, empêchant ainsi l'envoi de quantités importantes de pourriels dans une courte période.
Le processus proposé fonctionnerait de la façon suivante :
* Soit E l'expéditeur, D le destinataire, C un courriel et F une fonction CPU bound (c'est-à-dire une fonction que consomme beaucoup de CPU durant son exécution).
* Si D a accepté au préalable de recevoir des courriels de E, alors C est transmis comme d'habitude, sans activation de la fonction CPU bound.
* Sinon, E doit calculer F(C) et envoie (C, F(C)) à D. D vérifie si ce qu'il reçoit de E est de la forme (C, F(C)). Si oui, D accepte C. Sinon, D rejette C.
* Le calcul de F(C) se faisant dans le logiciel de courrier électronique de E et la vérification de F(C) se faisant dans le logiciel de courrier électronique de D, ce processus n'implique aucune complexité pour les utilisateurs du courrier électronique.
* La fonction F est choisie de sorte que la vérification par D soit relativement rapide (de l'ordre d'une milliseconde) et que le calcul par E soit quelque peu lent (de l'ordre de plusieurs secondes). Ainsi, E sera découragé d'envoyer C à plusieurs destinataires sans accord préalable. Le coût en termes de temps et de ressources informatiques pour le calcul de F deviendra très prohibitif pour un polluposteur qui désire envoyer plusieurs millions de pourriels.
Le problème majeur du processus proposé ci-dessus est que les processeurs rapides calculent beaucoup plus vite que les processeurs lents. De plus, les systèmes informatiques haut de gamme ont également des pipelines sophistiqués et d'autres caractéristiques avantageuses qui facilitent les calculs. En conséquence, un polluposteur doté d'un système de pointe ne sera guère affecté par une telle dissuasion, alors qu'un utilisateur typique ayant un système médiocre en souffrira. Si un calcul prend quelques secondes sur un nouveau PC, le même calcul peut prendre une minute sur un ancien PC, et plusieurs minutes sur un téléphone intelligent, ce qui peut être gênant pour les utilisateurs de vieux PC, et probablement inacceptable pour les utilisateurs de téléphones intelligents. La disparité dans la vitesse des processeurs clients constitue l'un des principaux obstacles à l'adoption généralisée de tout système basé sur une fonction CPU bound.
L'utilisation d'une fonction memory bound plutôt qu'une fonction CPU bound permet de réduire ce problème.