« Fonctionnement d'un ordinateur/La performance d'un ordinateur » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 28 :
: <math>T = N \times T_{instruction}</math>
 
: Le nombre d'instructions par seconde s'appelle l''''''Instruction path length''''', ou encore longueur du chemin d'instruction en français. Il peut varier suivant les données manipulées par le programme, leur taille, leur quantité, etc. Il est possible de simplifier ce terme, mais celui-ci dépend exclusivement du programmeur et du compilateur, pas de la conception du processeur. Par contre, la durée moyenne d'une instruction dépend un peu du compilateur, qui peut choisir des instructions plus rapides pour faire le même calcul, mais aussi et surtout de la conception du processeur.
 
Il se trouve qu'il est possible de reformuler l'équation précédente en faisant intervenir la fréquence du processeur. Cela demande de reformuler le temps d’exécution d'une instruction en nombre de cycles d'horloge. En effet, chaque opération prend un certain temps, un certain nombre de cycles d'horloge. Par exemple, sur les processeurs modernes, une addition va prendre un cycle d'horloge, une multiplication entre 1 et 2 cycles, etc. Cela dépend du processeur, de l'opération, et d'autres paramètres assez compliqués. Mais on peut calculer un nombre moyen de cycle d'horloge par opération : le '''CPI (Cycle Per Instruction)'''. La durée moyenne en seconde d'une instruction dépend alors :
Ligne 79 :
====Diminuer l'''instruction path length''====
 
PourL'''instruction celapath length'' peut varier suivant les données manipulées par le programme, illeur existetaille, plusieursleur solutionsquantité, :etc. demanderIl est possible de le réduire, mais cela demande généralement au programmeur d'optimiser son programme ou un meilleur compilateur. La seule option au niveau matériel est d'améliorer le jeu d'instruction. Cette dernière solution peut s'implémenter facilement. Il suffit de créer des instructions plus complexes, capables de remplacer des suites d'instructions simples : il n'est pas rare qu'une grosse instruction complexe fasse exactement la même chose qu'une suite d'instructions plus élémentaires. Par exemple, on peut implémenter des instructions pour le calcul de la racine carrée, de l'exponentielle, des puissances, des fonctions trigonométriques : cela évite d'avoir à simuler ces calculs à partir d'additions ou de multiplications. Les programmes qui font alors usage de ces opérations compliquées seront naturellement plus rapides.
 
Cependant, cette solution a un défaut : les occasions d'utiliser les instructions complexes sont assez rares, ce qui fait que les compilateurs ou programmeurs ne les utilisent pas, même quand elles peuvent être utiles. De plus, ajouter des instructions complexes est quelque chose qui doit se faire sur le long terme, avec le poids de la compatibilité, ce qui n'est pas sans poser quelques problèmes. Par exemple, un programme qui utiliserait des instructions complexes récentes ne peut pas fonctionner sur les anciens processeurs ne possédant pas ces instructions. Ainsi, on a beau rajouter des tas d'instructions dans nos processeurs, il faut attendre que tout le monde ait un processeur avec ces nouvelles instructions pour les utiliser. Pour donner un exemple très simple : à votre avis, sur les nouvelles instructions rajoutées dans chaque nouveau processeur Intel, AMD, ou ARM, combien sont réellement utilisées dans les programmes que vous utilisez ? Combien utilisent les instructions SSE, AVX ou autres extensions récentes ? Très peu.