
Au cœur de chaque ordinateur, smartphone ou console, une partie du processeur effectue sans relâche des additions, des comparaisons et des opérations logiques. Cette pièce discrète s’appelle l’unité arithmétique et logique, ou ALU, et elle joue un rôle central dans la transformation des instructions en résultats concrets.
L’unité arithmétique et logique, souvent désignée par l’acronyme anglais ALU pour Arithmetic Logic Unit, est l’un des blocs fondamentaux d’un processeur. Sa mission consiste à exécuter des opérations simples mais essentielles : additionner deux nombres, soustraire, comparer des valeurs ou appliquer des opérations logiques comme ET, OU ou NON.
Un processeur moderne peut paraître extrêmement complexe, mais il repose en grande partie sur la répétition très rapide de tâches élémentaires. L’ALU ne comprend pas un programme au sens humain du terme. Elle reçoit des signaux binaires, les traite selon une opération demandée, puis renvoie un résultat. Cette mécanique, répétée des milliards de fois par seconde, permet d’afficher une page web, de lancer un jeu vidéo ou de calculer une formule dans un tableur.
L’ALU ne travaille jamais seule. Elle fait partie d’un ensemble plus vaste comprenant les registres, l’unité de contrôle, les caches, les bus internes et d’autres unités spécialisées. Dans cette organisation, elle agit comme un atelier de calcul extrêmement rapide, alimenté en données par le reste du processeur.
Le nom de l’ALU résume ses deux grandes fonctions. La partie arithmétique s’occupe des calculs numériques de base. Elle additionne, soustrait, incrémente ou décrémente des valeurs. Selon l’architecture du processeur, certaines ALU peuvent aussi participer à des opérations plus complexes, même si la multiplication, la division ou les calculs en nombres flottants sont souvent confiés à des unités dédiées.
La partie logique traite les opérations booléennes. Celles-ci manipulent des bits, c’est-à-dire des valeurs valant 0 ou 1. Les opérations ET, OU, XOR et NON servent à masquer des informations, tester des conditions, modifier des drapeaux ou combiner des données. Elles sont indispensables dans les systèmes d’exploitation, la cryptographie, la compression de fichiers ou encore les pilotes matériels.
Ces opérations semblent modestes prises isolément. Pourtant, toute application logicielle finit par être décomposée en instructions élémentaires que le matériel sait exécuter. Un clic, une animation ou une recherche dans une base de données mobilisent donc, à un moment ou à un autre, des calculs binaires effectués par l’ALU.
Avant qu’une ALU puisse produire un résultat, le processeur doit d’abord récupérer une instruction en mémoire, la décoder et identifier les données à utiliser. Cette chaîne est généralement décrite par les étapes fetch, decode, execute et write back : récupérer, décoder, exécuter, écrire le résultat.
Lors de la phase de décodage, l’unité de contrôle détermine si l’instruction concerne l’ALU. Si c’est le cas, elle précise l’opération à réaliser et indique où se trouvent les opérandes. Ces opérandes sont souvent placés dans des registres internes, de très petites zones de stockage situées directement dans le processeur, bien plus rapides que la mémoire vive.
Une addition simple peut ainsi se résumer de façon schématique : prendre la valeur du registre A, prendre celle du registre B, demander à l’ALU de les additionner, puis placer le résultat dans un registre C. Derrière cette description accessible se cache une organisation électrique très précise, pilotée par l’horloge du processeur.
Physiquement, une ALU est construite à partir de transistors organisés en portes logiques. Ces portes réalisent des fonctions élémentaires sur des bits. En les combinant, les ingénieurs créent des circuits capables de traiter non plus un seul bit, mais des mots de 8, 16, 32 ou 64 bits, selon l’architecture.
L’un des composants les plus connus est l’additionneur. Un additionneur complet prend en compte deux bits, ainsi qu’une éventuelle retenue issue du calcul précédent. En alignant plusieurs additionneurs, le processeur peut additionner des nombres plus longs. Ce principe explique pourquoi la notion de retenue, familière en calcul décimal, existe aussi en arithmétique binaire.
Une ALU intègre aussi des multiplexeurs, qui sélectionnent le résultat à transmettre selon l’opération demandée. Par exemple, les mêmes données d’entrée peuvent être envoyées vers un circuit d’addition, un circuit ET logique ou un circuit XOR. L’unité de contrôle choisit ensuite la sortie pertinente grâce à un code d’opération.
Une ALU ne renvoie pas uniquement un résultat numérique. Elle met aussi à jour des indicateurs appelés drapeaux, ou flags. Ces informations résument certaines propriétés du calcul. Le drapeau zéro indique par exemple que le résultat vaut 0. Le drapeau de retenue signale une retenue en sortie. Le drapeau de signe indique si le résultat est négatif dans une représentation donnée.
Ces drapeaux sont essentiels pour les branchements conditionnels. Lorsqu’un programme teste si deux valeurs sont égales, le processeur peut soustraire l’une à l’autre et observer le drapeau zéro. Si le résultat est nul, les deux valeurs sont identiques. Cette logique permet de mettre en œuvre des instructions comme “si”, “tant que” ou “sinon”, qui structurent presque tous les programmes.
Le drapeau de dépassement, ou overflow, joue aussi un rôle important. Il indique qu’un calcul a produit une valeur trop grande ou trop petite pour être représentée correctement dans le format prévu. Cette situation peut avoir des conséquences dans les logiciels critiques, où une mauvaise interprétation d’un résultat arithmétique peut provoquer des erreurs sérieuses.
Une ALU rapide est indispensable, mais elle ne garantit pas à elle seule un processeur performant. Le calcul doit être alimenté en données au bon moment. Si les données attendues restent bloquées en mémoire, l’ALU peut rester inactive pendant plusieurs cycles. C’est l’une des raisons pour lesquelles les processeurs utilisent des caches très rapides ; leur organisation est expliquée dans cet article sur les différents niveaux de mémoire cache.
Les performances dépendent aussi du nombre d’unités disponibles. Un processeur moderne contient généralement plusieurs ALU entières, parfois réparties dans plusieurs cœurs. Il peut donc exécuter plusieurs opérations simples en parallèle, à condition que les instructions soient indépendantes. Cette capacité contribue fortement au débit d’exécution des architectures actuelles.
La fréquence d’horloge compte également, mais elle n’explique pas tout. Deux processeurs cadencés à la même fréquence peuvent avoir des performances différentes selon la profondeur de leur pipeline, la largeur de décodage, la qualité de la prédiction de branchement et l’efficacité de leurs unités d’exécution.
Pour gagner du temps, les processeurs découpent le traitement des instructions en étapes successives. Ce principe, appelé pipeline, permet de commencer une instruction pendant qu’une autre est déjà en cours d’exécution. L’ALU intervient principalement dans l’étape d’exécution, mais son efficacité dépend de toute la chaîne qui la précède.
Dans les processeurs superscalaires, plusieurs instructions peuvent être lancées au cours d’un même cycle. Le matériel analyse les dépendances entre elles et décide quelles opérations peuvent être exécutées en parallèle. Si deux additions n’utilisent pas les mêmes registres, elles peuvent être confiées à deux unités arithmétiques distinctes.
Les architectures récentes vont plus loin en essayant d’anticiper certains calculs avant de savoir avec certitude s’ils seront nécessaires. Cette logique est liée à l’anticipation des instructions par le processeur, une technique qui améliore les performances mais impose des mécanismes de contrôle complexes.
Cette sophistication ne change pas la fonction de base de l’ALU : calculer correctement et rapidement. En revanche, elle modifie son environnement. L’ALU devient une ressource parmi d’autres dans un moteur d’exécution capable de réordonner, prévoir et optimiser le flux d’instructions.
Il ne faut pas confondre l’ALU classique avec toutes les unités de calcul présentes dans un processeur. L’ALU travaille principalement sur des entiers et des opérations logiques. Les calculs à virgule flottante, utilisés en 3D, en simulation scientifique ou en intelligence artificielle, sont souvent traités par une FPU, pour Floating Point Unit.
Les processeurs intègrent également des unités vectorielles capables de traiter plusieurs données à la fois. Ces blocs utilisent le principe SIMD, pour Single Instruction, Multiple Data. Ils sont précieux pour l’image, l’audio, la vidéo et certains algorithmes numériques. Là encore, l’idée reste proche : effectuer des opérations élémentaires, mais sur un plus grand volume de données.
Dans un smartphone, un ordinateur portable ou un serveur, la répartition du travail entre ces unités dépend du programme exécuté. Un navigateur web sollicitera l’ALU pour la logique générale, la FPU pour certains calculs graphiques et les unités vectorielles pour le décodage vidéo ou le traitement d’images.
L’unité arithmétique et logique est l’un des composants les plus anciens et les plus essentiels du processeur. Elle convertit des instructions élémentaires en résultats exploitables grâce à des circuits conçus pour manipuler des bits avec une extrême précision. Sans elle, aucun calcul entier, aucune comparaison simple et aucune décision logique ne pourrait être exécuté efficacement.
Son fonctionnement repose sur une idée simple : recevoir des opérandes, appliquer une opération choisie, produire un résultat et mettre à jour des indicateurs d’état. Mais cette simplicité apparente s’insère dans une architecture très élaborée, où registres, caches, pipeline et unités parallèles coopèrent pour gagner en vitesse.
Comprendre l’ALU permet donc de mieux saisir ce qu’est réellement un processeur. Derrière les fréquences en gigahertz et les promesses de performance se trouvent des milliards de transistors organisés pour effectuer, à très grande vitesse, des calculs logiques et arithmétiques qui constituent la base de toute informatique moderne.