Calcul sur 128 bits

En architecture informatique, les entiers, adresses mémoire ou autres unités de données de 128 bits sont ceux qui ont une largeur de 128 bits (16 octets). De même, les architectures de CPU et d’UAL de 128 bits sont celles qui sont basées sur des registres, des bus d’adresses ou des bus de données de cette taille.

Bien qu’il n’existe actuellement aucun processeur général grand public construit pour fonctionner sur des entiers ou des adresses de 128 bits, un certain nombre de processeurs disposent de moyens spécialisés pour fonctionner sur des morceaux de données de 128 bits. Le System/370 d’IBM pourrait être considéré comme le premier ordinateur simple à 128 bits, car il utilisait des registres à virgule flottante de 128 bits. La plupart des processeurs modernes disposent de jeux d’instructions SIMD (Single-Instruction-Multi-Data) (Streaming SIMD Extensions, AltiVec, etc.) dans lesquels des registres vectoriels de 128 bits sont utilisés pour stocker plusieurs nombres plus petits, tels que quatre nombres à virgule flottante de 32 bits. Une seule instruction peut alors opérer sur toutes ces valeurs en parallèle. Cependant, ces processeurs n’opèrent pas sur des nombres individuels de 128 chiffres binaires ; seuls leurs registres ont la taille de 128 bits.

Le DEC VAX prenait en charge les opérations sur des types de données entières de 128 bits (‘O’ ou octaword) et à virgule flottante de 128 bits (‘H-float’ ou HFLOAT). La prise en charge de ces opérations était une option de mise à niveau plutôt qu’une fonctionnalité standard. Les registres du VAX ayant une largeur de 32 bits, une opération de 128 bits utilisait quatre registres consécutifs ou quatre mots longs en mémoire.

La série ICL 2900 fournissait un accumulateur de 128 bits et son jeu d’instructions incluait l’arithmétique à virgule flottante et décimale emballée de 128 bits.

De la même manière que les compilateurs émulent par exemple l’arithmétique entière de 64 bits sur les architectures dont la taille des registres est inférieure à 64 bits, certains compilateurs prennent également en charge l’arithmétique entière de 128 bits. Par exemple, le compilateur C GCC 4.6 et ultérieur possède un type d’entier 128 bits __int128 pour certaines architectures. GCC et les compilateurs compatibles signalent la présence de l’arithmétique 128 bits lorsque la macro __SIZEOF_INT128__ est définie. Pour le langage de programmation C, le support 128 bits est optionnel, par exemple via le type int128_t, ou il peut être implémenté par une extension spécifique au compilateur. Le langage de programmation Rust a un support intégré pour les entiers de 128 bits, qui est implémenté sur toutes les plateformes. Un type 128 bits fourni par un compilateur C peut être disponible en Perl via le module Math::Int128.

Un registre 128 bits peut stocker 2128 (plus de 3,40 × 1038) valeurs différentes. La gamme des valeurs entières pouvant être stockées sur 128 bits dépend de la représentation des nombres entiers utilisée. Avec les deux représentations les plus courantes, la plage va de 0 à 340 282 366 920 938 463 463 374 607 431 768 211 455 (2128 – 1) pour une représentation sous forme de nombre binaire (non signé), et -170,141,183,460,469,231,731,687,303,715,884,105,728 (-2127) à 170,141,183,460,469,231,731,687,303,715,884,105,727 (2127 – 1) pour la représentation en complément à deux.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *