human
Dans notre cours sur les systèmes informatiques, nous avons été présentés au processeur MIPS. Il a été (re)développé au cours du trimestre et s'est avéré assez facile à comprendre. Il utilise une conception RISC, c'est-à-dire que ses commandes élémentaires sont régulièrement encodées et qu'il y en a peu afin de simplifier les connexions.
Il a été mentionné que CISC suit une philosophie différente. J'ai brièvement examiné l'ensemble d'instructions x86 et j'ai été choqué. Je ne peux pas imaginer pourquoi quelqu'un voudrait construire un processeur qui utilise un ensemble de commandes aussi complexe !
Je suppose donc qu'il doit y avoir de bons arguments pour expliquer pourquoi une grande partie du marché des processeurs utilise des architectures CISC. Quels sont-ils
gpt
Il existe une tendance historique générale.
Dans le passé, les mémoires étaient petites, donc les programmes étaient forcément petits. De plus, les compilateurs n'étaient pas très intelligents et de nombreux programmes étaient écrits en assembleur, il était donc considéré comme une bonne chose de pouvoir écrire un programme en utilisant peu d'instructions. Les pipelines d'instructions étaient simples et les processeurs récupéraient une instruction à la fois pour l'exécuter. Le mécanisme à l'intérieur du processeur était déjà assez complexe ; le décodage des instructions n'était donc pas considéré comme une charge importante.
Dans les années 1970, les concepteurs de CPU et de compilateurs ont réalisé que ces instructions complexes n'étaient pas si utiles après tout. Il était difficile de concevoir des processeurs dans lesquels ces instructions étaient vraiment efficaces, et il était difficile de concevoir des compilateurs qui en tiraient vraiment parti. La surface de la puce et la complexité du compilateur étaient mieux utilisées pour des poursuites plus génériques telles que des registres plus polyvalents. L'article Wikipedia sur RISC explique cela plus en détail.
MIPS est l'architecture RISC ultime, c'est pourquoi elle est si souvent enseignée.
La famille x86 est un peu différente. C'était à l'origine une architecture CISC destinée aux systèmes avec une mémoire très limitée (pas de place pour de grandes instructions), et elle a subi de nombreuses versions successives. L'ensemble d'instructions x86 d'aujourd'hui est non seulement compliqué parce qu'il est CISC, mais aussi parce qu'il s'agit en réalité d'un 8088 avec un 80386 avec un Pentium, éventuellement avec un processeur x86_64.
Dans le monde d'aujourd'hui, RISC et CISC ne sont plus la distinction en noir et blanc qu'ils auraient pu être autrefois. La plupart des architectures de CPU ont évolué vers différentes nuances de gris.
Du côté RISC, certaines variantes modernes de MIPS ont ajouté des instructions de multiplication et de division, avec un encodage non uniforme. Les processeurs ARM sont devenus plus complexes : beaucoup d'entre eux ont un jeu d'instructions de 16 bits appelé Thumb en plus des instructions de 32 bits "originales", sans parler de Jazelle pour exécuter des instructions JVM sur le CPU. Les processeurs ARM modernes disposent également d'instructions SIMD pour les applications multimédias : certaines instructions complexes sont donc utiles après tout.
Du côté CISC, tous les processeurs récents sont en quelque sorte RISC à l'intérieur. Ils disposent de microcodes pour définir toutes ces macro-instructions complexes. La complexité même du processeur fait que la conception de chaque modèle prend plusieurs années, même avec une conception RISC, avec le grand nombre de composants, le pipeline et l'exécution prédictive, etc.
Alors pourquoi les processeurs les plus rapides restent-ils CISC à l'extérieur ? Une partie de la réponse, dans le cas de la famille x86 (32 bits et 64 bits), est la compatibilité historique. Mais ce n'est pas tout. Au début des années 2000, Intel a essayé de promouvoir l'architecture Itanium. Itanium est un cas extrême d'instructions complexes (pas vraiment CISC, bien que sa conception ait été qualifiée d'EPIC). Il abandonne même l'idée démodée d'exécuter les instructions en séquence : toutes les instructions sont exécutées en parallèle jusqu'à la prochaine barrière. L'une de