Unité de calcul en virgule flottante
Un article de Wikipédia, l'encyclopédie libre.
Une unité de calcul en virgule flottante (en anglais Floating Point Unit, soit FPU), ou un coprocesseur arithmétique, est un processeur, ou une partie d'un processeur, spécialement conçu pour effectuer des opérations sur des nombres à virgule flottante. Les opérations typiques sont de l'arithmétique avec chiffres binaires (telle que l'addition et la multiplication), mais quelques systèmes sont tout autant capables d'exécuter des calculs exponentiels ou trigonométriques (comme les racines carrées ou les cosinus).
Tous les processeurs n'ont pas d'unité à virgule flottante dédiée. En son absence, le processeur utilise un microcode pour émuler une fonction du FPU en utilisant l'unité arithmétique et logique (ALU). Cette microprogrammation est plus lente qu'un câblage, mais bien plus économique et bien moins dissipatrice d'énergie parce que moins complexe.
Le Pentium avait une unité flottante microprogrammée, et le remplissage incomplet d'une table du microcode était à l'origine de son fameux bug.
Dans quelques architectures d'ordinateur, les opérations à virgule flottante sont effectuées complètement séparément des opérations sur les nombres entiers, avec des registres dédiés aux virgules flottantes et des horloges indépendantes. Les opérations en virgule flottante comme l'addition et la multiplication sont typiquement pipeliné, mais les opérations plus compliquées, comme la division, ne peuvent pas l'être, et quelques systèmes peuvent même avoir un, voire plusieurs circuit(s) dédié(s) à la division de nombre à virgule flottante.
Dans les machines à architecture RISC, le problème se pose en des termes différents : c'est souvent une instruction unique (multiply and add) qui effectue simultanément les deux opérations flottantes. La raison en est le grand nombre d'opération matricielles en calcul scientifique.
Jusqu'au milieu des années 1990, il était normal que la FPU soit entièrement séparée du processeur dans les ordinateurs personnels. Elle constituait une option facultative et onéreuse, achetée seulement si nécessaire pour accélérer ou permettre d'utiliser des applications qui exigeaient une FPU. Les applications d'illustration vectorielle comme CorelDraw, bien que fortement consommatrices de fonctions trigonométriques, n'utilisaient pas la virgule flottante, mais des approximations ingénieuses travaillant sur des valeurs entières (car de toute façon on ne cherche jamais à adresser plus précisément que le pixel d'écran). Aussi l'éditeur canadien précisait-il bien dans sa documentation qu'il ne fallait pas chercher à accélérer le produit en achetant un coprocesseur flottant. Des logiciels (comme 3D Studio) nécessitaient quant à eux obligatoirement une FPU, disponibles sur les versions professionnelles des ordinateurs de l'époque. Les ordinateurs sans FPU pouvaient eux utiliser un émulateur de FPU de façon à faire tourner le logiciel, mais avec des performances très dégradées.
Exemple de coprocesseurs :
- les FPU Intel 8087, 80287, 80387, 80487, utilisables respectivement avec les processeurs Intel 80386 et 80486SX (le 486DX avait une FPU intégrée)
- les FPU Motorola 68881 68882, utilisés avec les processeurs Motorola 68020 et 68030, que l'on trouvait généralement dans des ordinateurs Macintosh.
- les FPU de Weitek Corporation, certains modèles étant prévus pour fonctionner avec des processeurs Intel, d'autres avec des Motorola, ou même dans certaines SPARCstation de Sun Microsystems[1].
De nos jours, les FPU sont généralement inclus dans les processeurs d'ordinateurs personnels, l'échelle d'intégration le permettant pour un coût à peu près nul, tandis que les câblages manuels (ou assistés) coûtent pour leur part plus cher que l'impression d'un circuit intégrant tout dès le départ.