COMPTOIR
register

Une mise à jour de la norme des nombres flottants

Vous ne vous êtes peut-être jamais posé la question, mais les ordinateurs manipulent principalement deux types de nombres : les nombres entiers et les nombres flottants. Si les premiers sont un simple encodage en binaire - soit en base 2 pour les plus matheux - ils sont parfois limités sur leur valeur maximum / minimum (sur un système 64-bits, on encode au mieux des nombres de 0 à  264 - 1 = 18 446 744 073 709 551 999, ce qui peut sembler grand... Mais ne l'est pas tellement pour un CPU qui peut faire des milliards d'opérations par seconde !), et surtout ne peuvent pas représenter de nombre à virgule. Pour pallier à ce dernier point, on peut utiliser la représentation entière puis diviser le nombre par un facteur constant : on appelle cela la représentation en virgule fixe. Par exemple, avec un facteur de division de 1000, un système 64-bit représente les nombres de 0 à 18 milliards de milliards tous les 0,001 (pas fixe, d'où le nom).

 

Cependant, impossible toujours de représenter des nombres très grands, ni très petits. D'où l'idée de la virgule flottante : représenter un nombre par une partie entière nommée mantisse multipliée par un nombre fixe, lui même mis à la puissance d'un second nombre entier (possiblement négatif) nommée exposant, ici "2" : N = mantisse * 2exposant. Avec ce système, la plupart des soucis de représentations sont réglés... au détriment d'une complexité des calculs accrue. De plus, des cas limites se présentent tels la représentation de l'infini, de zéro et des NaN (Not a Number, apparaît lorsque le calcul a sérieusement foiré quelque part) : il faut donc une norme pour gérer tout ça.

 

Et cette norme, c'est l'IEEE 754. Rédigée pour sa première version en 1985, elle décide de la répartition entier / mantisse et, justement, de la gestion des cas pathologiques. Cette dernière avait été mise à jour en 2008, et vient de voir une révision en cette année de grâce 2019.

 

StandardNormeBits de mantisseBits d'exposant
IEEE 754 float64 53 11
IEEE 754 float32 24 8
IEEE 754 float16 11 5
Intel bfloat16 8 8

Comparaison des flottants, le bloat16 (Brain Float) étant développé pour le machine learning dans les derniers FPGA bleus

 

Le document coûte la bagatelle de 99 $, et stipule désormais quelques nouvelles fonctions : tanPi, aSinPi et aCosPi qui sauront ravir les scientifiques ou développeurs hardcores, mais surtout quelques corrections concernant la gestion du NaN : désormais, le maximum ou minimum d'un couple (nombre, NaN) sera lui aussi NaN. Logique, non ? Ce n'est pourtant pas le comportement du SSE et de l'AVX... qui ne correspond pas non plus à la norme de 2008 soit dit en passant ! Du coup, pas bientôt dans nos CPU, cet IEEE 754-2019 ? (Source : Agner Fog)

 

nan cat cdh

Au secours ! C'est le NaN cat !

Un poil avant ?

Le noyau Linux en 32 bits, ça se perd lentement !

Un peu plus tard ...

SK Hynix, et l'art de ralentir et d’accélérer sur la NAND simultanément

Les 12 ragots
Les ragots sont actuellement
ouverts à tous, c'est open bar !
par Un ragoteur bio en Île-de-France, le Mercredi 31 Juillet 2019 à 21h18  
par Un ragoteur qui aime les BX du Grand Est, le Mardi 30 Juillet 2019 à 12h37
N'y a t il pas d'étude sur de possible CPU 128 bits pour lever quelques barrières ?
Les CPU Quantique sont encore à des années ... lumières ... de se retrouver sur le marché et encore faut il en avoir l'utilité.
A ma connaissance des dec alpha utilisaient déjà du FP 128.
Sinon il y a le classique 80 bits BCD aussi.
par latoupie, le Mercredi 31 Juillet 2019 à 08h56  
Parce que tout le monde ne fait pas du calcul scientifique
https://www.youtube.com/watch?v=PZRI1IfStY0
par Matthieu S., le Mardi 30 Juillet 2019 à 19h18  
par Un ragoteur qui draille embusqué, le Mardi 30 Juillet 2019 à 16h43
J'ai voulu faire un overclocking de mon cerveau pour bien comprendre l'article, mais faute de waterpiscine à proximité sous cette chaleur ce dernier à grillé lol
Wé, par ce temps l'autowatercooling ne suffit plus
par Nicolas D., le Mardi 30 Juillet 2019 à 17h16  
par Ragoteur qui prend l'eau en Île-de-France, le Mardi 30 Juillet 2019 à 10h16
Merci pour le papier.
Ca a l'air à la fois super intéressant et assez complexe.
Par exemple, dans ce tableau, je ne comprends pas du tout à quoi font référence les différents floats.
Je comprends bien qu'il s'agit de la virgule flottante, mais est-ce qu'il est question d'évolutions successives d'une norme de 85 pour optimiser/réduire la complexité et le temps de calcul et/ou d'adressage ?

Bref, si jamais vous êtes chauds pour un hard du hard, y'a des chances que ça permette de sauver certains d'entre nous
Le fait que c'était inversé n'aidait pas vraiment la compréhension ! Il s'agit du nombre de bits utilisés (float16 = FP16 = demi-précision = 16 bits par nombre)
par Un ragoteur qui draille embusqué, le Mardi 30 Juillet 2019 à 16h43  
J'ai voulu faire un overclocking de mon cerveau pour bien comprendre l'article, mais faute de waterpiscine à proximité sous cette chaleur ce dernier à grillé lol
par Un ragoteur qui aime les BX embusqué, le Mardi 30 Juillet 2019 à 15h10  
par Un ragoteur chartroussin en Île-de-France, le Mardi 30 Juillet 2019 à 11h28
Merci pour l'article.

Je crois qu'il y a une petite erreur dans la colonne "norme" du tableau ; on devrait plutôt avoir quelque chose comme ça :
float64 : 53bits de mantisse et 11 d'exposant
float32 : 24bits de mantisse et 8 d'exposant
float16 : 11bits de mantisse et 5 d'exposant
bfloat16 : 8bits de mantisse et 8 d'exposant

Enfin il est amusant de voir qu'en IA, la précision est toujours réduite, ici en faveur de la largeur de l'espace descriptible.
je confirme float16 et 64 inversé
par Un ragoteur qui aime les BX du Grand Est, le Mardi 30 Juillet 2019 à 12h37  
N'y a t il pas d'étude sur de possible CPU 128 bits pour lever quelques barrières ?
Les CPU Quantique sont encore à des années ... lumières ... de se retrouver sur le marché et encore faut il en avoir l'utilité.
par LiquidNitrogen, le Mardi 30 Juillet 2019 à 11h46  
Si les nombres flottent pas besoin de bouée !
par Ideal, le Mardi 30 Juillet 2019 à 11h38  
Intéressant
Par contre bon surement je me trompe mais dans le tableau je trouve ça étrange que la ligne "norme float16" donne "53 bits de mantisse" + "11 bits d'exposant" soit un total de 64 bits.
quand la ligne "norme float64" donne "11 bits de mantisse" + "5 bits d'exposant" soit un total de 16 bits.
Bien-sûr la ligne float32 elle donne un total de 32 bits ( c'est pour ça que les autres lignes me paraissent bizarres en fait ).

Y a une logique à ça que j'aurai pas saisi ptet.
Ah grilled le temps que je rédige.
par Un ragoteur chartroussin en Île-de-France, le Mardi 30 Juillet 2019 à 11h28  
Merci pour l'article.

Je crois qu'il y a une petite erreur dans la colonne "norme" du tableau ; on devrait plutôt avoir quelque chose comme ça :
float64 : 53bits de mantisse et 11 d'exposant
float32 : 24bits de mantisse et 8 d'exposant
float16 : 11bits de mantisse et 5 d'exposant
bfloat16 : 8bits de mantisse et 8 d'exposant

Enfin il est amusant de voir qu'en IA, la précision est toujours réduite, ici en faveur de la largeur de l'espace descriptible.
par ryoushi, le Mardi 30 Juillet 2019 à 11h15  
J'ai pas compris grand chose mais c'était intéressant
par Ragoteur qui prend l'eau en Île-de-France, le Mardi 30 Juillet 2019 à 10h16  
Merci pour le papier.
Ca a l'air à la fois super intéressant et assez complexe.
Par exemple, dans ce tableau, je ne comprends pas du tout à quoi font référence les différents floats.
Je comprends bien qu'il s'agit de la virgule flottante, mais est-ce qu'il est question d'évolutions successives d'une norme de 85 pour optimiser/réduire la complexité et le temps de calcul et/ou d'adressage ?

Bref, si jamais vous êtes chauds pour un hard du hard, y'a des chances que ça permette de sauver certains d'entre nous