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

Contenu supprimé Contenu ajouté
Ligne 81 :
L'''instruction path length'' peut varier suivant les données manipulées par le programme, leur taille, leur quantité, etc. Il 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 des défauts. Par exemple, cela demande d'ajouter des circuits électroniques, qui consomment et chauffent. Mais le principal problème est que 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. Cela explique que la mode actuelle est plutôt d'avoir des processeurs avec un nombre limité d'instruction machine très rapides (les fameux processeurs RISC). Mieux vaut utiliser des circuits électroniques pour de la mémoire cache, pour des unités de calcul ou ajouter des cœurs que d'implémenter de des instructions inutiles. La seule exception notable tient dans les instruction dites vectorielles, que nous verrons dans les derniers chapitres.
 
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.