Jeu d'instructions FMA

Le jeu d'instructions FMA est une extension des instructions Streaming SIMD Extensions 128 et 256 bits du jeu d'instructions des microprocesseurs x86 permettant d’effectuer des opérations de multiplication-addition fusionnées (FMA)[1]. Il existe deux variantes :

  • FMA4 est pris en charge par les processeurs AMD à partir de l’architecture Bulldozer. FMA4 a été implémenté en hardware avant FMA3. La prise en charge de FMA4 a été supprimée depuis Zen 1[2].
  • FMA3 est pris en charge par les processeurs AMD à partir de l'architecture Piledriver et Intel à partir des processeurs Haswell et Broadwell depuis 2014.

Les instructions FMA3 et FMA4 ont des fonctionnalités presque identiques, mais ne sont pas compatibles. Les deux contiennent des instructions FMA (fused multiply-add) pour les opérations scalaires et SIMD en virgule flottante, mais les instructions FMA3 ont trois opérandes, tandis que les instructions FMA4 en ont quatre. L’opération FMA a la forme d = round(a · b + c), où la fonction d’arrondi effectue un arrondi pour permettre au résultat de s’adapter au registre de destination s’il y a trop de bits significatifs pour tenir dans la destination.

La forme à quatre opérandes (FMA4) permet à a, b, c et d d’être quatre registres différents, tandis que la forme à trois opérandes (FMA3) exige que d soit le même registre que a, b ou c. La forme à trois opérandes rend le code plus court et l’implémentation matérielle légèrement plus simple, tandis que la forme à quatre opérandes offre une plus grande flexibilité de programmation.

Voir le jeu d'instructions XOP (en) pour plus d’informations sur les problèmes de compatibilité entre Intel et AMD.

Références modifier

  1. "FMA3 and FMA4 are not instruction sets, they are individual instructions -- fused multiply add. They could be quite useful depending on how Intel and AMD implement them" (en) George (Prime95) Woltmann, « Intel AVX and GIMPS », sur mersenneforum.org/index.php, Great Internet Mersenne Prime Search (GIMPS) project (consulté le )
  2. (en) « The microarchitecture of Intel, AMD and VIA CPUs An optimization guide for assembly programmers and compiler makers » (consulté le )