Illustration de haut niveau montrant la décomposition des instructions machine en micro-opérations, effectuées lors des cycles typiques de récupération-décodage-exécution Dans l...
Dans les unités centrales de traitement des ordinateurs , les micro-opérations (également appelées micro-ops ou μops , historiquement aussi micro-actions ) sont des instructions de bas niveau détaillées utilisées dans certaines conceptions pour implémenter des instructions machine complexes (parfois appelées macro-instructions dans ce contexte).
Les microopérations (μops), sous diverses formes, constituent depuis longtemps la base des routines de microcode traditionnelles utilisées pour simplifier l'implémentation d'une architecture de processeur particulière , ou encore le séquencement de certaines opérations multi-étapes ou modes d'adressage. Plus récemment, les μops ont également été employées différemment afin de permettre aux processeurs CISC modernes de gérer plus facilement l'exécution parallèle asynchrone et spéculative : comme pour le microcode traditionnel, une ou plusieurs consultations de table (ou équivalent) sont effectuées pour localiser la séquence de μops appropriée en fonction de l'encodage et de la sémantique de l'instruction machine (l'étape de décodage ou de traduction). Cependant, au lieu d'avoir des séquences de μops rigides contrôlant directement le processeur à partir d'une ROM de microcode , les μops sont ici mises en mémoire tampon dynamiquement pour être réorganisées avant leur exécution.
Ce système de mise en mémoire tampon permet de dissocier davantage les phases de récupération et de décodage des unités d'exécution que dans une conception microcodée (ou câblée) plus traditionnelle. Cette flexibilité quant à l'ordre d'exécution permet d'extraire du parallélisme au niveau des instructions d'un programme monothread classique (sous réserve de la vérification des dépendances, etc.). Elle ouvre la voie à une analyse plus poussée et, par conséquent, à la réorganisation des séquences de code afin d'optimiser dynamiquement l'affectation et la planification des micro-opérations aux ressources machine (unités arithmétiques et logiques , unités de chargement/stockage, etc.). Comme cela se produit au niveau des micro-opérations, des sous-opérations de différentes instructions machine (macro-instructions) peuvent s'entremêler dans une séquence de micro-opérations donnée, formant des instructions machine partiellement réordonnées. Cette réorganisation résulte directement de l'exécution désordonnée des micro-instructions issues de plusieurs macro-instructions. Cependant, cela diffère de la fusion de micro-opérations , qui repose sur le principe qu'une micro-instruction plus complexe peut remplacer, dans certains cas, plusieurs micro-instructions plus simples, généralement afin de minimiser les changements d'état et l'utilisation de la file d'attente et de l' espace tampon de réordonnancement , réduisant ainsi la consommation d'énergie. La fusion de micro-opérations est utilisée dans certaines conceptions de processeurs modernes.
L'optimisation de l'exécution a progressé encore davantage ; les processeurs ne se contentent plus de traduire de nombreuses instructions machine en une série de micro-opérations (µops), mais font également l'inverse lorsque cela est pertinent ; ils combinent certaines séquences d'instructions machine (comme une comparaison suivie d'un saut conditionnel) en une µop plus complexe, mieux adaptée au modèle d'exécution et donc exécutable plus rapidement ou avec moins de ressources machine. Ce phénomène est également connu sous le nom de fusion de macro-opérations .
Une autre méthode pour améliorer les performances consiste à mettre en cache les micro-opérations décodées dans un cache de micro-opérations . Ainsi, si la même macro-instruction est exécutée à nouveau, le processeur peut accéder directement aux micro-opérations décodées depuis le cache, sans avoir à les décoder une seconde fois. Le cache de traces d'exécution de la microarchitecture Intel NetBurst ( Pentium 4 ) est un exemple courant de cette technique. La taille de ce cache peut être exprimée en milliers (ou en multiples stricts de 10²⁴) de micro-opérations qu'il peut stocker : Kμops .