FR 3136571 A1 20231215 FR 2205598 A 20220610 Procédé et dispositif pour arrondir dans un calcul à précision variable La présente description concerne un dispositif de calcul à virgule flottante comprenant : un premier circuit d'opération à virgule flottante (FP) (3202) comprenant une première unité de traitement (3204) configurée pour effectuer une première opération sur au moins une valeur FP d'entrée (F1, F2) pour générer un résultat ; un premier circuit arrondisseur (3206) ; et un premier circuit de commande (3202) configuré pour commander une longueur de bits ou d'octets appliquée par une opération d'arrondi du premier circuit arrondisseur (3206), dans lequel le circuit de commande (3302) est configuré pour appliquer une première longueur de bits ou d'octets (BLA) si le résultat de la première opération doit être stocké dans une mémoire interne du dispositif de calcul à virgule flottante à utiliser pour une opération suivante et pour appliquer une deuxième longueur de bits ou d'octets (BLS), différente de la première longueur de bits ou d'octets, si le résultat de la première opération doit être stocké dans une mémoire externe. Figure pour l'abrégé : Fig. 32 Procédé et dispositif pour arrondir dans un calcul à précision variable La présente description concerne de façon générale le domaine du calcul et, en particulier, un procédé et un dispositif pour calculer à l'aide d'une représentation à virgule flottante ayant une précision variable. La norme IEEE 754-2008 définit un format à virgule flottante (FP) selon lequel des nombres sont représentés en utilisant un nombre fixe de bits, le plus couramment 16, 32, 64 ou 128 bits, bien que des nombres non binaires et des nombres plus grands que 128 bits soient également pris en charge. Un inconvénient de la représentation FP de IEEE 754-2008 est que, à cause de la nature discrète des longueurs de bits, des calculs basés sur des nombres FP peuvent être affectés par des erreurs de calcul telles que des erreurs d'arrondis, des erreurs de suppression et des erreurs d'absorption. Des erreurs de suppression se produisent lorsqu'un nombre FP ayant une très grande valeur est soustrait d'un autre nombre FP ayant une très grande valeur, les deux nombres FP étant relativement proches l'un de l'autre en termes de valeur, mais pas égaux. Étant donnée la précision associée à ces grands nombres FP, la soustraction fournit comme résultat zéro. Des erreurs d'absorption se produisent lorsqu'un nombre FP ayant une très petite valeur est ajouté ou soustrait à/d'un nombre FP ayant une très grande valeur, et, étant donnée la précision associée au très grand nombre FP, l'addition ou la soustraction ne fournit comme résultat aucune modification du grand nombre FP. L'accumulation d'erreurs d'arrondi, de suppression et d'absorption peut rapidement conduire à des imprécisions très significatives dans le calcul. Un calcul à précision variable (VP), également connu dans le domaine sous les noms de calcul à précision multiple, à précision trans et à précision contrôlée, fournit un moyen pour obtenir des améliorations en termes de précision si nécessaire, réduisant ainsi les erreurs de calcul. Le calcul VP est particulièrement adéquat pour résoudre des problèmes qui ne sont pas très stables numériquement ou lorsqu'une précision particulièrement élevée est souhaitée à certains stades du calcul. Le calcul VP est basé sur l'hypothèse que chaque variable est précisément ajustée en longueur et en précision par le programmeur, optimisant l'erreur de l'algorithme et/ou la latence et/ou l'empreinte mémoire en fonction des exigences de l'algorithme en cours d'exécution. Des exemples de format VP qui ont déjà été proposés incluent le format à nombre universel (UNUM) et le format Posit. Des solutions de calcul VP impliquent généralement l'utilisation d'une unité de traitement, qui effectue des opérations sur des valeurs à virgule flottante VP. Une ou plusieurs mémoires, telles qu'une mémoire cache et/ou une mémoire centrale, sont utilisées pour stocker les résultats des calculs à virgule flottante, ainsi que des résultats intermédiaires. Une unité de chargement et de stockage (LSU) est souvent utilisée comme interface entre la FPU et la mémoire. Il existe toutefois un défi à fournir une LSU et/ou une solution d'arrondi permettant de modifier des formats FP entre des mémoires interne et externe avec une flexibilité relativement élevée et une complexité relativement faible. Selon un aspect, on prévoit un circuit de calcul à virgule flottante comprenant : une mémoire interne stockant une ou plusieurs valeurs à virgule flottante dans un premier format ; des registres d'états définissant une pluralité de types de format de nombres à virgule flottante associés à des identifiants correspondants, chaque type de format indiquant au moins une taille maximale ; et une unité de chargement et de stockage pour charger des valeurs à virgule flottante provenant d'une mémoire externe dans une mémoire interne et pour stocker des valeurs à virgule flottante provenant de la mémoire interne dans la mémoire externe, l'unité de chargement et de stockage étant configurée : - pour recevoir, dans le cadre d'une première opération de stockage, une première valeur à virgule flottante en provenance de la mémoire interne et un premier desdits identifiants ; et - pour convertir la première valeur à virgule flottante depuis le premier format en un premier format de mémoire externe ayant une taille maximale définie par le type de format de nombres à virgule flottante désigné par le premier identifiant. Selon un mode de réalisation, chaque taille maximale est désignée avec une granularité de bits. Selon un mode de réalisation, un type de format de nombres à virgule flottante désigné par un deuxième parmi les identifiants correspond à un deuxième format de mémoire externe différent du premier format de mémoire externe, l'unité de chargement et de stockage comprenant : - un premier circuit de conversion depuis un format interne en un format externe configuré pour convertir des valeurs à virgule flottante depuis le premier format en le premier format de mémoire externe ; et - un deuxième circuit de conversion du format interne en un format externe configuré pour convertir des valeurs à virgule flottante depuis le premier format en le deuxième format de mémoire externe. Selon un mode de réalisation, l'unité de chargement et de stockage comprend en outre : - un premier démultiplexeur configuré pour fournir sélectivement l'au moins une valeur à virgule flottante à un circuit sélectionné parmi les premier et deuxième circuits de conversion depuis un format interne en un format externe ; et - un premier multiplexeur configuré pour fournir sélectivement la valeur convertie générée par le premier ou le deuxième circuit de conversion depuis un format interne en un format externe à la mémoire externe, dans lequel les sélections effectuées par le premier démultiplexeur et le premier multiplexeur sont commandées par un premier signal de commande commun. Selon un mode de réalisation, l'unité de chargement et de stockage est configurée pour fournir l'au moins une valeur à virgule flottante à la fois aux premier et deuxième circuits de conversion depuis un format interne en un format externe, l'unité de chargement et de stockage comprenant en outre un circuit de commande configuré pour valider sélectivement un des premier et deuxième circuits de conversion depuis un format interne en un format externe ou les deux afin de sélectionner celui qui doit effectuer la conversion. Selon un mode de réalisation, l'unité de chargement et de stockage comprend en outre : - un premier circuit de conversion depuis un format externe en un format interne configuré pour convertir au moins une valeur à virgule flottante à précision variable chargée à partir de la mémoire externe depuis le premier format de mémoire externe en le premier format, et pour stocker le résultat de la conversion dans la mémoire interne ; et - un deuxième circuit de conversion depuis un format externe en un format interne configuré pour convertir au moins une autre valeur chargée à partir de la mémoire externe depuis le deuxième format de mémoire externe en le premier format, et pour stocker le résultat de la conversion dans la mémoire interne. Selon un mode de réalisation, le premier format de mémoire externe est un format à virgule flottante à précision variable Custom Posit comprenant, pour représenter un nombre, un bit de signe, un champ de bits de régime rempli avec des bits de la même valeur, la longueur du champ de bits de régime indiquant un facteur d'échelle du nombre et étant limitée par une limite supérieure, une partie d'exposant d'au moins un bit et une partie de fraction d'au moins un bit et dans lequel l'unité de chargement et de stockage comprend un circuit pour calculer la limite supérieure. Selon un mode de réalisation, le premier format de mémoire externe est d'un type, tel que le format à virgule flottante à précision variable Not Contiguous Posit, comprenant, pour représenter un nombre soit : - un bit indicateur ayant une première valeur et un format Posit ou Custom Posit comprenant un bit de signe, un champ de bits de régime rempli avec des bits de la même valeur, la longueur du champ de bits de régime indiquant un facteur d'échelle du nombre et étant limitée par une limite supérieure, une partie d'exposant d'au moins un bit et une partie de fraction d'au moins un bit ; ou - le bit indicateur ayant une deuxième valeur et un format par défaut représentant le nombre, le format par défaut ayant un bit de signe, une partie d'exposant d'au moins un bit et une partie de fraction d'au moins un bit ; dans lequel l'unité de chargement et de stockage comprend un circuit pour calculer une taille d'exposant sur la base par exemple du format Custom Posit et pour comparer la taille d'exposant avec une taille d'exposant du format par défaut et pour fixer la valeur du bit indicateur de façon correspondante. Selon un mode de réalisation, le premier format de mémoire externe est un format à virgule flottante à précision variable Modified Posit, comprenant un bit de signe, un champ de bits de régime rempli avec des bits de la même valeur, une longueur lzoc du champ de bits de régime indiquant un facteur d'échelle du nombre et étant limitée par une limite supérieure, une partie d'exposant d'au moins un bit et une partie de fraction d'au moins un bit, dans lequel l'unité de chargement et de stockage comprend un circuit pour calculer la longueur lzoc de sorte que l'exposant exp du nombre soit codé par l'opération suivante : [Math 1] où K représente la longueur d'exposant minimale lorsque la taille du champ de bits de régime est égale à un bit, et S représente le pas d'incrémentation de bits de régime. Selon un mode de réalisation, le premier format de mémoire externe est un premier format à virgule flottante à précision variable et le deuxième format de mémoire externe est un deuxième format à virgule flottante à précision variable différent du premier format à virgule flottante à précision variable. Selon un mode de réalisation, le premier format à virgule flottante à précision variable et/ou le deuxième format à virgule flottante à précision variable prend en charge à la fois des codages d'exposant biaisé et non biaisé. Selon un mode de réalisation, le type de format de nombres à virgule flottante désigné par le premier identifiant correspond à un premier format de mémoire externe, un type de format de nombres à virgule flottante désigné par un deuxième identifiant parmi les identifiants correspond à un deuxième format de mémoire externe différent du premier format de mémoire externe, et un type de format de nombres à virgule flottante désigné par un troisième identifiant parmi les identifiants correspond à un troisième format de mémoire externe différent des premier et deuxième formats de mémoire externe. Selon un mode de réalisation, le circuit de commutation à virgule flottante comprend en outre une unité à virgule flottante configurée pour effectuer une opération arithmétique à virgule flottante sur au moins une valeur à virgule flottante stockée par la mémoire interne, dans lequel l'unité à virgule flottante comprend l'unité de chargement et de stockage ou est configurée pour communiquer avec celle-ci. Selon un autre aspect, on prévoit un procédé de calcul à virgule flottante comprenant : le stockage, par une mémoire interne d'un dispositif de calcul à virgule flottante, d'une ou de plusieurs valeurs à virgule flottante dans un premier format ; le chargement, par une unité de chargement et de stockage d'un dispositif de calcul à virgule flottante, de valeurs à virgule flottante en provenance d'une mémoire externe dans la mémoire interne, et le stockage, par l'unité de chargement et de stockage, d'une première valeur à virgule flottante provenant de la mémoire interne dans la mémoire externe, dans lequel l'unité de chargement et de stockage est configurée pour effectuer ledit stockage en : - recevant, dans le cadre d'une première opération de stockage, la première valeur à virgule flottante en provenance de la mémoire interne et un premier identifiant ; - obtenant, en provenance de registres d'états définissant une pluralité de types de format de nombres à virgule flottante associés à des identifiants correspondants, au moins une taille maximale associée au premier identifiant ; et - convertissant la première valeur à virgule flottante depuis le premier format en un format de mémoire externe ayant une taille maximale définie par le type de format de nombres à virgule flottante désigné par le premier identifiant. Selon un mode de réalisation, le type de format de nombres à virgule flottante désigné par le premier identifiant correspond à un premier format de mémoire externe et l'unité de chargement et de stockage est configurée pour effectuer ladite conversion en : - convertissant, par un premier circuit de conversion depuis un format interne en un format externe, la première valeur à virgule flottante depuis le premier format en le premier format de mémoire externe ; et dans lequel le procédé comprend en outre : - la réception, par l'unité de chargement et de stockage, dans le cadre d'une deuxième opération de stockage, d'une deuxième valeur à virgule flottante en provenance de la mémoire interne et d'un deuxième identifiant ; - l'obtention, en provenance des registres d'états, d'au moins une taille maximale associée au deuxième identifiant ; et - la conversion, par un deuxième circuit de conversion depuis un format interne en un format externe, la deuxième valeur à virgule flottante depuis le premier format en un deuxième format de mémoire externe ayant une taille maximale définie par le type de format de nombres à virgule flottante désigné par le deuxième identifiant. Selon un mode de réalisation, l'unité de chargement et de stockage est configurée pour effectuer ledit chargement en : - convertissant, par un premier circuit de conversion depuis un format externe en un format interne, au moins une valeur à virgule flottante à précision variable chargée à partir de la mémoire externe depuis le premier format de mémoire externe en le premier format à virgule flottante et le stockage du résultat de la conversion dans la mémoire interne ; et - convertissant, par un deuxième circuit de conversion depuis un format externe en un format interne, au moins une autre valeur chargée à partir de la mémoire externe depuis le deuxième format de mémoire externe en le premier format à virgule flottante et le stockage du résultat de la conversion dans la mémoire interne. Selon un mode de réalisation, le procédé comprend en outre la mise en œuvre, par une unité à virgule flottante, d'une opération arithmétique à virgule flottante sur au moins une valeur à virgule flottante stockée par la mémoire interne. Selon un autre aspect, on prévoit un dispositif de calcul à virgule flottante comprenant : un premier circuit d'opération à virgule flottante comprenant une première unité de traitement configurée pour effectuer une première opération sur au moins une valeur FP d'entrée pour générer un résultat ; un premier circuit arrondisseur configuré pour effectuer une opération d'arrondi sur le résultat de la première opération ; et un premier circuit de commande configuré pour commander une longueur de bits ou d'octets appliquée par l'opération d'arrondi du premier circuit arrondisseur, dans lequel le circuit de commande est configuré pour appliquer une première longueur de bits ou d'octets si le résultat de la première opération doit être stocké dans une mémoire interne du dispositif de calcul à virgule flottante à utiliser pour une opération suivante et pour appliquer une deuxième longueur de bits ou d'octets, différente de la première longueur de bits ou d'octets, si le résultat de la première opération doit être stocké dans une mémoire externe. Selon un mode de réalisation, le dispositif de calcul à virgule flottante comprend en outre une unité de chargement et de stockage configurée pour stocker dans une mémoire un nombre arrondi de la deuxième longueur de bits ou d'octets généré par le premier circuit arrondisseur, l'unité de chargement et de stockage ne comprenant aucun circuit arrondisseur. Selon un mode de réalisation, le premier circuit d'opération à virgule flottante comprend le premier circuit arrondisseur et le dispositif de calcul comprend en outre : un deuxième circuit d'opération à virgule flottante comprenant une deuxième unité de traitement configurée pour effectuer une deuxième opération sur au moins une valeur FP d'entrée pour générer un résultat et un deuxième circuit arrondisseur configuré pour effectuer une deuxième opération d'arrondi sur le résultat de la deuxième opération ; et un deuxième circuit de commande configuré pour commander une longueur de bits ou d'octets appliquée par la deuxième opération d'arrondi, dans lequel l'unité de chargement et de stockage est en outre configurée pour stocker dans une mémoire un nombre arrondi généré par le deuxième circuit arrondisseur. Selon un mode de réalisation, le dispositif de calcul à virgule flottante comprend en outre un deuxième circuit d'opération à virgule flottante comprenant une deuxième unité de traitement configurée pour effectuer une deuxième opération sur au moins une valeur FP d'entrée pour générer un résultat, dans lequel le premier circuit arrondisseur est configuré pour effectuer une deuxième opération d'arrondi sur le résultat de la deuxième opération et le premier circuit de commande est configuré pour commander une longueur de bits ou d'octets appliquée par la deuxième opération d'arrondi. Selon un mode de réalisation, le premier circuit de commande comprend un multiplexeur ayant une première entrée reliée pour recevoir une première valeur de longueur représentant la première longueur de bits ou d'octets, et une deuxième entrée reliée pour recevoir une deuxième valeur de longueur représentant la deuxième longueur de bits ou d'octets, et une entrée de sélection reliée pour recevoir un signal de commande indiquant si le résultat de la première opération doit être stocké dans la mémoire interne ou dans la mémoire externe. Selon un mode de réalisation, le dispositif de calcul à virgule flottante met en œuvre une architecture de jeu d'instructions, et les première et deuxième longueurs de bits ou d'octets sont indiquées dans des instructions de l'architecture de jeu d'instructions. Selon un mode de réalisation, l'unité de traitement est une unité arithmétique et l'opération est une opération arithmétique, telle qu'une addition, une soustraction, une multiplication, une division, une racine carrée, racine carrée inverse rapide 1/sqrt, logarithme log, et/ou une accélération polynomiale et/ou l'opération comprend une opération de déplacement. Selon un autre aspect, on prévoit un procédé de calcul à virgule flottante comprenant : la mise en œuvre, par une première unité de traitement d'un premier circuit d'opération à virgule flottante, d'une première opération sur au moins une valeur FP d'entrée pour générer un résultat ; la mise en œuvre, par un premier circuit arrondisseur, d'une première opération d'arrondi sur le résultat de la première opération ; et la commande d'une longueur de bits ou d'octets appliquée par la première opération d'arrondi, comprenant l'application d'une première longueur de bits ou d'octets si le résultat de la première opération doit être stocké dans une mémoire interne du dispositif de calcul à virgule flottante à utiliser dans une opération ultérieure, et l'application d'une deuxième longueur de bits ou d'octets, différente de la première longueur de bits ou d'octets, si le résultat de la première opération doit être stocké dans une mémoire externe. Selon un mode de réalisation, le procédé comprend en outre le stockage, par une unité de chargement et de stockage du dispositif de calcul à virgule flottante, d'un nombre arrondi de la deuxième longueur de bits ou d'octets généré par le premier circuit arrondisseur, dans lequel l'unité de chargement et de stockage ne comprend aucun circuit arrondisseur. Selon un mode de réalisation, le procédé comprend en outre : la mise en œuvre, par un deuxième circuit d'opération à virgule flottante comprenant une deuxième unité de traitement, d'une deuxième opération sur au moins une valeur FP d'entrée pour générer un résultat ; la mise en œuvre, par un deuxième circuit arrondisseur, d'une deuxième opération d'arrondi sur le résultat de la deuxième opération ; la commande, par un deuxième circuit de commande, d'une longueur de bits ou d'octets appliquée par la deuxième opération d'arrondi ; et le stockage dans une mémoire, par l'unité de chargement et de stockage, d'un nombre arrondi généré par le deuxième circuit arrondisseur. Selon un mode de réalisation, le procédé comprend en outre : la mise en œuvre, par un deuxième circuit d'opération à virgule flottante comprenant une deuxième unité de traitement, d'une deuxième opération sur au moins une valeur FP d'entrée pour générer un résultat ; la mise en œuvre, par le premier circuit arrondisseur, d'une deuxième opération d'arrondi sur le résultat de la deuxième opération ; et la commande, par le premier circuit de commande, d'une longueur de bits ou d'octets appliquée par la deuxième opération d'arrondi du premier circuit arrondisseur. Selon un mode de réalisation, le circuit de commande comprend un multiplexeur ayant une première entrée reliée pour recevoir une première valeur représentant la première longueur de bits ou d'octets et une deuxième entrée reliée pour recevoir une deuxième valeur de longueur représentant la deuxième longueur de bits ou d'octets, et une entrée de sélection reliée pour recevoir un signal de commande indiquant si le résultat de la première opération doit être stocké dans la mémoire interne ou dans la mémoire externe. Selon un mode de réalisation, le dispositif de calcul à virgule flottante met en œuvre une architecture de jeu d'instructions et les première et deuxième longueurs de bits ou d'octets sont indiquées dans des instructions de l'architecture de jeu d'instructions. Selon un mode de réalisation, la première opération est une opération arithmétique, telle qu'une addition, une soustraction, une multiplication, une division, une racine carrée, une racine carrée inverse rapide 1/sqrt, logarithme log, et/ou une accélération polynomiale ou une opération de déplacement. Ces caractéristiques et avantages, ainsi que d'autres, seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : la représente schématiquement un dispositif de calcul FP VP selon un exemple de mode de réalisation ; la représente schématiquement un circuit de conversion de format d'une unité de chargement et de stockage du dispositif de calcul FP VP de la selon un exemple de mode de réalisation ; la représente le format IEEE-like ; la représente le format UNUM ; la représente le format Posit ; la est un graphe représentant une longueur de bits d'exposant pour cinq formats différents FP en relation avec une retenue d'exposant minimale ; la représente des exemples de conversion basés sur un format Custom Posit ; la représente des exemples du format Custom Posit ; la est un graphe représentant une longueur de bits d'exposant pour quatre formats différents FP ; la représente un format Not Contiguous Posit ; la représente des exemples de conversion basés sur le format Not Contiguous Custom Posit ; la est un graphe représentant une longueur de bits d'exposant pour quatre formats différents FP ; la représente un format Modified Posit ; la représente des exemples de conversion basés sur le format Modified Posit ; la est un graphe représentant une longueur de bits d'exposant pour quatre formats différents FP ; la est un graphe représentant une longueur de bits d'exposant pour six formats différents FP ; la représente un format binaire à nombres g ; La représente schématiquement le circuit de conversion de format de la plus en détail selon un exemple de mode de réalisation de la présente description ; la représente un registre d'états conformément au format UNUM ; la représente des registres d'états selon un autre exemple de mode de réalisation ; la représente des registres d'états selon encore un autre exemple de mode de réalisation ; la représente schématiquement une implantation matérielle d'un convertisseur de nombres G en un format VP selon un exemple de mode de réalisation de la présente description ; la représente schématiquement une implantation matérielle d'un convertisseur d'un format VP en nombres G selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion nombres G en IEEE-like selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion de nombres G en IEEE-like similaire à celle de la , mais avec la prise en charge d'exposants sous-normaux et biaisés, selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion de IEEE-like en nombres G selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion de IEEE-like en nombres G similaire à celle de la , mais avec la prise en charge d'exposants sous-normaux et biaisés, selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion de nombres G en Custom Posit selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion de Custom Posit en nombres G selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion de nombres G en Not Contiguous Custom Posit selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion de Not Contiguous Custom Posit en nombres G selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion de nombres G en Modified Posit selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un convertisseur destiné à mettre en œuvre une conversion de Modified Posit en nombres G selon un exemple de mode de réalisation de la présente description ; la représente schématiquement un exemple d'un circuit additionneur FP ; et la représente schématiquement un circuit additionneur FP selon un exemple de la présente description. De mêmes éléments ont été désignés par de mêmes références dans les différentes figures. En particulier, les éléments structurels et/ou fonctionnels communs aux différents modes de réalisation peuvent présenter les mêmes références et peuvent disposer de propriétés structurelles, dimensionnelles et matérielles identiques. Sauf précision contraire, lorsque l'on fait référence à deux éléments connectés entre eux, cela signifie directement connectés sans éléments intermédiaires autres que des conducteurs, et lorsque l'on fait référence à deux éléments reliés (en anglais "coupled") entre eux, cela signifie que ces deux éléments peuvent être connectés ou être reliés par l'intermédiaire d'un ou plusieurs autres éléments. Dans la description qui suit, lorsque l'on fait référence à des qualificatifs de position absolue, tels que les termes "avant", "arrière", "haut", "bas", "gauche", "droite", etc., ou relative, tels que les termes "dessus", "dessous", "supérieur", "inférieur", etc., ou à des qualificatifs d'orientation, tels que les termes "horizontal", "vertical", etc., il est fait référence sauf précision contraire à l'orientation des figures. Sauf précision contraire, les expressions "environ", "approximativement", "sensiblement", et "de l'ordre de" signifient à 10 % près, de préférence à 5 % près. Dans la description suivante, les termes suivants seront considérés comme ayant les significations suivantes : - nombre ou valeur à virgule flottante (FP) : un nombre exprimé sous la forme d'un exposant e et d'une mantisse ou fraction f ; - format de nombre FP : un ensemble défini de champs dans un ordre défini utilisé pour représenter un nombre FP et ayant au moins un champ représentant l'exposant e et un autre champ représentant la mantisse ou fraction f ; - type de format de nombre FP : une configuration particulière d'un format de nombre FP donné, défini par exemple par au moins une longueur de bits maximale correspondante, définie par exemple par un budget d'octets maximal (MBB) ou un paramètre bits stockés (BIS), tous deux étant décrits plus en détail ultérieurement ; - format FP à précision variable (VP) à auto-description : tout format de nombres à virgule flottante ayant un champ d'exposant, un champ de mantisse et par exemple une indication de quels bits constituent les champs d'exposant et de mantisse, cette indication comprenant par exemple au moins un champ de taille indiquant la taille du champ d'exposant et/ou du champ de mantisse. Par exemple, le champ de taille comprend des bits qui sont utilisés pour exprimer soit la longueur du champ d'exposant, la longueur du champ de mantisse, un rapport de bits entre les champs d'exposant et de mantisse, soit une longueur combinée des champs d'exposant et de mantisse ou de l'ensemble du nombre FP. Le format FP VP décrit ici comprend en option un bit de signe, un bit d'incertitude et soit l'un des champs parmi un champ de taille d'exposant indiquant la taille de l'exposant et un champ de taille de la mantisse indiquant la taille de la mantisse, soit les deux ; - format de mémoire limité : un format FP VP tel que décrit précédemment, et pour lequel aucune valeur ne dépasse la longueur de bits maximale définie par le budget d'octets maximal (MBB) ou par le paramètre de bits stockés (BIS) ; et - type de valeur FP particulière : toute valeur non définie ou non représentable, des exemples étant des valeurs qui ne sont pas des nombres (NaN), qui sont à environ l'infini positif ou négatif, à l'infini exact, ou qui définissent des intervalles limités par environ l'infini positif ou négatif. De tels concepts sont liés à une arithmétique d'intervalle, et le format UNUM peut exprimer de tels concepts et être utilisé pour une arithmétique d'intervalle, bien que d'autres formats pourraient être utilisés dans des émulations d'arithmétique d'intervalle en fixant un mode d'arrondi approprié pendant la mise en œuvre des opérations de FP afin de calculer les extrémités d'intervalle gauche et droite ; - mémoire interne d'un dispositif interne : une mémoire, telle qu'un fichier de registres, une mémoire cache ou de travail, qui est par exemple directement accessible par une unité de traitement du dispositif de traitement à l'aide de pointeurs, et avec laquelle des transferts de données vers et depuis une mémoire centrale sont effectués par l'intermédiaire d'une unité de chargement et de stockage ; et - mémoire externe : une mémoire telle qu'une mémoire cache ou RAM (de l'anglais "Random Access Memory", mémoire vive) qui est externe à un dispositif de traitement, mais peut être mise en œuvre sur une même puce que le dispositif de traitement, et depuis laquelle des données à traiter par le dispositif de traitement sont chargées par une unité de chargement et de stockage du dispositif de traitement. Des formats à virgule flottante à précision variable (FP VP) sont basés sur l'hypothèse que le programmeur peut directement régler le format FP en termes de longueur et de précision en fonction des besoins de l'application en cours d'exécution. Les formats FP VP peuvent être divisés en deux groupes distincts : 1. Des formats FP VP ayant une précision arbitraire, où on suppose que les taille et/ou précision de toutes les variables ou de variables spécifiques sont choisies par le programmeur au moment de la compilation. Un exemple d'un format à précision arbitraire est le format IEEE-Like décrit ultérieurement ; et 2. Des formats FP VP ayant une précision dynamique, où la taille des données est prédite au moment de la compilation, mais sa précision varie au moment de l'exécution. En effet, la précision des formats à précision dynamique, et en particulier la longueur de bits de la valeur d'exposant, est automatiquement réglée sur la base des calculs en cours d'exécution, et peut fournir ainsi une précision améliorée par rapport à la précision arbitraire, au moins dans certaines conditions. Des exemples de formats à précision dynamique incluent UNUM et Posit, ainsi que trois nouveaux formats Custom Posit, Not Contiguous Posit, et Modified Posit décrits ultérieurement. La représente schématiquement un dispositif de calcul FP VP 100 selon un exemple de mode de réalisation de la présente description. Le dispositif 100 comprend une partie de traitement comprenant, dans l'exemple de la , deux dispositifs de traitement 101, 102 et une partie de mémoire 103. Chacun des dispositifs de traitement 101, 102 est par exemple constitué d'un étage de fourniture (ISSUE STAGE) et d'un étage d'exécution (EXECUTE STAGE). Toutefois, cela est essentiellement un exemple et dans des variantes de mode de réalisation, des variantes d'étages ou des étages supplémentaires pourraient être présents, tels qu'un étage d'acquisition. Le dispositif de traitement 101 comprend par exemple, dans l'étage de fourniture, une mémoire interne par exemple sous forme d'un ou de plusieurs fichiers de registres (iRF & fRF) 104, qui sont par exemple constitués de fichiers de registres d'entiers (iRF) et de fichiers de registres à virgule flottante (fRF). Les fichiers de registre 104 sont par exemple configurés pour stocker des données à traiter par l'étage d'exécution, et des données résultant du traitement par l'étage d'exécution. Le dispositif de traitement 101 comprend par exemple, dans l'étage d'exécution, des unités de traitement (ALU/FPU) 106, qui comprennent par exemple une ou plusieurs unités logiques arithmétiques (ALU) et/ou une ou plusieurs unités à virgule flottante (FPU). Le dispositif de traitement 101 comprend également par exemple, dans l'étage d'exécution, une unité de chargement et de stockage (LSU) 108. Le dispositif de traitement 102 est par exemple une unité arithmétique VP, également désignée ici par VRP (de l'anglais "VaRiable Precision processor", processeur à précision variable). Le dispositif de traitement 102 comprend par exemple, dans l'étage de fourniture, un ou plusieurs fichiers de registres (gRF) 114, qui sont par exemple constitués d'un ou de plusieurs fichiers de registres à nombres g gRF, configurés pour stocker des valeurs de données dans un format à nombres g, qui est décrit plus en détail ultérieurement en relation avec la . Les un ou plusieurs fichiers de registres 114 sont par exemple configurés pour stocker des données à traiter par l'étage d'exécution, et des données résultant du traitement par l'étage d'exécution. Le dispositif de traitement 102 comprend par exemple, dans l'étage d'exécution, une ou plusieurs unités à virgule flottante (gFPU) 116, qui sont par exemple des FPU à nombres g configurées pour traiter des valeurs de données dans le format à nombres g. La FPU à nombres g comprend par exemple un additionneur à nombres g, un multiplicateur à nombres g et/ou d'autres opérateurs à nombres g. Le nombre g dans cette FPU est par exemple constitué de L=4 fragments de mantisse à 64 bits, en plus d'autres champs. La précision du nombre g est par exemple stockée dans le champ L de chaque nombre g. Le dispositif de traitement 101 comprend également par exemple, dans l'étage d'exécution, une unité de chargement et de stockage (LSU) 118. Dans certains modes de réalisation, un ou plusieurs registres d'états (SR) 124 sont prévus. Ces registres d'états 124 sont par exemple des registres d'états internes mis en œuvre dans le dispositif de traitement 102. Les registres d'états 124 stockent par exemple des informations définissant une pluralité de types de format FP qui peuvent être sélectionnés pour une valeur FP à stocker dans une mémoire externe et/ou des informations définissant la précision de calcul de la FPU 116. Toutefois, d'autres solutions pour définir la précision de calcul, et d'autres précisions dans le système, seraient possibles. Chaque type de format FP définit par exemple la configuration de paramètres tels que des modes d'arrondi et la configuration des données dans la mémoire, par exemple, sa taille en octets MBB ou de bits stockés BIS, sa longueur (ou taille) d'exposant ES, et d'autres paramètres pour des formats VP. En outre, dans certains modes de réalisation, il y a de nombreuses instances de ces registres d'états, de sorte que, en fonction des données envoyées à traiter, les valeurs des registres d'états puissent être pré-chargées et/ou pré-calculées afin d'accélérer des applications et des cycles d'horloge non perdus pendant une modification du registre d'états. Bien que, dans l'exemple de la , les un ou plusieurs registres d'états 124 soient illustrés sous forme d'éléments séparés du fichier de registres gRF 114, de l'unité de traitement gFPU 116, et de la LSU 118, dans des variantes de mode de réalisation ils pourraient être hébergés ailleurs dans le système, par exemple stockés en tant que partie du fichier de registres 114 stocké dans une mémoire, ou stockés en tant que registres d'états externes. Dans certains modes de réalisation, les registres d'états 124 comprennent un paramètre WGP (de l'anglais "Working G-number Precision" précision des nombres G de travail), qui définit par exemple la précision des nombres g, telle que la précision de la sortie d'une arithmétique (par exemple, une addition). Les unités de traitement 106, 116 dans les étages d'exécution des dispositifs de traitement 101, 102 sont par exemple configurées pour exécuter des instructions provenant d'un cache d'instructions (INSTR CACHE) 115. Par exemple, des instructions sont acquises à partir du cache d'instructions 115 de l'étage de fourniture, puis décodées, par exemple dans un étage de décodage (DECODE) 117 entre les étages de fourniture et d'exécution, avant d'être exécutées par l'étage d'exécution. Les unités de traitement 106, 116 sont par exemple configurées pour traiter des valeurs de données dans un ou plusieurs formats d'exécution. Par exemple, le format d'exécution pris en charge par les une ou plusieurs unités à virgule flottante 116 est le format à nombres g. Le format d'exécution pris en charge par les une ou plusieurs unités de traitement 106 dépend par exemple du type de processeur. Dans le cas d'une ALU, le traitement d'entiers signés ou non signés est par exemple pris en charge. Dans le cas d'une FPU, des formats IEEE-754 flottant et/ou double sont par exemple pris en charge. Afin de simplifier la mise en œuvre matérielle des unités de traitement 106, 116, ces unités sont par exemple configurées pour effectuer un traitement sur des valeurs de données d'une longueur de bits d'exécution fixe EBL, égale par exemple à 32 bits ou 64 bits. Ainsi, les données dans les unités de traitement 106, 116 sont par exemple réparties en des fragments de mantisse ayant une largeur de bit EBL, égale dans certains modes de réalisation à 512 bits. Toutefois, les largeurs de données traitées par tout ou partie des étages en pipeline peuvent être inférieures à la largeur de bits EBL. Par exemple, certains étages en pipeline, tels que le multiplicateur de mantisse, traitent des données en fragments de 64 bits, alors que d'autres, tels que l'additionneur de mantisse, pourraient traiter des données en fragments de 128 bits, alors qu'encore d'autres, tels que déplacement, un compte conduisant à zéro et un décalage (décrits plus en détail ultérieurement), pourraient traiter des données avec la longueur EBL complète de 512 bits. Le "parallélisme de fragments" sur lequel le calcul de mantisse peut être effectué dépend par exemple du "remplissage disponible" dans la mise en œuvre matérielle finale de l'unité. Une partie mémoire 103 du dispositif de calcul 100 comprend par exemple une mémoire cache 120 qui est par exemple une mémoire cache de niveau un (L1) et une mémoire RAM supplémentaire 122 mise par exemple en œuvre par une DRAM (de l'anglais "Dynamic Random Access Memory", mémoire vive dynamique). Dans certains modes de réalisation, les dispositifs de traitement 101, 102 et la mémoire cache 120 sont mis en œuvre par un système sur puce (SoC) et la mémoire 122 est une mémoire externe, qui est externe au SoC. Comme cela est connu de la personne de métier, la mémoire cache 120 est par exemple une mémoire ayant une taille plus petite que la mémoire 122, et ayant des temps d'accès relativement rapides, de sorte que certaines données puissent être directement stockées dans ou chargées à partir de la mémoire cache 120, conduisant ainsi à des temps d'accès mémoire rapides. Dans des variantes de mode de réalisation la mémoire externe 103 pourrait être une mémoire RAM, un disque dur, un disque Flash, ou une autre mémoire accédée par exemple par l'intermédiaire d'une MMU (de l'anglais "memory management unit", unité de gestion de mémoire – non représentée). Les unités de chargement et de stockage 108, 118 sont par exemple responsables du chargement de valeurs de données provenant de la mémoire 120, 122 dans les fichiers de registres 104, 114 respectivement, et du stockage des valeurs de données provenant des fichiers de registres 104, 114 respectivement, dans la mémoire 120, 122. Bien que dans l'exemple de la les unités de traitement 106, 116 soient mises en œuvre sous forme matérielle, il serait également possible que l'une de ces unités de traitement 106, 116 ou les deux soient mises en œuvre par une mise en œuvre logicielle sur la base d'une bibliothèque logicielle telle que softfloat (le terme "softfloat" peut correspondre à une ou plusieurs marques déposées). Premier aspect – Prise en charge de plusieurs types de formats FP Comme cela sera décrit en détails ultérieurement, avantageusement, le format de stockage utilisé pour stocker des valeurs de données dans la mémoire 103 est différent du format d'exécution ou des formats utilisés par les unités de traitement 106, 116 et, en outre, une pluralité de différents types de format FP et/ou une pluralité de différents formats FP VP sont pris en charge pour le stockage des valeurs de données dans la mémoire 103. En particulier, les unités de chargement et de stockage 108, 118 des étages d'exécution des dispositifs de traitement 101, 102 sont par exemple configurées pour charger des valeurs de données en provenance de la mémoire 103 dans un format de stockage, pour effectuer une conversion de format depuis le format de stockage en un format d'exécution et pour stocker les valeurs de données converties dans un fichier de registres correspondant 104, 114. Les unités de chargement et de stockage 108, 118 sont également par exemple configurées pour convertir des valeurs de données dans les fichiers de registres correspondants 104, 114 depuis un format d'exécution en un format de stockage et pour stocker les valeurs de données converties dans la mémoire 103. L'utilisation de formats FP VP pour le stockage de valeurs de données dans la mémoire fournit certains avantages techniques. En effet, un nombre à virgule flottante standard a une précision limitée, égale par exemple à 53 bits de mantisse pour double ou FP64, ce qui est équivalent à des chiffres à 14-17 décimales et est suffisant pour mettre en œuvre de nombreux problèmes mathématiques, mais dans certains cas une précision supérieure peut être souhaitée. Pour la plupart des formats FP VP (non valable pour IEEE-like décrit ultérieurement), dans le cas de valeurs FP VP avec une partie d'exposant proche et centrée autour de 1, en d'autres termes un exposant centré autour de zéro, une précision supérieure peut être obtenue et l'effet de suppression est réduit. En outre, des formats FP VP fournissent des avantages à la fois pour des applications à haute précision et pour des applications à basse précision : • des applications à haute précision sont influencées par de nombreuses erreurs connues qui affectent le résultat de calcul, telles qu'un arrondi, une absorption et une suppression. Ces erreurs peuvent être réduites en augmentant la largeur de bits à stocker dans la mémoire. • des applications à faible précision tendent à ne pas utiliser toute la précision offerte par le format adopté. Par conséquent, adopter un format plus compact accélérerait l'application dans la mesure où les lignes cache peuvent être remplies avec plus de données. Ce problème peut être réduit en diminuant la longueur de bits à stocker dans la mémoire. En effet, dans le cas d'applications à faible précision, soit toute la précision n'est pas utilisée, auquel cas la taille des données peut être réduite, soit toute la précision est utilisée, auquel cas la taille des données peut être réduite dans des cas dans lesquels l'application a des valeurs d'exposant centrées autour de zéro, ce qui permet à la précision de la mantisse d'être accrue autour de ces valeurs. De plus, une partie de la contribution d'erreur provient de la flexibilité limitée que le matériel a pendant un échange de données avec la mémoire. En effet, il est inutile d'avoir une unité à virgule flottante, FPU, très précise qui puisse calculer des nombres avec de nombreux bits de précision, s'ils finissent par être tronqués lorsqu'ils sont envoyés à la mémoire principale. Ces problématiques peuvent être minimisées en utilisant des formats de codage particuliers, qui peuvent fournir une empreinte mémoire amélioré, mais sans complication accrue de l'étage d'exécution du dispositif de calcul. FP VP peut en effet être utilisé pour minimiser l'erreur de calcul d'un algorithme ou économiser de l'espace dans la mémoire de données à un niveau acceptable au moyen d'un matériel "à usage général" apte à prendre en charge ces deux caractéristiques en même temps. Cela est effectué en réglant avec précision les variables logicielles dans l'application en cours d'exécution. Avantageusement, l'unité de chargement et de stockage 108 et/ou 118 du dispositif de calcul 100 comprend des moyens pour effectuer une conversion de format des valeurs à virgule flottante entre un ou plusieurs formats d'exécution et un ou plusieurs formats de stockage, ce qui sera décrit ci-après plus en détails. Par exemple la LSU 118 peut prendre en charge une pluralité de formats FP. Dans certains modes de réalisation : - ces formats ont une longueur de bits qui peut changer au moment de l'exécution, et qui est programmable ; et/ou - ces formats ont une longueur de bits qui n'est pas standard ; et/ou - ces formats ont une longueur de bits qui peut être supérieure à la largeur du bus de données mémoire entre la LSU 118 et la mémoire externe 120, 122. Par conséquent, la LSU 118 peut par exemple gérer des opérations de chargement et de stockage de données plus grandes que, par exemple, 64 bits sur un bus de 64 bits. En d'autres termes, comme les formats pris en charge "enfreignent la règle" selon laquelle les données pendant le calcul devraient avoir une taille d'une puissance de deux, et selon laquelle la taille devrait être inférieure ou égale à la largeur de bits du bus mémoire, la LSU 118 est par exemple une LSU dédiée qui traite de nouveaux formats de données d'une façon qui est transparente pour le programmeur, en séparant les opérations mémoire en plusieurs opérations mémoire standards (par exemple, en séparant un stockage à 192 bits en trois stockages à 64 bits). Ce qui précède demeure vrai même si la LSU 118 prend en charge un seul format VP, et/ou si la LSU 108 n'est pas conçue pour prendre en charge des nombres qui ont une longueur de bits qui n'est pas une puissance de deux. Selon des modes de réalisation décrits ici, les registres d'états 124 de la fournissent une façon simple et efficace pour permettre une sélection d'un type de format FP souhaité à appliquer à une valeur de données FP qui est stockée dans une mémoire, comme cela sera décrit ci-après plus en détails. Les registres d'états 124 définissent une pluralité de types de format de nombres à virgule flottante associés à des identifiants correspondants, chaque type de format indiquant au moins une taille maximale de la valeur à virgule flottante. L'unité de chargement et de stockage 108 et/ou 118 est par exemple configurée pour charger des valeurs à virgule flottante provenant de la mémoire externe 120, 122 dans la mémoire interne 104 ou 114, et pour stocker des valeurs à virgule flottante provenant de la mémoire interne 104 ou 114 dans la mémoire externe 120, 122. En particulier, l'unité de chargement et de stockage 108 et/ou 118 est configurée pour recevoir, dans le cadre de chaque opération de stockage, une valeur à virgule flottante en provenance de la mémoire interne 104 ou 114 et un des identifiants ; et pour convertir la valeur à virgule flottante au format de mémoire externe ayant une taille maximale définie par le type de format de nombres à virgule flottante désigné par l'identifiant. Dans certains modes de réalisation, la taille maximale de type de format de nombre FP est conçue avec une granularité de bit. Dans certains modes de réalisation, le type de format de nombres à virgule flottante désigné par un des identifiants est un format de mémoire externe et un type de format de nombres à virgule flottante désigné par un autre des identifiants est un autre format de mémoire externe, différent, et l'unité de chargement et de stockage 108 et/ou 118 comprend une pluralité de circuits de conversion de format, comme cela sera décrit ci-après plus en détail en relation avec la . La représente schématiquement un circuit de conversion de format 200 de l'unité de chargement et de stockage 108 ou 118 du dispositif de calcul FP VP de la selon un exemple de mode de réalisation. Dans certains modes de réalisation, au moins la LSU 118 est équipée avec un tel circuit de conversion 200. Le circuit de conversion de format 200 comprend par exemple une unité de conversion d'un format radiofréquence RF en un format de mémoire 202 configurée pour effectuer une conversion depuis un format interne en un format externe, par exemple afin de convertir des valeurs de données d'un format d'exécution utilisé dans la mémoire interne du dispositif de traitement 101 ou 102, par exemple par un des fichiers de registres 104, 114, en un format de stockage pour stocker dans la mémoire externe 103. Le circuit de conversion de format 200 comprend également par exemple une unité de conversion de format de mémoire en RF 204 configurée pour effectuer une conversion depuis un format externe en un format interne, par exemple afin de convertir des valeurs de données depuis un format de stockage utilisé dans la mémoire externe 103 en un format d'exécution utilisé dans la mémoire interne, par exemple par un des fichiers de registres 104, 114. L'unité de conversion de RF en format de mémoire 202 comprend par exemple une pluralité de convertisseurs, chacun capable d'effectuer un type différent de conversion de format. Dans l'exemple de la , il y a N convertisseurs (RF TO MEM CONV 1, 2,…, N), les premier, deuxième et N-ième convertisseurs étant représentés en référencés 206, 207, 208. Le nombre N de convertisseurs est par exemple égal à au moins 2 et, par exemple, au moins 3 dans certains modes de réalisation. Dans certains modes de réalisation, chacun des convertisseurs 206 à 208 est configuré pour effectuer une conversion depuis un même format FP, utilisé pour stocker la valeur de données dans le fichier de registres, en une pluralité correspondante de N formats de stockage différents. L'unité de conversion 202 comprend par exemple un démultiplexeur 205 configuré pour recevoir, au niveau d'une entrée de données, une valeur de données d'entrée (INPUT DATA FROM RF) en provenance du fichier de registres à convertir. Le démultiplexeur 205 comprend par exemple N sorties de données, dont une correspondante est reliée à chacun des N convertisseurs 206 à 208. L'unité de conversion 202 comprend également par exemple un multiplexeur 209 ayant N entrées de données reliées respectivement aux sorties des N convertisseurs correspondants 206 à 208 et une sortie de données configurée pour fournir une valeur de données de sortie (OUTPUT DATA TO RAM) à stocker dans la mémoire 103. Par exemple, les données fournies par chacun des N convertisseurs 206 sont stockées dans la mémoire 103 par l'intermédiaire d'une interface mémoire commune (non représentée). De façon similaire, l'unité de conversion de format depuis un format mémoire en RF 204 comprend par exemple une pluralité de convertisseurs, chacun capable d'effectuer un type différent de conversion de format. Dans l'exemple de la , il y a N convertisseurs (MEM TO RF CONV 1, 2,...,N), les premier, deuxième et N-ième convertisseurs étant représentés en référencés 216, 217, 218. Le nombre N de convertisseurs est par exemple le même que le nombre de convertisseurs de l'unité 202. Toutefois, dans des variantes de mode de réalisation, il serait également possible que la LSU 108 et/ou la LSU 118 comprenne moins de convertisseurs pour convertir depuis un format externe en un format interne que pour convertir depuis un format interne en un format externe. En effet, la conversion depuis un format interne en un format externe pour laquelle il n'y a pas de convertisseur peut par exemple être effectuée sous forme logicielle ou par un autre dispositif de traitement. Il serait également possible que la LSU 108 et/ou la LSU 118 comprenne moins de convertisseurs pour convertir depuis un format externe en un format interne que pour convertir depuis un format de mémoire interne en un format de mémoire externe. En effet, la conversion depuis un format externe en un format interne pour laquelle il n'y a pas de convertisseur peut par exemple être effectuée sous forme logicielle ou par un autre dispositif de traitement. Dans certains modes de réalisation, chacun des convertisseurs 216 à 218 est configuré pour effectuer une conversion d'une pluralité correspondante de N formats de stockages différents en un même format FP utilisé pour stocker la valeur de données dans le fichier de registres. Dans le mode de réalisation représenté en , l'unité de conversion 204 comprend un démultiplexeur 215 configuré pour recevoir, au niveau d'une entrée de données, une valeur de données d'entrée (INPUT DATA FROM RAM) en provenance de la mémoire à convertir. Le démultiplexeur 215 comprend par exemple N sorties de données, dont une correspondante est reliée à chacun des N convertisseurs 216 à 218. Par exemple, les données fournies à chacun des convertisseurs 216 à 218 en provenance de la mémoire 103, par exemple par l'intermédiaire du démultiplexeur 215, sont fournies par l'intermédiaire d'une interface mémoire commune (non représentée), qui est par exemple la même interface que celle décrite précédemment utilisée pour stocker les données dans la mémoire 103. L'unité de conversion 204 comprend également par exemple un multiplexeur 219 ayant N entrées de données reliées respectivement aux sorties des N convertisseurs 216 à 218 correspondants, et une sortie de données configurée pour fournir une valeur de données de sortie (OUTPUT DATA TO RF) à stocker dans le fichier de registres. Les démultiplexeurs 205, 215 et les multiplexeurs 209, 219 des unités de conversion 202, 204 sont par exemple commandés par un circuit de commande (LSU CTRL UNIT) 220. Par exemple, le démultiplexeur 205 et le multiplexeur 209 de l'unité de conversion 202 sont commandés par un signal de commande de stockage S_CTRL généré par l'unité de commande 220 et le démultiplexeur 215 et le multiplexeur 219 de l'unité de conversion 204 sont commandés par un signal de commande de charge L-CTRL généré par l'unité de commande 220. En effet, le format de conversion de stockage sélectionné pour stocker les données d'entrée dans la mémoire est par exemple sélectionné en fonction d'une précision et/ou d'une empreinte mémoire souhaité de la valeur de données dans la mémoire, alors que le format d'exécution choisi pour la conversion des données d'entrée provenant de la mémoire soit par exemple sélectionné en fonction du format qui a été utilisé pour le stockage de cette valeur de données. Dans des variantes de mode de réalisation, plutôt que l'unité de conversion 202 comprenant les démultiplexeur 205 et multiplexeur 20, tout ou partie des convertisseurs 206 à 208 de l'unité de conversion 202 sont par exemple configurés pour recevoir les données d'entrée en provenance de la mémoire interne à convertir, mais le circuit de commande 220 est configuré pour générer un signal de validation pour tout ou partie des convertisseurs 206 à 208 qui valide seulement un des convertisseurs sélectionné pour qu'il effectue la conversion et fournisse les données de sortie à la mémoire externe. En outre ou selon une variante, plutôt que l'unité de conversion 204 comprenant le démultiplexeur 215 et le multiplexeur 219, tout ou partie des convertisseurs 216 à 218 de l'unité de conversion 204 sont par exemple configurés pour recevoir les données d'entrée en provenance de la mémoire externe à convertir, mais le circuit de commande 220 est configuré pour générer un signal de validation pour tout ou partie des convertisseurs 216 à 218 qui valide seulement un des convertisseurs sélectionné pour qu'il effectue la conversion et fournisse les données de sortie à la mémoire interne. Il serait également possible que plus d'un des convertisseurs 206 à 208 de l'unité de conversion 202 fonctionnent en parallèle, et que l'unité de commande 220 commande la lecture des valeurs à partir des convertisseurs 206 à 208 sur une base requête - allocation ou sur une base round-robin, une fois que les conversions ont été achevées. Dans un tel cas, il serait également possible que deux des convertisseurs 206 à 208 ou plus soient configurés pour effectuer le même type de conversion de format, et fonctionnent en parallèle sur des valeurs différentes. De façon similaire, il serait également possible que plus d'un des convertisseurs 216 à 218 de l'unité de conversion 204 fonctionnent en parallèle et que l'unité de commande 220 commande la lecture des valeurs provenant des convertisseurs 216 à 218 sur une base de requête - allocation ou sur une base round-robin, une fois que les conversions sont achevées. Dans un tel cas, il serait également possible que deux convertisseurs 216 à 218 ou plus soient configurés pour effectuer le même type de conversion de format et pour fonctionner en parallèle sur des valeurs différentes. Les registres d'états 124 sont par exemple utilisés pour indiquer la conversion depuis un format interne en un format externe qui doit être effectuée, et la conversion depuis un format externe en un format interne qui doit être effectuée. Par exemple, à chaque fois que des données d'entrée sont reçues pour être converties, l'unité de commande 220 est configurée pour lire les registres d'états 124 ou pour recevoir sinon, en tant qu'entrée en provenance du registre d'états 124, une indication du type de conversion qui doit être utilisé pour la conversion. Sur la base de cette indication, l'unité de commande 220 est configurée pour sélectionner le convertisseur approprié. De cette façon, le circuit de conversion de format 200 peut fonctionner pendant une première période pendant laquelle des données sont converties d'un format de mémoire interne en un premier format de mémoire externe sur la base d'une première valeur stockée par le registre d'états et pendant une deuxième période pendant laquelle des données sont converties d'un format de mémoire interne en un deuxième format de mémoire externe sur la base d'une deuxième valeur stockée par le registre d'états. De façon similaire, le circuit de conversion de format 200 peut fonctionner pendant la première période, ou pendant une troisième période, pendant laquelle des données sont converties depuis le premier format de mémoire externe en le format de mémoire interne sur la base de la première valeur, ou d'une troisième valeur, stockée par le registre d'états et, pendant la deuxième période, ou pendant une quatrième période, pendant laquelle des données sont converties depuis le deuxième format de mémoire externe en le format de mémoire interne sur la base de la deuxième valeur, ou d'une quatrième valeur, stockée par le registre d'états. Dans des variantes de mode de réalisation, en plus, ou au lieu, d'utiliser les registres d'états 124, l'unité de commande de LSU 220 comprend un tableau de format de stockage (STORAGE FORMAT TABLE) 222 indiquant, pour chaque adresse pour laquelle une valeur de données est stockée dans la mémoire 103, le format de la valeur de données. De cette façon, lorsque la valeur doit être chargée de nouveau à partir de la mémoire, l'unité de commande de LSU 220 peut sélectionner le convertisseur approprié, parmi les convertisseurs 216 à 218, qui est capable de convertir depuis ce format de stockage. L'unité de commande de LSU 220 est par exemple configurée pour mettre à jour ce tableau 222 à chaque opération de stockage d'une valeur de données dans la mémoire 103. Dans des variantes de mode de réalisation, les opérations de stockage depuis la mémoire interne dans la mémoire externe sont basées sur des instructions de stockage qui spécifient la conversion de format qui doit être effectuée et les opérations de chargement à partir de la mémoire externe dans la mémoire interne sont basées sur des instructions de chargement qui spécifient la conversion de format qui doit être effectuée. Le circuit de commande 220 est par exemple configuré pour recevoir les instructions de chargement et de stockage et pour sélectionner des convertisseurs appropriés de façon correspondante. Bien que le circuit de conversion de format 200 soit décrit sur la base de la conversion d'une valeur de données à la fois, il serait également possible de prendre en charge des opérations vectorielles selon lesquelles des vecteurs contenant plus d'une valeur de données sont chargés ou stockés, la conversion de ces valeurs étant par exemple mise en œuvre en série, ou en parallèle par une mise en œuvre en parallèle d'une pluralité de convertisseurs pour chaque conversion de format pris en charge. Des exemples de formats FP VP seront maintenant décrits plus en détails en relation avec les figures 3 à 17 . Format IEEE-like La figure 3 représente le format IEEE-like. Le format IEEE-Like rentre dans les formats à précision arbitraire. Ce format ressemble à celui spécifié dans la norme IEEE-754 "IEEE Standard for Floating-Point Arithmetic" dans IEEE Std 754-2019 (révision de IEEE 754-2008), pp.1-84, 22 juillet 2019, doi: 10.1109/IEEESTD.2019.8766229. Le format IEEE-Like a les mêmes champs que la norme IEEE-754 : 1) un bit de signe s, 0 pour des nombres positifs, 1 pour des nombres négatifs ; 2) un certain nombre de bits d'exposants ( à en figure 3 ) de taille de taille d'exposant (ES) ; 3) une partie de fraction (ou mantisse) ( à en ) pour le reste du codage. Afin de rendre le format IEEE-Like aussi compatible que possible avec un format VP, les deux paramètres suivants sont par exemple introduits : • MBB : un budget d'octets maximal, comme cela est décrit plus en détail dans la demande de brevet US/2020/0285468, qui spécifie la largeur du format FP VP en termes d'octets. Il serait également possible d'exprimer cette largeur sous forme de la valeur BIS (de l'anglais "Bits Stored", bits stockés) exprimée en termes de bits plutôt que d'octets. • ES : Une taille d'exposant représentant le nombre de bits à réserver à l'intérieur du format codant la valeur d'exposant du format IEEE-Like. L'exemple de la a une valeur de ES de 5, un MBB=ceil((1+5+(n+1))/8) ou BIS = 1+5+(n+1). Les paramètres MBB et ES, représentés en , peuvent être réglés par le programmeur au moment de la programmation. La valeur d'un nombre FP IEEE-Like est exprimée par l'équation suivante (équation 1) : [Math 2] où s est le signe, e est l'exposant, et f est la partie de fraction (ou mantisse). Par exemple, le codage d'exposants tant biaisé que non biaisé est pris en charge, dans le cas où le biaisé est utilisé, la valeur du biais est , alors que sinon pour un codage d'exposant de complément à deux, bias=0. Le tableau 1 montre ci-après des codages particuliers selon le format IEEE-like. [Table 1] Tableau 1 : Codages particuliers IEEE-like Le tableau 1 définit en pratique le NaN (de l'anglais "not a number", pas un nombre) sous forme de deux représentations distinctes : NaN faux (qNaN) et NaN vrai (sNaN). Format UNUM La représente un format de nombre universel (UNUM), qui a été introduit par John Gustafson dans sa publication de 2015 citée précédemment. Les deux caractéristiques principales du format UNUM sont : • le format de stockage à taille variable pour les champs de mantisse et d'exposant ( à et à en ) ; et • la prise en charges d'intervalles (non représenté en détails ici). La valeur décimale d'un nombre FP VP UNUM est exprimée par l'équation suivante (équation 2) : [Math 3] La caractéristique de largeur de bits variable de ce format est due à deux champs auto-descriptifs au niveau de la partie la plus à droite du format UNUM, représenté en figure 4 . La taille de ces deux champs, la taille de la taille de l'exposant (ESS), qui dans l'exemple de la figure 4 est de trois bits à , et la taille de la taille de la fraction (FSS), qui dans l'exemple de la figure 4 est de quatre bits à , est choisie au moment de la programmation. Ces deux champs contiennent la taille de l'exposant moins 1 (ES-1) et la taille de la fraction moins 1 (FS-1), respectivement, du nombre UNUM courant. Une information supplémentaire stockée dans l'UNUM est le bit u, qui est utilisé comme indicateur pour indiquer si le nombre est un nombre exact (u = 0) ou un intervalle ouvert (u = 1) entre le nombre codé et le suivant avec le champ de fraction incrémenté de un. Format Posit La représente le format Posit. Lorsque le format UNUM n'a pas été déterminé comme étant compatible avec le matériel, le même John Gustafson, en 2017, a proposé une nouvelle version des UNUM, Posit, dans la publication de Gustafson, John & Yonemoto, I. (2017). Beating ﬂoating point at its own game: Posit arithmetic. Super-computing Frontiers and Innovations. 4. 71-86. 10.14529/jsfi170206. En relation avec la , le format Posit est construit de la façon suivante : 1) un bit de signe s, 0 pour un signe positif, 1 pour un signe négatif ; 2) un champ de bits de régime (RB), qui est une chaine binaire ( à en ) remplie avec des bits de la même valeur. La longueur du RB est indiquée par un compte Leading Zero One Count (LZOC). Les bits de régime indiquent un facteur d'échelle useedk (voir l'équation 4 ci-après). Pour calculer la valeur d'un nombre posit à partir du codage, useedk est par exemple indiqué par la longueur LZOC. Par exemple, k = -LZOC si les bits de régime sont 0 (exposant positif) ou k = LZOC - 1 si les bits de régime sont 1 (exposant négatif). Si les bits RB sont tous 0, ils expriment que l'exposant du nombre FP a un signe négatif ; d'autre part, tous les 1 sont représentatifs d'un signe d'exposant positif. 3) Les RB sont suivis d'1 bit r' du signe opposé. Ce dernier, également appelé bit de fin (TB), est utilisé pour marquer la fin du champ RB. 4) Immédiatement après le bit de fin, il y a un certain nombre de taille d'exposant (ES) de bits (deux dans l'exemple de la ) et qui codent l'exposant e. Ce champ est exprimé sous forme d'un entier non signé, donnant une contribution supplémentaire à l'exposant final de 2e (voir l'équation 3 ci-après). 5) Tout autre bit restant du codage est réservé pour la partie de fraction à . Si le nombre est négatif, tout le codage est représenté en complément à deux. Étant donnée la valeur du codage Posit sous forme d'entier signé et le nombre de bits du format Posit, l'équation 3 ci-dessous donne la valeur décimale représentée par le format Posit, l'équation 4 ci-dessous donne la valeur useed, et l'équation 5 ci-dessous donne , qui est la longueur de ligne des bits de régime : [Math 4] [Math 5] [Math 6] Le tableau 2 suivant indique des codages particuliers Posit : [Table 2] Tableau 2 : codages particuliers Posit Dans Posit, en fonction de la valeur de l'exposant à coder dans celui-ci, le champ RB peut recouvrir tout le codage, incluant même le champ TB. De cette façon, il peut y avoir des nombres Posit qui ne contiennent aucun bit pour la partie de fraction. Au contraire des autres formats, Posit ne distingue pas entre ±∞ et NaN. Ils sont tous considérés comme non un réel (NaR) (voir tableau 2). La est un graphe représentant une longueur de bits d'exposant (EXP. BIT-LENGTH) en fonction de la valeur de l'exposant (EXP. VALUE) pour cinq différents formats FP POSIT, ES, UNUM, IEEE-Like et IEEE-754 float (FLOAT) et double (DOUBLE), en fonction d'une retenue "exposant minimal" MIN EXP. Les formats IEEE-754 float et double sont représentés par des lignes horizontales au niveau des valeurs 8 et 11, respectivement. La courbe "exposant minimal" indique le nombre minimal de bits pour représenter, dans une représentation de complément à deux, un nombre donné (une valeur d'exposant dans ce cas). La démontre que traiter une précision variable ne signifie pas représenter exactement une valeur donnée avec le nombre minimal de bits d'exposant. Par contre, il est souhaitable de pouvoir couvrir la plus grande plage d'exposants avec la retenue d'exposant minimal. A titre d'exemple, Posit est relativement bon pour coder des petites valeurs, mais tend à exploser en termes de longueur de bits d'exposant très facilement lorsque la valeur d'exposant augmente. Cela peut conduire à un état dans lequel Posit n'est pas le meilleur format VP pour tous les types d'application, en particulier pour celles à valeurs d'exposant élevées. D'autre part, le format IEEE-Like tend, par exemple, à se comporter de façon exactement opposée : son empreinte d'exposant n'augmente pas lorsque l'exposant augmente, mais, aux environs de la valeur zéro, il a une retenue supplémentaire par rapport aux formats à précision dynamique. Ainsi, chacun des formats présente certains avantages et désavantages. Le choix du format à virgule flottante (FP) à précision variable (VP) peut dépendre de l'application particulière. La démontre qu'aucun format de codage d'exposant n'est une amélioration absolue par rapport à tous les autres et un quelconque des formats peut être plus approprié que les autres pour un type donné d'application. Trois nouveaux formats, un format Custom Posit (PCUST), un format Not Contiguous Posit (NCP) et un format Modified Posit (MP) sont décrits plus en détails ci-après. Le format Custom Posit est conçu pour optimiser la mise en œuvre logicielle du format Posit, tout en préservant ses caractéristiques. De plus, le Custom Posit est compatible avec les formats FP VP existants en termes de représentation de valeurs particulières (prise en charge de ±∞ et de NaN). Le format Not Contiguous Posit combine les formats Posit et IEEE-Like en une seule représentation, conduisant à un codage d'exposant relativement compact pour la représentation de valeurs proches de zéro, tout en limitant la longueur d'exposant à une valeur maximale pour des nombres à exposant élevé et limitant ainsi la précision. Enfin, le format Modified Posit essaie d'exploiter certaines caractéristiques de Posit, mais tend à limiter l'expansion du champ d'exposant selon une croissance logarithmique. Cela conduit à une représentation plus précise que Posit. Format Custom Posit (PCUST) Le format Posit a trois points faibles différents principaux : • Le complément à deux du codage Posit est seulement une façon d'éviter de représenter la valeur "zéro négatif". Retirer cette condition dans le format Custom Posit conduit à une mise en œuvre matérielle plus compacte. • Le champ de bits de régime (RB) qui peut occuper tout le codage de format est un inconvénient est un inconvénient en termes de précision du format. Des nombres à grand exposant peuvent avoir seulement 1, 2 ou même 0 bit de précision, conduisant à un nombre qui est peu utile d'un point de vue algorithmique, en raison d'un résultat à erreur élevée. • Le format Posit ne fait pas la distinction entre l'infini et NaN, ce qui peut être une limitation par rapport à la norme actuelle, IEEE 754. Par conséquent, un nouveau format appelé Custom Posit, ou PCUST, est proposé afin de pallier ces trois limitations. Définition 1 : le format Custom Posit a les mêmes règles que le format Posit (signe, exposant et interprétation de mantisse), mais aucun complément à deux n'apparaît pendant la conversion de nombre négatif. Étant donnée la valeur du codage Custom Posit sous forme d'un entier signé et le nombre de bits du format Custom Posit, l'équation suivante 6 donne la valeur représentée par le format Custom Posit : [Math 7] Définition 2 : Les bits de régime (RB) peuvent croître jusqu'à un seuil donné qui sera appelé lzoc_max (voir équation 9 ci-dessous). Si les RB sont supposés être plus grands que le lzoc_max, le bit de fin est automatiquement absorbé. Lorsque cette situation apparaît, un bit de précision est gagné (voir ). Comme, dans le format Custom Prosit, le champ RB n'est pas capable de croître plus que lzoc_max, un nombre minimal de bits de mantisse est toujours présent. Définition 3 : Le format Custom Prosit garantit toujours un nombre minimal de bits de mantisse supérieur à zéro, car le champ RB est limité en partie haute à lzoc_max. Définition 4 : Le format Custom Posit peut être réglé en utilisant trois paramètres : 1) sa longueur d'octets : MBB ; 2) sa taille d'exposant : ES ; et 3) la valeur de complément à deux maximale que l'exposant Posit Custom peut prendre : ES_MAX_DYNAMIC (voir équation 7 ci-dessous). Avec l'objectif de donner un exemple concret sur la définition 4, ES_MAX_DYNAMIC = 5 signifie que le nombre qui peut être codé avec le format Custom Posit peut s'étendre dans la plage d'exposant allant de à (voir équations 8 et 7). Toutes les valeurs extérieures à cette plage sont arrondies à zéro ou ±∞ (voir tableau 3). Sinon, si l'exposant est dans la plage, la taille du champ de bits de régime qui est calculée (lzoc), équation 10, est inférieure ou égale à lzoc_max, équation 9. La détaille deux conversions de nombre dans le format PCUST. A la fois dans A et B, le résultat lzoc_max est 4. Dans A, k=2 (équation 11 ci-dessous) et lzoc=3 (équation 10 ci-dessous). Dans B, k=3 et lzoc=4. On notera que la façon dont lzoc est obtenue de la même façon que pour le format Posit. Les équations suivantes 7 à 11 fournissent respectivement exp_max, exp_min, lzoc_max, lzoc et k : [Math 8] [Math 9] [Math 10] [Math 11] [Math 12] Dans l'équation 11, exp est la valeur entière de l'exposant d'entrée, alors que est la valeur entière de la partie ES de l'exposant d'entrée. La représente des exemples du format Custom Posit et démontre la prise en charge pour ES Maximum, lzoc_max=5, ES=1. Enfin, au vu de la définition 3 ci-dessus, il est possible de fournir la définition 5 suivante : Définition 5 : Custom Posit peut coder ±∞ et NaN, comme cela est représenté dans le tableau 3 suivant : [Table 3] Tableau 3 : Codages particuliers Custom Posit La est un graphe représentant une longueur de bits d'exposant (EXP. BIT-LENGTH) en fonction de la valeur d'exposant (EXPONENT VALUE) pour les quatre formats FP différents double (DOUBLE), float (FLOAT), Posit avec ES=2 (POSIT) et Custom Posit avec ES=2 et ES_MAX_DYNAMIC=7 (PCUST). Cette figure montre que, pour des valeurs d'exposant entre -56 et +55, les performances de Posit et Not Contiguous Posit (voir ci-dessous) sont identiques. Toutefois, en raison de la limitation ES_MAX_DYNAMIC , et de l'absorption du bit de fin, le format PCUST limite sa taille d'exposant maximale à 11 bits. Toute valeur d'exposant extérieure à la plage allant de -64 à +63 est arrondie à ±∞. Le format Posit continue par contre à accroître son champ de taille d'exposant jusqu'à ce que toute la longueur du codage soit remplie. En termes de taille de codage d'exposant, il n'y a pas de valeur pour laquelle le PCUST est pire que le POSIT, exception faite des valeurs arrondies à INF. Format Not Contiguous Posit (NCP) Cette section décrit le format Not Contiguous Posit (NCP) qui est également décrit par exemple dans la publication de A. Bocco, “A Variable Precision hardware acceleration for scientific computing”, juillet 2020. Comme cela a été discuté précédemment, les deux formats Posit et IEEE-Like ont certains avantages et désavantages en termes d'empreinte mémoire et de précision, en fonction de la valeur représentée en pratique. En effet, il a été montré que le format Posit a un codage d'exposant plus compact pour représenter de petites valeurs, proches de zéro, alors que le IEEE-Like fait l'opposé (voir ). Définition 6 : Le format Not Contiguous Posit peut coder l'exposant d'une façon similaire à soit le format IEEE-Like, soit le format Posit, en fonction de la valeur réelle de l'exposant d'entrée. Si la taille des bits de régime + bit de fin + ES_POSIT sont ≥ ES_IEEE , alors un codage IEEE-Like est par exemple choisi. Définition 7 : Afin de distinguer entre les représentations Posit et IEEE-Like, le NCP a l'indicateur de seuil bit , ou simplement indicateur T T-flag. T-flag se trouve après le bit de signe. T-flag est fixé à 0 pour indiquer un codage Posit, 1 pour un codage IEEE-Like. Le format NCP fixe T-flag de façon autonome. A partir de la définition 6 , une caractéristique du format NCP est de choisir entre les codages IEEE-Like ou Posit afin de minimiser la longueur du champ d'exposant. Si un codage d'exposant Posit possible conduit à un codage plus long que le codage d'exposant IEEE-Like, alors le format IEEE-Like est choisi, comme le montre l'équation 12 : [Math 13] Étant donnée la valeur du codage Not Contiguous Posit sous forme d'entier signé, et le nombre de bits du format Not Contiguous Posit, l'équation suivante 13 donne la valeur représentée par le format Not Contiguous Posit : [Math 14] A partir de la définition 6 et de l'équation 12, le NCP utilise un codage Posit pour représenter des valeurs proches de zéro, alors qu'il utilise un codage IEEE-Like pour des valeurs éloignées de la valeur zéro. Définition 8 : Dans le cas où le NCP a l'indicateur T-flag fixé à 1, codage IEEE-Like, l'exposant peut être représenté soit en complément à deux, soit sous forme biaisée. La représente deux cas 1 et 2 du format Not Contiguous Posit. L'indicateur T-flag, qui est le bit suivant le signe s, est par exemple égal à 0 pour le codage Posit (cas 1), et à 1 pour le codage IEEE-Like (cas 2). A partir de la définition 7 , en , il peut être observé que le cas 1 ressemble à un codage Posit, alors que le cas 2 ressemble à un codage IEEE-Like. Définition 9 : Dans le format NCP, si le T-flag est fixé à 0 (codage Posit), les champs après T-flag sont les bits de régime + de fin, l'exposant et la mantisse. Sinon, si le T-flag est fixé à 1, les champs après le T-flag sont l'exposant et la mantisse, comme dans IEEE-Like. Définition 10 : Le format NCP a quatre paramètres à régler : en plus de MBB, deux tailles d'exposant (ES) différentes peuvent être configurées, ES_IEEE et ES_POSIT. Enfin, il est possible de régler le type de codage d'exposant IEEE-Like, sous forme biaisée ou de complément à deux. L'avantage d'utiliser le format Not Contiguous Posit par rapport au format Posit est que NCP peut avoir une précision garantie minimale. Par conséquent, il est possible d'analyser l'erreur d'un algorithme a priori. Utiliser le format Posit, par exemple, rend l'estimation d'erreur impossible, dans la mesure où il n'y a pas de garantie s'agissant de la longueur d'exposant limitée. Définition 11 : Comme le NCP garantit un nombre minimal de bits de mantisse, ce format permet la représentation des valeurs infini, NaN et zéro, comme le format IEEE-Like avec un exposant biaisé – voir tableau 4 ci-dessous. [Table 4] Tableau 4 : Codages particuliers Not Contiguous Posit La représente des exemples de conversion basés sur le format Not Contiguous Posit, pour deux valeurs A et B. Pour la valeur A, le T-flag (deuxième bit en partant de la gauche) est fixé à 0. Cela indique que le reste du codage NCP est conçu comme un format Posit. La valeur du NCP dans ce cas est calculé comme un format Posit (équation 13). Pour la valeur B, le T-flag (deuxième bit en partant de la gauche) est fixé à 1. Cela indique que le reste du codage NCP est destiné à un format IEEE-Like. La valeur du NCP dans ce cas est calculée comme un format IEEE-Like (équation 13). La est un graphe représentant une longueur de bits d'exposant (EXP. BIT-LENGTH) en fonction de la valeur d'exposant (EXPONENT VALUE) pour les quatre formats FP différents : double (DOUBLE), float (FLOAT), Posit avec ES=2 (POSIT) et une configuration de format NCP avec des paramètres ES_IEEE = 8 et ES_POSIT = 2. Comme attendu, la combinaison des formats Posit et IEEE-Like conduit à une combinaison des avantages des deux formats SoA. Le format NCP utilise quelques bits pour le codage d'exposant pour des valeurs autour de zéro, dans la mesure où il utilise le format Posit pour coder ces petites valeurs. Dans ce cas le T-flag est 0. Sinon, l'augmentation de l'exposant linéaire de Posit avec les augmentations de la valeur d'exposant est limitée en adoptant par contre un codage IEEE-Like. Dans ce cas le T-flag est 1. La taille d'exposant de format NCP est considérée comme étant : 1) T-flag + bit de régime + bit de fin + ES_POSIT, si T-flag est égal à 0 ; ou 2) T-flag + ES_IEEE, si T-flag est égal à 1. Format Modified Posit La représente le format Modified Posit (ModPosit ou MP). Le format Modified Posit est décrit plus en détail dans la publication : A. Bocco, “A Variable Precision hardware acceleration for scientific computing”, juillet 2020. Il exploite certaines caractéristiques de Posit, mais tend à limiter l'expansion des champs d'exposant selon une croissance algorithmique. Cela implique une représentation plus précise que Posit. Définition 12 : Modified Posit est constitué de : 1) un bit de signe s ; 2) un champ d'exposant contenant les bits de régime (RB) ( à en ), un bit de fin r' et un champ d'exposant ( à en ) pour une partie de l'exposant explicite (entier non signé) ; 3) une partie de fraction (mantisse) ( à en ). Définition 13 : le Modified Posit a trois paramètres : 1) K : représente la longueur d'exposant minimale lorsque la taille de RB est égale à un bit, K étant par exemple fourni comme paramètre d'entrée ; 2) S : représente l'intervalle d'incrémentation des bits de régime ; 3) le format MP peut être réglé en longueur d'octets en utilisant le paramètre MBB mentionné précédemment. Le format Modified Posit paramètre la taille du champ d'exposant , comme l'illustrent la et l'équation 14 ci-dessous. De cette façon, le champ d'exposant dans le format MP s'étend linéairement avec la valeur Leading Zero Count (LZOC) de la taille de RB, Équation 14 : [Math 15] L'équation suivante 15 exprime la formule de décodage de la valeur d'exposant exp dans le format Modified Posit : [Math 16] Dans le format MP, une fois que l'exposant est obtenu à partir de l'équation 15 précédente, les valeurs et lzoc_max sont exprimées par les équations suivantes 16 et 17 : [Math 17] Par exemple, les codages d'exposant biaisés et non biaisés sont tous deux pris en charge et, dans le cas où le biaisé est utilisé, la valeur de biais est , alors que, sinon, pour un codage d'exposant à complément à deux, bias=0. [Math 18] L'équation suivante 18 fournit la valeur du maximum absolu lzoc, qui représente la valeur lzoc qui ne peut pas être dépassée : [Math 19] Définition 14 : Dans le format Modified Posit, les paramètres sont choisis de sorte qu'il y ait toujours au moins 1 bit de mantisse. Définition 15 : Dans le format Modified Posit, lorsque la taille des bits de régime (RB), lzoc, est égale à lzoc_max (équation 17), le bit de fin (TB) disparaît. Dans le format MP, l'exposant maximal exp_max est obtenu, conformément à l'équation 19 ci-dessous, en utilisant l'équation 15 avec deux modifications : 1) lzoc est substituée dans la limite supérieure de la somme par lzoc_max (équation 17) ; et 2) la contribution +e dans l'équation 15 est retirée. [Math 20] L'exposant minimum exp_min est donné par l'équation 20 suivante : [Math 21] A partir des définitions 14 et 15 , des valeurs particulières sont codées comme l'illustre le tableau 5 : [Table 5] Tableau 5 : Codages particuliers Modified Posit La représente des exemples de conversion de deux valeurs A et B sur la base du format Modified Posit, où A : K= 4 et S=1 ; et B : K=2 et S=1. Dans la valeur A, la taille de RB est 1 bit, (deuxième bit en partant de la gauche). Par conséquent, la taille de l'exposant explicite (quatrième au septième bits) est égale à 4 ( définition 13 , équation 14 ). La valeur d'exposant finale est donnée par deux contributions (équation 15) : 1) la valeur de la somme, qui dépend de la taille du champ de RB, lzoc ; et 2) la valeur dans le champ d'exposant explicite. Dans la valeur A, la valeur de la somme est 0, alors que l'exposant explicite est égal à 10. Dans la valeur A, l'exposant final est égal à 10. La valeur finale MP peut être calculée en utilisant l'équation 16. Dans la valeur B, la taille de RB est 2 bits (deuxième et troisième bits en partant de la gauche). Par conséquent, la taille de l'exposant explicite (cinquième à septième bits) est égale à 3 (équation 14). Les deux contributions d'exposant sont : -12 pour la somme et 5 à partir du champ d'exposant explicite. Dans la valeur B, l'exposant final est égal à -7. De nouveau, la valeur finale MP peut être calculée avec l' équation 16 . La est un graphe représentant une longueur de bits d'exposant (EXP. BIT-LENGTH) en fonction de la valeur d'exposant (EXPONENT VALUE) pour les quatre formats FP différents : double (DOUBLE), float (FLOAT), Posit avec ES=2 (POSIT) et le format Modified Posit avec des paramètres K = 1 et S = 1. On notera que le format MP utilise moins de bits pour représenter le même champ d'exposant que le format Posit. Par conséquent, le format MP peut être considéré comme plus précis que le format Posit. La est un graphe représentant une longueur de bits d'exposant (EXP. BIT-LENGTH) en fonction de la valeur d'exposant (EXP. VALUE) pour les six formats FP : - IEEE-Like avec ES=7 (IEEE-LIKE) ; - Posit avec ES = 2 (POSIT) ; - UNUM avec ESS=3 (UNUM) ; - Custom Posit avec ES=2 et ES_MAX_DYNAMIC=7 (PCUST) ; - Not Contiguous Posit avec ES_IEEE)=8, ES_POSIT=2 (NCP) ; et - Modified Posit avec K=1, S=1 (MP). Format binaire à nombres G De nouveau en se référant aux figures 1 et 2 , le format FP utilisé dans les fichiers de registres 104, 114 est par exemple un format ayant au moins trois champs séparés : un champ de signe, un champ d'exposant et une partie de fraction. Un exemple d'un format conçu de cette façon est le format binaire à nombres g, décrit plus en détail dans la publication de Schulte “A family of variable-precision interval arithmetic processors”, IEEE Transactions on Computers, Volume: 49, Numéro du 5 mai 2000. La représente le format binaire à nombres g. Il n'y a pas de définition exacte de comment un nombre g doit être mis en œuvre. Toutefois, la modélisation représentée en est proposée dans la publication de A. Bocco référencée précédemment. Le nombre g est divisée en deux sections. La première section 1 est appelée entête de nombre g. Elle comporte un bit de signe s, suivi par des bits de résumé (summ. bits) : ce sont des indicateurs à seulement 1 bit pour indiquer des codages de valeurs particulières. Ce sont par exemple les six bits de résumé suivants dans l'ordre : is_zero , is_nanquiet , is_nansignaling , is_infopen , is_infclose et is_exact . Après les bits de résumé, il y a un champ de longueur (L). Il exprime le nombre de fragments de mantisse à 64 bits dont le nombre g à virgule flottante est constitué. Après cela, il y a un exposant à 18 bits exp, représenté sous forme de complément à deux. Dans la deuxième section à nombres g 2, il y a fragments de mantisse, allant du plus significatif, , au moins significatif, . Chaque fragment de mantisse est par exemple de b bits, où b est par exemple une puissance de deux, égale à 64 dans un exemple. La mantisse de nombre g est toujours exprimée dans la forme normalisée, 1.f. Toutefois, seulement L d'entre eux sont utilisés pour coder le nombre. Unité de chargement et de stockage à nombres g Selon un exemple de mode de réalisation, l'unité de chargement et de stockage 200 de la est une unité de chargement et de stockage à nombres g, comme cela sera décrit maintenant en détails en relation avec la . La représente schématiquement le circuit de conversion de format 200 de la plus en détail selon un exemple de mode de réalisation de la présente description. Dans l'exemple de la , les convertisseurs 206, 207 et 208 de l'unité de conversion 202 effectuent respectivement une conversion de nombre g en format UNUM (G2U), une conversion de nombre g en format IEEE-like (G2IL) et une conversion de nombre g en format modified Posit (G2MP). De façon similaire, les convertisseurs 216, 217 et 218 de l'unité de conversion 204 effectuent respectivement une conversion du format UNUM en nombre g (U2G), une conversion du format IEEE-like en nombre g (IL2G) et une conversion du format modified Posit en nombre g (MP2G). Bien entendu, ces conversions de format sont essentiellement des exemples et d'autres types ou des types supplémentaires de conversion pourraient être ajoutés ou une ou plusieurs de ces conversions de format pourraient être retirées. Comme l'illustre la , en plus des données d'entrée provenant du fichier de registres (INPUT DATA FROM RF), un ou plusieurs paramètres de stockage (STORE PMTRS) sont également par exemple fournis au circuit de conversion 200. Les paramètres de stockage incluent par exemple l'adresse mémoire de l'opération de stockage, et/ou des paramètres de conversion, tels que des informations du type de format ou du registre d'états. Les données d'entrées et les paramètres de stockage sont par exemple fournis sur une ligne d'entrée 302 à l'unité de conversion 202 par l'intermédiaire d'un tampon 306 mis par exemple en œuvre par une bascule de type D, synchronisée par un signal d'horloge CLK. Le tampon 306 peut par exemple être court-circuité à l'aide d'un multiplexeur 304 ayant une entrée reliée à la sortie du tampon 306, et une autre entrée reliée à la ligne d'entrée 302. La sortie du multiplexeur 304 est par exemple reliée à l'unité de conversion 202. La représente également le cache de niveau un (CACHE L1) 120, qui reçoit des données de sortie (OUTPUT DATA TO MEMORY) provenant de l'unité de conversion 202 et fournit des données d'entrée (INPUT DATA FROM MEMORY) à l'unité de conversion 204. En plus des données d'entrée provenant de la mémoire, un ou plusieurs paramètres de chargement (LOAD PMTRS) sont également fournis par exemple à l'unité de conversion 200. Les paramètres de chargement incluent par exemple une indication du registre du fichier de registres dans lequel les données converties de l'opération de conversion doivent être chargées et/ou des paramètres de conversion, tels que des informations du type de format ou du registre d'états. Les données d'entrée et les paramètres de chargement sont par exemple fournis sur une ligne d'entrée 312 à l'unité de conversion 204 par l'intermédiaire d'un tampon 316 mis par exemple en œuvre par une bascule de type D, synchronisée par le signal d'horloge CLK. Le tampon 316 peut par exemple être court-circuité à l'aide d'un multiplexeur 314 ayant une entrée reliée à la sortie du tampon 316, et une autre entrée reliée à la ligne d'entrée 312. La sortie du multiplexeur 314 est par exemple reliée à l'unité de conversion 204. Les multiplexeurs 304 et 314 sont par exemple commandés par l'unité de commande LSU 220 pour sélectionner les données d'entrée avant ou après les tampons 306 et 316 pour qu'elles soient fournies à l'unité de conversion 202, 204. En effet, si l'unité de conversion 202 est occupée lorsqu'une nouvelle valeur de données d'entrée arrive pour être convertie, la valeur de données, et les paramètres de stockage, sont par exemple mis en attente dans le tampon 306 jusqu'à ce qu'ils puissent être traités, moment auquel un front du signal d'horloge CLK est par exemple appliqué. Selon une variante, si l'unité de conversion 202 n'est pas occupée, les données d'entrées sont par exemple fournies directement à l'unité de conversion 202 à l'aide du multiplexeur 304 pour court-circuiter le tampon 306. De façon similaire, si l'unité de conversion 204 est occupée lorsqu'une nouvelle valeur de données d'entrée arrive pour être convertie, la valeur de données, et les paramètres de stockage, sont par exemple mis en attente dans le tampon 316 jusqu'à ce qu'ils puissent être traités, moment auquel un front du signal d'horloge CLK est par exemple appliqué. Selon une variante, si l'unité de conversion 204 n'est pas occupée, les données d'entrées sont par exemple fournies directement à l'unité de conversion 204 à l'aide du multiplexeur 314 pour court-circuiter le tampon 316. En fonctionnement, les données FP VP peuvent être stockées dans la mémoire, par l'intermédiaire du cache 120, avec une précision différente de celle qui est spécifiée par le WGP. La précision à stocker dans la mémoire est par exemple réglée par le MBB du registre d'états SR, avec une granularité d'octets. En conséquence du fait d'avoir deux précisions différentes dans la FPU à nombres g et dans la mémoire implique l'utilisation d'une opération d'arrondi dans l'unité de stockage de la gLSU et, en particulier, dans chaque convertisseur. En effet, des situations peuvent apparaître dans lesquelles le nombre g calculé est plus précis que la valeur qui doit être stockée dans une mémoire. La représente un exemple d'un registre d'états, parmi les registres d'états 124, conformément au format UNUM. Un registre d'états similaire est par exemple prévu pour chaque format pris en charge. FP VP est basé sur l'hypothèse que le format FP peut être réglé au moment de la programmation. Afin de prendre en charge ceci dans un matériel, l'architecture comporte des moyens, sous forme d'un registre d'états, pour stocker les préférences utilisateur tout en effectuant l'opération FP. Des registres d'états sont constitués de différents champs séparés, chacun d'eux contenant la configuration utilisateur. A titre d'exemple, comme l'illustre la , les paramètres ESS et FSS du format UNUM sont stockés dans le SR. En plus de ces deux, le MBB et le mode d'arrondi, RND, peuvent être choisis au moment de la programmation, par exemple. La précision à nombres G de travail (WGP) est également défini par un paramètre et fixe par exemple la précision de la FPU à nombres G 116, en représentant par exemple le nombre de fragments de données utilisé pendant les opérations de la gFPU, chaque fragment étant par exemple de 64 bits ou d'une autre taille. Dans le cas de formats Posit ou Custom Posit, les registres d'états comportent par exemple les paramètres MBB, ES et RND. Le registre d'états de chaque format définit par exemple les paramètres RND, WGP et MBB. D'autres paramètres dépendent du format particulier. Les paramètres définis dans chaque registre d'états définissent un environnement de données, qui peut être l'environnement de calcul dans le cas de formats utilisés dans la mémoire interne et utilisés pour des calculs, ou l'environnement mémoire dans le cas de formats utilisés pour le stockage dans la mémoire externe. Le groupe de registres d'états pour chacun des formats pris en charge constitue par exemple un fichier de registres d'environnement, qui est prévu en plus des fichiers de registres de données 104, 114. Le fichier de registres d'environnement définit par exemple tous les environnements de données disponibles pris en charge par le système. Dans l'exemple de la , le registre d'états suppose un cas dans lequel il y a deux environnements mémoire ou plus associés avec le format UNUM, tel qu'un environnement mémoire par défaut (DME) et l'environnement mémoire secondaire (SME), et également un environnement de calcul unique du WGP. Toutefois, dans des variantes de mode de réalisation, il y a des environnements supplémentaires de mémoire et/ou de calcul et/ou de fichier de registres d'états à virgule flottante. Dans certains modes de réalisation, il y a plus d'un registre d'états définissant un même format de calcul et/ou plus d'un des registres d'états définissant un même format de mémoire externe, les différents registres d'états définissant par exemple différents types de formats ayant différentes valeurs pour MBB, BIS, RND et/ou WGP. L'environnement mémoire par défaut et l'environnement mémoire secondaire sont par exemple fournis afin de permettre deux différentes configurations de l'opération de chargement et de stockage. Par exemple, l'environnement mémoire par défaut est fixé à une configuration de format à précision relativement haute, alors que l'environnement mémoire secondaire est fixé à une configuration de format à précision relativement faible, ou inversement, et il est possible d'inverser rapidement la configuration par défaut et secondaire sans avoir à reconfigurer le registre d'états à chaque modification. Les SR sont par exemple définis au moment de la programmation, par exemple au moyen d'une extension RISC-V ISA dédiée comme cela est décrit dans la publication de T. Jost, “Variable Precision Floating-Point RISC-V Coprocessor Evaluation using Lightweight Software and Compiler Support”, juin 2019. La représente un exemple de registre d'états qui peut être utilisé pour indiquer les paramètres de valeurs UNUM stockées dans la mémoire. Ce registre d'états est par exemple accessible par les convertisseurs 206 et 216 de la afin de pouvoir effectuer correctement la conversion de format de valeurs de données. Des registres d'états similaires sont par exemple prévus pour chaque format de nombre pris en charge. Le registre d'états UNUM comprend par exemple, de gauche à droite en figure 19A , un champ inutilisé (unused), deux bits d'arrondi (RND), deux paramètres à 3 bits et indiquant respectivement la valeur ESS pour l'environnement mémoire par défaut et pour l'environnement mémoire secondaire, deux paramètres à 4 bits et indiquant respectivement la valeur FSS pour l'environnement mémoire par défaut et pour l'environnement mémoire secondaire, un paramètre à 3 bits indiquant le WGP et un paramètre à 7 bits indiquant le MBB. Une particularité de ces registres d'états est qu'ils peuvent être par exemple chargés et stockés tous ensemble en une seule fois, ou individuellement. En effet, pendant l'initialisation de codage, tous les environnements mémoire sont par exemple initialisés à la même valeur par défaut, mais pendant une exécution d'algorithme, un paramètre peut être modifié à la fois, par exemple afin de maintenir constant le paramètre MBB. La représente des registres d'états selon un autre exemple de mode de réalisation. La illustre en particulier un exemple de six registres d'états correspondant au format IEEE-like (IL08), au format UNUM (UNUM), au format Posit Standard (PSTD) et aux trois formats FP VP custom : le format Custom Posit (PCUST), le format Not Contiguous Posit format (NCP) et le format Modified Posit (MP). Dans l'exemple de la , chaque registre d'états a une longueur de 64 bits, bien que d'autres longueurs soient possibles. Par exemple, les champs de chaque registre d'états comportent : - un champ BIS, par exemple long de 16 bits (bits 0 à 15 dans l'exemple de la ) et qui indique la longueur de bits, en tant qu'alternative à la valeur MBB. Dans des variantes de mode de réalisation, la longueur d'octets ou d'autres mesures de longueur de données (par exemple, des nombres de mots à 16 bits, etc.) pourraient être prévus ; - un champ RND, par exemple long de 3 bits (bits 16 à 18 dans l'exemple de la ) et qui indique le mode d'arrondi, tel que arrondi au pair le plus proche, arrondi vers le haut, arrondi vers le bas, arrondi à zéro, arrondi à l'amplitude maximale, etc. ; - un premier champ de paramètre par exemple long de 5 bits (bits 19 à 23 dans l'exemple de la ) et qui indique un paramètre qui dépend du format spécifique, tel que celui des paramètres FSS (UNUM), ES_MAX_DYNAMIC , ES_POSIT (NCP) et S (MP) ; - un deuxième champ de paramètre par exemple long de 8 bits (bits 24 à 31 dans l'exemple de la ) et qui indique un autre paramètre qui dépend du format spécifique, tel que celui des paramètres ES (IL08, PSTD, PCUST), ESS (UNUM), IEEE_ES_M1 (NCP) et K (MP) ; - un autre champ (OTHER) par exemple long de 16 bits (bits 32 à 47 dans l'exemple de la ) et qui indique un ou plusieurs autres paramètres, tels qu'un paramètre de pas stride indiquant les espaces entre le début de deux éléments dans la mémoire, exprimé par exemple sous forme du nombre de bits MBB. Par exemple, si stride=2, il y a (2*MBB) octets entre le début de deux éléments consécutifs ; et - un champ de type par exemple long de 16 bits (bits 48 à 63 dans l'exemple de la ) et qui indique le type du format, qui est utilisé pour sélectionner le format de mémoire cible. En fonction de ce champ de type, les bits d'un ou de plusieurs des champs du registre d'états a par exemple un sens différent. Par exemple, sur la base du champ de type, le sens des bits stockés dans les premier et/ou deuxième champs de paramètres peut être déduit. Le champ de type est par exemple codé selon un codage 1 parmi n ou un autre codage univoque. Dans certains modes de réalisation, un fichier de registres d'états stocke des registres d'états pour un ou plusieurs formats, comme cela est représenté dans les figures 19A et 19B , et un ou plusieurs registres d'états supplémentaires définissent d'autres paramètres. Par exemple, les un ou plusieurs registres d'états supplémentaires stockent, pour des opérations arithmétiques, des paramètres tels que la précision de sortie WP et/ou le mode d'arrondi RND, pour des opérations mémoire, des paramètres tels que le mode d'arrondi RND, des configurations de format MBB ou BIS pour chaque format, le paramètre ES pour les formats IEEE-like et posit, les paramètres ESS et FSS pour le format UNUM et/ou des paramètres pour des opérations FP, tels que le type, rnd, etc. La représente des registres d'états selon un autre exemple de mode de réalisation. Les registres d'états de la peuvent être prévus en plus ou à la place des registres d'états de 19B. Les six registres d'états de la sont similaires à ceux de la et contiennent les mêmes champs. Toutefois, les registres d'états de la définissent tous différents types d'un même format FP, dans ce cas le format IEEE-like (IL08). Ainsi, un premier groupe de bits du champ de type des registres d'états de la sont par exemple tous identiques et désignent le format IEEE-like. Des bits restants définissent, par exemple, le type de format spécifique du format IEEE-like. Bien entendu, bien qu'il y ait six registres d'états dans l'exemple de la , dans des variantes de mode de réalisation il pourrait y avoir un quelconque nombre tel que un ou deux de ces registres d'états ou plus. Les champs de type dans les figures 19B et 19C sont des identifiants qui permettent par exemple de sélectionner des types de formats FP de façon simple. Par exemple, chacune des instructions de stockage fournie à la LSU 108 et/ou 118 comporte par exemple l'identifiant du type de format FP qui doit être utilisé dans la mémoire externe et, en particulier, dans lequel la valeur FP doit être convertie. La LSU 108 et/ou 118 est par exemple configurée pour effectuer ensuite la conversion en interrogeant les registres d'états 124 et en obtenant à partir des registres d'états 124 les paramètres du type de format FP associé à l'identifiant. Ces paramètres sont par exemple fournis ensuite au circuit de conversion de format de la LSU 108 et/ou 118 de sorte que la valeur FP provenant du fichier de registres 104 ou 114 soit convertie en le type de format FP cible avant le stockage dans la mémoire externe. Cette conversion implique par exemple la limitation de la longueur de bits de la valeur FP sur la base d'une taille maximale, par exemple BIS ou MBB, définie par le type de format à nombre à virgule flottante désigné par l'identifiant. De façon similaire, chaque instruction de chargement fournie à la LSU 108 et/ou 118 comporte par exemple l'identifiant du type de format FP qui était utilisé dans la mémoire externe, et en particulier depuis lequel la valeur FP doit être convertie. La LSU 108 et/ou 118 est par exemple ensuite configurée pour effectuer la conversion en interrogeant les registres d'états 124, et obtenant à partir des registres d'états 124 les paramètres du type de format FP avec l'identifiant. Ces paramètres sont ensuite par exemple fournis à la LSU 108 et/ou 118 de sorte que la valeur FP chargée à partir de la mémoire externe soit convertie en le type de format FP cible avant d'être stockée dans le fichier de registres 104 ou 114. Un avantage d'utiliser l'identifiant du champ de type du type de format FP pour identifier le format FP désiré est que cette solution permet une flexibilité relativement élevée sans augmenter significativement les complexité et longueur des instructions. En particulier, pour une valeur FP donnée à stocker dans la mémoire, le type de format peut être sélectionné parmi les types définis dans les registres d'états 124 par programmation, par le programmeur de logiciel, de l'identifiant correspondant dans l'instruction de stockage. En outre, des modifications des ou ajouts aux types de format définis dans les registres d'états 124 peuvent être introduites en écrivant directement dans les registres d'états 124. Convertisseurs matériels Des exemples de la structure d'un convertisseur matériel physique apte à gérer des opérations de chargement et de stockage pour les formats à virgule flottante (FP) à précision variable (VP) : IEEE-Like, Posit, Not Contiguous Posit et Modified Posit, seront maintenant décrits en relation avec les figures 20 à 31 . Un ou plusieurs de ces convertisseurs matériels physiques peuvent par exemple être incorporés dans une architecture matérielle telle que celle décrite par Bocco Andrea, Durand Yves et De Dinechin, Florent in “SMURF: Scalar Multiple-Precision Unum Risc-V Floating-Point Accelerator for Scientific Computing” 2019 URL: https://doi.org/10.1145/3316279.3316280, et, en particulier, ces convertisseurs mettent par exemple en œuvre les convertisseurs 206, 207, 208, 216, 217 et 218 des figures 2 et 18 , comme partie d'une LSU à nombres g ou analogue. La propose une structure générale 2000 appropriée pour la conversion du format à nombres g ou similaire (GNUMBER), en un quelconque des formats à précision variable (VP Memory format). Le convertisseur 2000 comprend par exemple un premier macro-étage 2002 comprenant un bloc normalisateur ou arrondisseur (NORM & ROUND), qui est par exemple configuré pour effectuer une normalisation et un arrondi sur la base de paramètres secondaires (Side Parameters) et un deuxième macro-étage 2004 comprenant un circuit de décalage à droite (SHIFT RIGHT) et un circuit de conversion d'exposant (Exponent Conversion) et un circuit de vérification d'identifiant (Flag Check). Dans certains modes de réalisation, le circuit de conversion d'exposant est plutôt mis en œuvre dans un ou plusieurs étages pipeline précédents. Un "macro-étage" est par exemple défini comme étant la logique présente entre deux barrières temporelles et fournit le résultat d'une opération en un ou plusieurs cycles d'horloge. La propose une structure générale 2100 appropriée pour la conversion de la plupart des formats à précision variable (VP Memory format) en le format à nombres g ou similaire (GNUMBER). Le convertisseur 2100 comprend par exemple un premier macro-étage 2102 comprenant un circuit de compte de zéros non significatifs (LZC) et un deuxième macro-étage 2104 comprenant un circuit de décalage à droite (SHIFT RIGHT) et un circuit de conversion d'exposant (Exponent Conversion) et un circuit de vérification d'identifiant (Flag Check). Le circuit LZC est par exemple configuré pour détecter la dénormalisation de mantisse dans le format IEEE-like ou pour calculer la longueur de bits de régime dans les formats Posit. Convertisseurs matériels IEEE-like La représente schématiquement un convertisseur 200 pour effectuer une conversion de nombre g en IEEE-like selon un exemple de mode de réalisation de la présente description. Cette architecture est par exemple constituée de quatre macro-étages, avec une latence globale d'au moins 5 cycles d'horloge en fonction de la taille de l'entrée, l'arrondisseur comprenant par exemple, en interne, quatre macro-étages : quantité de décalage, décalage, arrondi et décalage. Toutefois, certains de ces macro-étages pourraient être réunis afin de réduire le nombre de macro-étages et la latence. Le premier macro-étage comprend l'opération de normalisation et d'arrondi effectuée par le circuit de normalisation et d'arrondi (NORM & ROUND). Afin d'arrondir la mantisse d'entrée, certains paramètres sont par exemple calculés avant cet opérateur de normalisation et d'arrondi, tels que la taille de la mantisse (mant_size) et les paramètres exp_min et exp_max, comme cela est représenté dans la partie supérieure gauche du matériel. En particulier, ces paramètres exp_min et exp_max sont par exemple obtenus en effectuant une arithmétique de décalage à droite (SRA) d'une constante 100∼00, d'une valeur calculée en tant que EXP_IN_LEN, par exemple égale à 18, moins OP_ES + 2. Le paramètre exp_max est par exemple simplement la version négative, générée par un inverseur, du paramètre exp_min. La valeur EXP_IN_LEN pourrait être par contre calculée dans un étage pipeline précédent ou être stockée directement dans les fichiers de registres d'environnement. Cette variante de mise en œuvre s'applique de la même façon aux autres architectures de conversion de format décrites ci-après. La taille de la mantisse (mant_size) est par exemple générée sur la base d'une valeur shamnt (voir plus bas), par exemple égale à OP_ES + 1, et la valeur de budget d'octets maximal MBB, qui est par exemple étendue de trois zéro ("000"), mettant ainsi en œuvre une opération de multiplication par 8. Toutefois, dans le cas où la longueur de bits BIS est utilisée au lieu de la longueur d'octets MBB, la valeur de longueur n'est pas étendue de trois zéro. Cette variante de mode de réalisation s'applique de la même façon aux autres architectures de conversion de format décrites ci-après. Comme cela a été mentionné précédemment, le circuit de normalisation et d'arrondi NORM & ROUND est par exemple constitué de quatre étages internes (non représentés en ). La mantisse (mant) au niveau de la sortie du circuit NORM & ROUND est analysée par un circuit ALL0 ALL1, qui est par exemple en charge de détecter si l'étape d'arrondi conduit à un cas de codage particulier (Zero, Inf, sNaN ou qNaN), qui est initialement spécifiée par les indicateurs à nombres g d'entrée ZERO, INF, sNAN, qNAN. Le deuxième macro-étage comprend par exemple le circuit de décalage à droite qui est configuré pour décaler la mantisse arrondie vers la droite afin de remplir le train de bits IEEE-Like final, le chaînant après le bit de signe et le champ d'exposant. En particulier, la quantité de décalage de mantisse (shamnt) est par exemple calculée dans un des étages précédents, ainsi que la mantisse arrondie mant. Le circuit SHIFT RIGHT effectue une logique de décalage à droite (SRL), afin de faire de la place pour le bit de signe et le champ d'exposant. En parallèle de cette opération, le circuit Flag Check est configuré pour manipuler les codages de cas particuliers, provenant soit des indicateurs d'entrée à nombres g d'entrée ZERO, INF, sNAN, et qNaN, ou en raison du processus d'arrondi comme cela est indiqué par le circuit ALL0 ALL1. Sur la base de cette condition, trois multiplexeurs de sortie sont utilisés pour sélectionner les champs corrects mant, sign et exp. Une porte OU à 64 bits est par exemple utilisée pour relier à la fois le signe et les parties d'exposant, avec la partie de mantisse décalée à droite. La représente schématiquement un convertisseur 2300 pour effectuer une conversion de nombre g en IEEE-like similaire à celle de la , mais avec la prise en charge d'exposants sous-normaux et biaisés, selon un exemple de mode de réalisation de la présente description. Bien entendu, le convertisseur 2200 de la pourrait être modifié de la même façon pour prendre en charge des exposants sous-normaux et biaisés. En particulier, le convertisseur 2300 est par exemple configuré pour prendre en charge le codage d'exposant biaisé, exactement comme le format de la norme IEEE-754. C'est une façon de représenter l'exposant, différente de celle du complément à deux. La différence principale est uniquement une constante fixe à ajouter à l'exposant, qui est toujours égale à la valeur exp_min. Afin de prendre en charge cela, un additionneur supplémentaire à 16 bits 2302 est prévu au niveau de la sortie d'exposant du circuit NORM & ROUND. On notera que l'exposant qui est fourni comme entrée du circuit NORM & ROUND, ainsi que les paramètres exp_min et exp_max, qui ne sont par exemple pas biaisés, en raison du fait que le format à nombres g et l'arrondi g-norm lui-même, fonctionnent tous deux par exemple avec des exposants à compléments à deux. Une représentation sous-normale signifie qu'il est possible de représenter une valeur inférieure à celle fixée par le paramètre exp_min. En particulier, cela est par exemple effectué par la dé-normalisation de la mantisse lorsque le minimum défini par le paramètre exp_min est atteint, ce qui signifie que la mantisse n'est plus sous la forme 1.x, mais sous la forme 0.0..01x. La mantisse est par exemple décalée d'une quantité subnorm_shamnt, définie par l' équation 21 suivante : [Math 22] où exp est la valeur d'exposant. Cette représentation sous-normale est par exemple appliquée si l'exposant d'entrée à nombres g est inférieur ou égal à la valeur définie par le paramètre exp_min. Cela signifie que, si une représentation sous-normale est prise en charge, le paramètre exp_min pour lequel la mantisse est toujours normalisée n'est plus le minimum, mais plutôt le minimum plus 1, également désigné comme étant le biais sous-normal (voir tableau 7 plus bas). La différence est que le bit entier caché de la mantisse est 0.x au lieu de 1.x. La dé-normalisation est par exemple automatiquement effectuée par la logique effectuant la normalisation du nombre final. Dans le mode de réalisation de la , la prise en charge du biais sous-normal est par exemple mise en œuvre par l'ajout, par rapport au mode de réalisation de la , d'un multiplexeur 2304 afin d'effectuer une sélection de l'exposant correct au niveau de la sortie du circuit NORM & ROUND. Cela est dû, de nouveau, au fait que le normaliseur travaille en complément à deux et, si le minimum défini par exp_min est atteint, et donc qu'une dé-normalisation doit être effectuée, la sortie correcte du circuit NORM & ROUND est exp_min+subnorm_bias. Au contraire, le paramètre exp_min doit être sélectionné. Afin d'effectuer la sélection de l'exposant correct dans le cas sous-normal, il suffit par exemple de considérer le bit caché de mantisse "int bit" : lorsqu'il est 0, cela signifie que la mantisse a été dé-normalisée et que le paramètre courant exp_min doit être sélectionné. Autrement, l'exposant à nombres g exp est sélectionné. La représente schématiquement un convertisseur 2400 pour effectuer une conversion IEEE-like en nombres g selon un exemple de mode de réalisation de la présente description. Cette architecture comprend par exemple un seul macro-étage, avec une latence globale de 1 cycle d'horloge, bien que cette latence puisse augmenter lorsque la précision augmente. Dans le train de bits IEEE-Like, le MSB est toujours le signe et au plus les EXP_IN_LEN bits suivants, 16 dans ce cas, sont utilisés pour stocker l'exposant. Par conséquent, l'extraction du signe est directe, et l'exposant est isolé en effectuant une arithmétique de décalage à droite (SRA) des 16 MSB, excluant le bit le plus significatif du train, qui est de nouveau le signe. L'ensemble du train de bits est par exemple également décalé à gauche par le circuit SHIFT LEFT d'une valeur de quantité de décalage de mantisse shamnt, qui est par exemple calculée sur la base des valeurs du budget d'octets maximal (MBB) et OP_ES. Après que la partie de mantisse mant a été extraite du train de bits, elle est par exemple combinée, par une porte ET 2402 ayant une largeur égale à la largeur de la partie de mantisse, avec un masque calculé en parallèle avec les étapes précédentes, sur la base du signe réel de la mantisse. Cela est effectué en raison du fait que l'architecture est par exemple toujours alimentée avec une valeur de données à 64 bits provenant de la mémoire. Par conséquent, si le MBB spécifie un nombre plus faible d'octets que celui aligné en mémoire, la donnée invalide devrait être masquée avant de fournir la valeur de données de sortie au convertisseur. Des cas particuliers, tels que l'infini, des zéros, et pas un nombre, sont traités en parallèle de l'opération ET par les deux circuits appelés respectivement ALL0 ALL1 et vérification d'indicateur (FLAG CHECK), de la même façon qu'en . Ces deux circuits sont configurés pour détecter des motifs particuliers dans le train de bits et pour traiter les indicateurs de sortie. Les paramètres exp_max et exp_min sont calculés comme précédemment. La représente schématiquement un convertisseur 2500 pour effectuer une conversion IEEE-like en nombres g similaire à celle de la , mais avec la prise en charge d'exposants sous-normaux et biaisés, selon un exemple de mode de réalisation de la présente description. Pour le codage d'exposant biaisé, la différence principale par rapport à la représentation en complément à deux est la mise en œuvre d'une addition supplémentaire : une fois que l'exposant est extrait, il est ajouté au biais. De plus, une logique de décalage à droite (SRL) au lieu d'une arithmétique de décalage à droite (SRA) est effectuée. En effet, pendant la manipulation d'une représentation biaisée, il n'y a pas besoin de préserver l'exposant MSB, car il ne représente pas le signe de l'exposant. Fournir une prise en charge sous-normale conduit à un plus grand impact en termes de coûts de mise en œuvre et de latence. En effet, la première tâche à accomplir pendant le traitement avec un nombre à virgule flottante dé-normalisé est de compter les zéros non significatifs de la mantisse, afin de trouver la position correcte du bit caché et d'effectuer ainsi une étape de normalisation ultérieurement. Cela peut par exemple être effectué en ajoutant un étage pipeline avant celui utilisé dans la conversion IL2G standard, contenant un circuit LZC. L'entrée de cette unité est une version masquée du codage IEEE-Like afin de retirer les champs de signe et d'exposant. En outre, dans le premier étage de cette nouvelle architecture, certaines modifications doivent être apportées par rapport à l'architecture 2400 de la : - Dans le cas d'une représentation sous-normale réelle (mantisse dé-normalisée), la quantité de décalage de la mantisse est différente de la précédente, mais est désormais égale au résultat du circuit LZC. De cette façon, au niveau de la sortie du circuit de décalage, la mantisse est sous la forme 1.x. Par conséquent, deux multiplexeurs supplémentaires 2502, 2504 sont inclus afin de sélectionner les signaux corrects pour les cas où la mantisse d'entrée est dé-normalisée ou non. La logique pour piloter ces multiplexeurs est également ajoutée, qui pour faciliter l'illustration n'a pas été représentée en détails. Toutefois, cette logique (représentée sous forme d'un nuage), est par exemple constituée d'un additionneur à 16 bits, d'un comparateur à 16 bits et de deux portes ET à 2 entrées. Le signal au niveau de la sortie de cette logique est appelé isRealSubnormal (voir l'équation 22 plus bas). - En même temps, la conversion d'exposant est traitée de façon correspondante. En effet, dans le cas où le codage est sous forme dé-normalisée (nombre sous-normal réel), l'exposant de sortie doit être décodé en prenant en compte la quantité de dé-normalisation. Les équations suivantes décrivent les convertisseurs IEEE-Like : [Math 23] Les tableaux 7 et 8 suivants indiquent la différence entre une représentation normale et sous-normale. Dans l'exemple considéré ES = 2, codage exposant biaisé, taille de la mantisse = 6 [Table 6] [Table 7] . Convertisseurs matériels Custom Posit La représente schématiquement un convertisseur 2600 pour effectuer une conversion de nombres g en Custom Posit selon un exemple de mode de réalisation de la présente description. Cette architecture est constituée de 2 macro-étages, avec une latence globale de 4 cycles d'horloge. Cette architecture bénéficie de l'absence de l'étage final à complément à deux utilisé par Posit (voir la publication de Gustafson, John & Yonemoto, I., 2017). Beating ﬂoating point at its own game: Posit arithmetic. Super-computing Frontiers and Innovations. 4. 71-86. 10.14529/jsﬁ170206). La prise en charge de caractéristiques SUPPORT_ES_MAX est introduite afin de pallier le problème de Posit, dans lequel l'utilisateur peut définir un nombre très grand, caractérisé par un grand exposant, égal en pratique à maxpos ou minpos (voir la publication susmentionnée de Gustafson et al. 2017), mais ne laissant aucun espace pour la représentation de la mantisse dans le codage FP. Dans ce cas, le nombre n'a aucune précision, conduisant à un nombre inutile en termes de calcul d'algorithmes. Afin de résoudre ce problème, la mise en œuvre custom permet de spécifier un champ ES_MAX_DYNAMIC. Il a pour objectif de définir le paramètre exp_max, et donc exp_min, que le Custom Posit peut représenter. Cela fixe implicitement l'étendue maximale du champ RB et ainsi une taille minimale de la mantisse est toujours garantie. De plus, Connaissant a priori la longueur maximale des champs RB, le cas où il a une longueur lzoc_max, il n'est pas nécessaire d'utiliser un bit de fin, utilisé précédemment pour indiquer la fin du train de bits de RB. De cette façon, un bit supplémentaire de précision est gagné. Le calcul du paramètre lzoc_max est par exemple effectué dans le premier étage et utilise plusieurs additionneurs afin de mettre en œuvre l'équation 9 précédente. Toutefois, en raison de la combinaison de MBB, d'OP_ES et d'ES_MAX_DYNAMIC, au moins une mantisse de 1 bit devrait être toujours garantie par l'entrée utilisateur. Dans une configuration de non prise en charge uniquement de NAR "Not support only NAR", le matériel ne prend pas en charge la représentation non un réel Not a Real utilisée par le format Posit (voir la publication de Gustafson, John & Yonemoto, I., 2017), dans laquelle un codage unique est utilisé pour représenter les valeurs infini et pas un nombre. De cette façon, il y a des codages particuliers supplémentaires pour le Posit, permettant de distinguer les valeurs particulières. L'idée principale consiste à utiliser la même stratégie que IEEE-Like pour représenter les Inf et NaN (tableau 2) : - NaN est représenté comme signe pour distinguer entre pas un nombre Not a Number vrai ou faux. L'exposant est fixé au maximum, ainsi que le champ de mantisse, qui est rempli avec des 1. - INF est représenté comme un signe pour distinguer entre +INF et –INF. L'exposant est fixé au maximum, ainsi que le champ de mantisse, qui est rempli avec des 1 et un 0 au niveau du LSB. En outre, dans le Posit standard, le complément à deux est utilisé pour éviter d'avoir une représentation zéro négative. Toutefois, cela implique une logique supplémentaire, qui, dans notre cas, pendant un traitement de mantisses à plusieurs fragments, se traduit par un étage de pipeline supplémentaire, et ainsi dans une latence plus grande. Par conséquent, un complément à deux n'est par exemple pas pris en charge, bien qu'il puisse être pris en charge par un calcul supplémentaire. La représente schématiquement un convertisseur 2700 pour effectuer une conversion de Custom Posit en nombres g selon un exemple de mode de réalisation de la présente description. Comme pour l'unité de conversion G2PCUST, cette version de l'architecture enlève l'étage de complément à deux. Ainsi, seul les étages de compteur de zéros non significatifs Leading Zero Counter et de décalage à gauche Shift Left sont présents, réduisant le nombre de macro-étages à deux, et, ce faisant, réduisant la latence. S'agissant de SUPPORT_ES_MAX, la différence principale par rapport au Posit est qu'il y a quelques commandes supplémentaires liées au calcul de la taille des bits de régime, de la valeur LZOC. En effet, en plus du calcul de lzoc_max , également effectué dans l'autre bloc de conversion, le résultat au niveau de la sortie des circuits LZC est par exemple tronqué s'il est supérieur à lzoc_max , permettant d'avoir une conversion d'exposant correcte, qui, qu'il y ait prise en charge de SUPPORT_ES_MAX ou non, est calculé de la même façon. S'agissant de la prise en charge des codages particuliers de infini et NaN : - En plus du composant de vérification ALL0, qui est maintenant présent dans le même étage que le circuit LZC, un composant ALL1 est également utilisé. De cette façon, il est possible de distinguer entre un zéro et des représentations Inf ou NaN dans l'étage suivant et dernier. - Dans le dernier étage, le circuit de vérification d'indicateur Flag Check effectue également par exemple une vérification des nouveaux signaux provenant du composant ALL1, comme la mantisse toute à 1 et une mantisse toute à 1 et un 0 final. L'indicateur de sortie correct est par exemple augmenté également conformément au signe de train de bits d'entrée. Les équations suivantes décrivent les convertisseurs Custom Posit : [Math 24] où exp est la valeur entière de l'exposant d'entrée, e est la valeur entière de la partie ES de l'exposant entier. [Math 25] Convertisseurs matériels Not Contiguous Posit La représente schématiquement un convertisseur 2800 pour effectuer une conversion de nombres g en Not Contiguous Posit selon un exemple de mode de réalisation de la présente description. Cette architecture est constituée de 2 macro-étages, avec une latence globale de 5 cycles d'horloge. L'architecture 2800 est la même que celle mise en œuvre pour le format Custom Posit, avec l'ajout de quelques matériels liés au choix de la taille de codage d'exposant plus petite, ainsi que la partie de conversion d'exposant IEEE-Like. Dans la suite, seules les différences, en termes de matériel, par rapport au Custom Posit sont détaillées. Dans le circuit NORM & ROUND du premier macro-étage, la taille d'exposant de Posit est calculée et comparée avec le paramètre d'entrée ES_IEEE. Ainsi, la valeur de l'indicateur T-flag est décidée de façon correspondante (voir l'équation 12). Toutefois, l'exposant maximal qu'un NCP peut prendre est par exemple toujours celui adoptant le format IEEE-Like. Sur cette base, les paramètres exp_max et exp_min peuvent être calculés comme cela est décrit ici en relation avec la conversion de nombres g en IEEE-Like. Toutes les informations nécessaires pour effectuer la conversion d'exposant Posit dans l'étage suivant sont calculées comme précédemment (lzoc, signe d'exposant, etc.) et transmises à l'étage suivant comme précédemment. La latence globale de ce macro-étage est toujours seulement quatre cycles d'horloge, donnée par le pipeline interne de l'arrondisseur. Dans le circuit de décalage à droite (SHIFT R), séparé du décalage à droite de la mantisse, cet étage est celui qui héberge la conversion d'exposant à deux formats en parallèle. En particulier, les exposants IEEE-Like et Posit sont calculés ensemble puis, sur la base du bit T-Flag provenant de l'étage précédent, le correct est choisi au moyen, par exemple, d'un multiplexeur 2802. Également, dans le cas où la représentation conduit à un codage d'exposant IEEE-Like, des formats de complément à deux ou biaisés peuvent être sélectionnés par l'utilisateur. Enfin, comme précédemment, le codage NCP est obtenu en faisant une opération OU, à l'aide d'une porte OU 2804, entre le champ de bits de régime décalé + champs d'exposant et de mantisse décalée. Le signe est inséré dans l'étage suivant. La représente schématiquement un convertisseur 2900 pour effectuer une conversion depuis Not Contiguous Posit en nombres g selon un exemple de mode de réalisation de la présente description. Cette architecture est formée de 2 macro-étages, avec une latence globale de 2 cycles d'horloge. Comme dans l'architecture Custom Posit, l'entrée de train de bits "bit-stream" est fournie en tant qu'entrée au circuit LZC après avoir été masqué, afin de calculer la taille des bits de régime, dans le cas où l'exposant réel est exprimé dans le format Posit. Cette information peut être facilement extraite de "bit-stream" uniquement en considérant le deuxième MSB, le T-flag. Dans le cas où il est fixé à 1, le résultat du circuit LZC est simplement ignoré. En parallèle, la taille de l'exposant qui a été extraite est calculée et, comme toujours, la quantité de décalage de la mantisse est calculée. S'agissant du circuit de décalage à gauche (SHIFT L), sur la base de la valeur T-Flag, les deux procédés d'extraction de l'exposant sont mis en œuvre en parallèle. La représentation de l'exposant biaisé ou en complément à deux est prise en charge dans le cas où c'est un codage IEEE-Like. Un multiplexeur final 2902 est utilisé pour décider le trajet d'extraction correct, alors que la mantisse de sortie est alignée. Des vérifications habituelles concernant la représentation de valeurs particulières sont effectuées. Les équations suivantes décrivent les convertisseurs Custom Posit : [Math 26] Convertisseurs matériels Modified Posit Comme ce qui change essentiellement entre un format et l'autre est la conversion d'exposant, les étapes principales sont similaires à celles déjà discutées précédemment. Toutefois, pour les deux directions de conversion, le calcul de l'exposant est légèrement plus complexe. Cela signifie que, dans ce cas, le calcul de paramètres secondaires, tels que le compte de uns et de zéros non significatifs (LZOC), exp_max, exp_min et donc la quantité de décalage et la taille de la mantisse nécessaire pour les autres blocs, n'est pas direct comme pour les autres cas. Dans les blocs de conversion matériel Modified Posit, une structure matérielle plus complexe est attendue en raison de la complexité du codage de l'exposant. Toutefois, le nombre d'étages principaux est toujours de deux pour les deux directions de conversion. Même si le format MP est paramétrable par K et S, la mise en œuvre matérielle proposée est conçue pour prendre en charge comme paramètre d'entrée seulement S = 1. De cette façon, la complexité de l'algorithme est réduite pendant les étapes de conversion de l'exposant. La représente schématiquement un convertisseur 3000 pour effectuer une conversion depuis nombres g en Modified Posit selon un exemple de mode de réalisation de la présente description. Cette architecture est formée de 2 macro-étages, avec une latence globale de 5 cycles d'horloge. Le premier étage est par exemple réservé pour la normalisation et l'arrondi de la mantisse d'entrée par le circuit NORM & ROUND. Toutefois, afin d'obtenir les paramètres habituels, certaines opérations doivent être effectuées. Les plus intenses d'un point de vue du matériel sont les calculs d'à la fois exp_max et exp_min, de la taille ES (équation 14) et donc de la taille de la mantisse. La première de celles-ci peut être déterminée en utilisant la même formule générale que celle pour l'exposant général (équation 15), fixant lzoc = lzoc_max. En fait, étant donné un exposant en complément à deux en tant qu'entrée, faire cela dans un matériel conduit à un premier calcul de la valeur lzoc_max, qui est égale à dans le cas présent où S = 1. Toutefois, cette valeur devrait être inférieure à la lzoc_max absolue. Afin de générer exp_max, la chaîne 111..11 est par exemple tout d'abord décalée vers la gauche de la quantité lzoc_max_m1, affectée du signe moins, puis de K+1 positions. Comme pour le circuit de décalage à droite (SHIFT R), après l'étape de normalisation la mantisse coupée est décalée à droite pour le train de bits "bitstream" final. En parallèle, sachant à l'avance les paramètres lzoc et es_shamnt, la conversion d'exposant peut être effectuée comme la conversion Posit. La valeur finale de lzoc utilisée pour décaler les bits de régime initialisés + e est choisie en fonction de si l'étape d'arrondi a provoqué une augmentation ou une diminution de l'exposant. Avant d'envoyer en sortie le codage Modified Posirt final, des indicateurs d'entrée, ainsi qu'un arrondi par excès ou par défaut, sont vérifiés afin de produire un codage particulier le cas échéant. La représente schématiquement un convertisseur 3100 pour effectuer une conversion depuis Modified Posit en nombres g selon un exemple de mode de réalisation de la présente description. Cette architecture est constituée de deux macro-étages, avec une latence globale de deux cycles d'horloge. Compteur de zéros non significatifs : le train "bitstream" d'entrée pourrait avoir certains bits aléatoires provenant de la mémoire alignée à 64 bits externe. Par conséquent, les bits dépassant la limite MBB sont par exemple éliminés par filtrage. Ensuite, la valeur de compte de uns et de zéros non significatifs Leading Zero One Count (LZOC) est calculée au moyen du circuit LZC. Toutefois, le résultat LZOC est par exemple limité à la valeur lzoc_max . Une fois que la lzoc réelle a été calculée, il est possible de calculer également le paramètre es_size , sur la base de l'équation 14, et donc la quantité de décalage de l'étage suivant (voir les équations 26 plus bas). Ceci mis à part, les valeurs particulières sont vérifiées en utilisant les composants All0-All1, qui vérifient si le codage global est constitué de tous les bits du même signe. Le composant Flag Check dans l'étage suivant traite cette information. Le deuxième étage héberge par exemple le circuit de décalage (SHIFT L), qui reçoit l'entrée "bit-stream", retardée par un étage pipeline, et la décale vers la gauche de la quantité de décalage (voir équation 26 plus bas). La démontre que la plupart de la logique est utilisée pour la conversion de l'exposant. En effet, dans ce cas, la reconstruction d'exposant à nombres g n'est pas celle directe : l'idée est de calculer l'exposant final au moyen de l'ajout de deux contributions séparées, l'exposant de base et un décalage. En raison du fait que, pour les exposants positifs et négatifs, le calcul de base se modifie, ils sont par exemple calculés en parallèle, chacun au moyen d'un couple de logique de décalage à gauche (SLL). En considérant seulement le premier bit de régime, la base d'exposant correct peut par exemple être choisie au moyen d'un multiplexeur 3102. L'autre branche est réalisée par un premier décalage à droite du codage, puis en le masquant avec les K + lzoc _ m1 bits les moins significatifs. Enfin, l'exposant résultant peut être obtenu en ajoutant la base d'exposant et son décalage. Les équations suivantes décrivent les convertisseurs Modified Posit: [Math 27] On notera que les architectures des figures 22 à 31 ont certaines caractéristiques en commun, notamment le circuit NORM & ROUND, les circuits SHIFT RIGHT/SHIFT LEFT, et le circuit Flag Check. Alors que dans des modes de réalisation décrits ces éléments sont dupliqués entre les convertisseurs, dans des variantes de mode de réalisation il serait possible de mettre en œuvre un ou plusieurs de ces circuits sous forme d'un circuit partagé, qui est partagé par une pluralité de circuits de conversion de format. Une telle approche conduirait par exemple à une surface de circuit réduite. Deuxième aspect – arrondi FP La représente schématiquement un exemple d'une chaîne d'addition FP 3200, comprenant un additionneur à virgule flottante (FP ADDER) 3202, la LSU 118 et la mémoire, telle que la mémoire cache (CACHE) 120. La est basée sur une solution adoptée dans la publication : A. Bocco, “A Variable Precision hardware acceleration for scientiﬁc computing”, juillet 2020, la différence en précision entre l'unité à virgule flottante (FPU) et les données stockées dans une mémoire est obtenue en effectuant une opération d'arrondi dans l'unité de chargement et de stockage à nombres g (gLSU). L'additionneur FP 3202 est configuré pour recevoir deux valeurs à virgule flottante F1 et F2 et pour les ajouter à l'aide d'un circuit additionneur (ADDER) 3204. L'additionneur FP 3202 comprend en outre un circuit arrondisseur (ROUNDER) 3206, configuré pour effectuer sélectivement une opération d'arrondi sur la base d'un signal de commande à longueur d'octets Byte-length ADD (BLA). Selon une variante, le signal BLA indique une longueur de bits plutôt qu'une longueur d'octets. Par exemple, le signal de commande BLA est basé sur la valeur de précision de nombre g de travail (WGP), qui est par exemple stockée dans le registre d'états et fixe par exemple la longueur de bits ou d'octets d'addition. La sortie du circuit arrondisseur 3206 fournit le résultat arrondi de l'addition. La sortie de l'additionneur FP 3202 est fournie à la LSU 118, qui dans ce mode de réalisation comprend un circuit arrondisseur supplémentaire (ROUNDER) 3208, configuré pour effectuer sélectivement une opération d'arrondi sur la base d'un signal de commande à longueur d'octets Byte-length STORE (BLS). Par exemple, le signal de commande BLS est par exemple basé sur la valeur du budget d'octets maximal (MBB), qui fixe la longueur d'octets de chargement/stockage et qui est par exemple conservée dans le registre d'états. Selon une variante, le signal de commande BLS est basé sur la valeur de bits stockés (BIS), qui fixe la longueur de bits de chargement/stockage et qui est par exemple conservée dans le registre d'états. Le résultat généré par le circuit arrondisseur 3208 est fourni en tant que valeur de stockage STORE à la mémoire 120. Il est souhaitable d'effectuer une opération d'arrondi avant de stocker une valeur de données par la LSU. En effet, des situations peuvent survenir dans lesquelles les données dans la FSU sont calculées avec une précision plus grande que la précision désirée des données à stocker. En conséquence, la mantisse du nombre à stocker doit être arrondie avant d'être stockée. Par exemple, le fragment de code ci-après fournit un exemple de pseudo-code dans lequel deux nombres sont consécutivement ajoutés avec une précision donnée (par exemple 64 bits), puis 3 octets sont stockés dans la mémoire. Comme les données sont calculées avec une précision plus grande que celles à stocker dans la mémoire, l'arrondi est effectué deux fois : 1) dans l'additionneur ADD.D (l'additionneur FP doit avoir un étage d'arrondi) pour réduire les données à 64 bits, 2) dans l'opérateur de stockage avant d'envoyer les données à la mémoire pour réduire les données à 48 bits. Toutefois, un inconvénient de la mise en œuvre de la est qu'il y a une duplication des circuits d'arrondi relativement complexes 3206, 3208, conduisant à une surface de puce relativement importante et une consommation relativement élevée. En outre, l'opération d'arrondi effectuée par le circuit arrondisseur 3208 ajoute de la latence à l'opération de stockage. Un inconvénient supplémentaire de la mise en œuvre d'un arrondi deux fois est qu'il peut conduire à une erreur arithmétique. La représente schématiquement une chaîne d'addition FP 3200 selon un exemple de la présente description. La chaîne 3300 comprend par exemple le même additionneur FP 3202 que la solution de la , si ce n'est que le circuit arrondisseur (ROUNDER) 3206 est sélectivement commandé par un de deux signaux, le signal BLA ou le signal BLS. Par exemple, un multiplexeur 3302 a une entrée reliée pour recevoir le signal BLA, une deuxième entrée reliée pour recevoir le signal BLS et une entrée de commande reliée pour recevoir un signal de commande ADD.MEM_not_ADD, indiquant si le résultat de l'addition FP par l'additionneur FP 3202 doit être stocké directement dans la mémoire ou le cache 120 ou non, ou s'il y a un résultat intermédiaire à stocker dans le fichier de registres. Dans le cas où le signal de commande ADD.MEM_not_ADD est à un "0" logique, le multiplexeur 3302 fournit par exemple le signal de commande BLA au circuit arrondisseur 3206, de sorte que l'arrondi soit basé seulement sur les besoins du calcul en cours d'exécution. Selon une variante, dans le cas où le signal de commande ADD.MEM_not_ADD est à un "1" logique, le multiplexeur 3302 fournit par exemple le signal de commande BLS au circuit arrondisseur 3206, de sorte que l'arrondi soit basé directement sur les besoins de l'opération de stockage. Ainsi, la solution de la se fonde sur l'anticipation de l'opération d'arrondi final dans l'additionneur, au lieu de se faire dans l'unité de chargement et de stockage 118. Le circuit arrondisseur 3208 dans l'unité de chargement et de stockage 118 est par exemple enlevé. Cela signifie que, pour des résultats d'opérations qui doivent être stockées dans une mémoire externe, une unique opération d'arrondi est appliquée avant ce stockage, plutôt qu'une première opération d'arrondi par le circuit d'opération (par exemple le circuit additionneur 3202) puis une deuxième opération d'arrondi par le circuit de chargement et de stockage 118. Bien qu'un unique additionneur FP 3202 soit représenté en , dans le cas où la FPU comprend plusieurs additionneurs FP 3202, chacun est par exemple équipé avec le circuit arrondisseur 3206 avec un multiplexeur correspondant 3302 pour fournir soit le signal de commande BLA, soit le signal de commande BLS, adapté à l'opération en cours d'exécution. Par exemple, le signal ADD.MEM_not_ADD est généré sur la base d'une instruction logicielle à une architecture de jeu d'instructions (ISA) indiquant le moment où le résultat de l'addition doit être stocké dans la mémoire et non pas ajouté de nouveau. Par conséquent, l'ISA contient par exemple la prise en charge d'une instruction telle que “ADD.MEM” qui indique quand l'arrondi doit être effectué par la FPU avant le stockage, et indique, comme paramètre dans l'instruction, la valeur BLS indiquant la longueur de bits ou d'octets du nombre arrondi. Dans certains modes de réalisation, l'instruction ADD.MEM indique également les paramètres exp_max et exp_min. Cette instruction se différencie de l'instruction "ADD.D" en ce que la précision du résultat ajouté peut être décidée par un paramètre d'entrée d'instructions ou par les registres d'états décrits précédemment. Le fragment de code suivant fournit un exemple utilisant ADD.MEM comme dernière opération d'addition. Ce faisant, la dernière valeur de R4 sera réduite par l'additionneur lui-même sous forme d'une variable FP VP à 3 octets. De cette façon, l'étage d'arrondi supplémentaire dans l'opérateur de stockage peut être évité. Plutôt que d'être basé sur une instruction particulière telle que "ADD.MEM", arrondir avant le stockage pourrait être déclenché par la détection d'une instruction de stockage. Par exemple, la logique dans l'architecture est configurée pour détecter le moment où une instruction suivante est une opération de stockage du même registre de destination qu'une opération courante, et, le cas échéant, l'opération en cours d'exécution est modifiée pour inclure l'arrondi avant l'opération de stockage. Par exemple, dans certains modes de réalisation, cela implique la transformation automatique, à l'intérieur de l'ISA, de l'opération courante en une qui inclut l'arrondi, par exemple d'une opération ADD en une opération ADD.MEM dans le cas de l'additionneur décrit en relation avec la . Bien que la solution de la soit décrite en relation avec un additionneur FP, il sera clair à la personne du métier que le principe pourrait être appliqué à d'autres circuits d'opérations à virgule flottante, tels que d'autres circuits d'opérations arithmétiques, par exemple des circuits configurés pour effectuer une soustraction, une multiplication, une division, une mise au carré sqrt, 1/sqrt, log base e, log base 2, une accélération polynomiale (par exemple, division, sqrt, 1/sqrt, 1/x, etc., effectuée par une séquence de Taylor) etc., et/ou des circuits d'opération pour effectuer d'autres opérations, telles qu'une opération de déplacement. La représente le cas d'un seul circuit d'opération FP 3202. Dans des variantes de mode de réalisation, une unité FP pourrait comprendre une pluralité de circuits d'opération 3202 effectuant chacun une opération FP différente, et comprenant chacun un circuit arrondisseur correspondant 3206 et un circuit de commande associé 3302. Tous les circuits d'opération partagent par exemple une unité commune de chargement et de stockage 118. Selon une variante, il serait possible qu'une unité FP comprenne une pluralité des circuits d'opération 3202 ayant chacun une unité de traitement 3204 pour effectuer une opération FP différente, la pluralité de circuits d'opérations partageant un circuit arrondisseur commun 3206 et un circuit de commande associé 3302. En d'autres termes, chacun des circuits d'opérations fournit son résultat au circuit arrondisseur 3206 qui est configuré pour adapter l'opération d'arrondi sur la base de la longueur de bits ou d'octets souhaitée. De plus, bien que le multiplexeur 3302 constitue une partie de l'étage d'exécution dans l'exemple de la , dans des variantes de mode de réalisation les informations de longueur de bits ou d'octets pourraient être multiplexées par le multiplexeur 3302 intégré dans une unité de commande de l'étage de décodage d'instruction ou de l'étage de fourniture et le résultat transmis à l'unité d'opération 3202 de l'étage d'exécution. Divers modes de réalisation et variantes ont été décrits. La personne du métier comprendra que certaines caractéristiques de ces divers modes de réalisation et variantes pourraient être combinées, et d’autres variantes apparaîtront à la personne du métier. Par exemple, bien que dans les différents formats le biais de la valeur d'exposant soit décrit afin de centrer sur zéro, dans des variantes de mode de réalisation ces formats pourraient être biaisés afin de centrer la région dans laquelle le codage est plus compact quelque part ailleurs que la valeur exp 0. Dans certains modes de réalisation, le circuit de calcul à virgule flottante comprend une pluralité de circuits de conversion de format selon les exemples de mode de réalisation suivants. Exemple A1 : Circuit de calcul à virgule flottante comprenant : une mémoire interne (104, 114) stockant une ou plusieurs valeurs à virgule flottante dans un premier format ; une unité de chargement et de stockage (108, 118) pour charger des valeurs à virgule flottante en provenance d'une mémoire externe (120, 122) dans la mémoire interne et pour stocker des valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), l'unité de chargement et de stockage (108, 118) comprenant : - un premier circuit de conversion depuis un format interne en un format externe (206) configuré pour convertir au moins une des valeurs à virgule flottante dans la mémoire interne (104, 114) depuis le premier format en un premier format à virgule flottante à précision variable ; et - un deuxième circuit de conversion depuis un format interne en un format externe (207) configuré pour convertir au moins une des valeurs à virgule flottante dans la mémoire interne (104, 114) depuis le premier format en un deuxième format différent du premier format à virgule flottante à précision variable. Exemple A2 : Circuit de calcul à virgule flottante de l'exemple A1, dans lequel l'unité de chargement et de stockage (108, 118) comprend en outre : - un premier démultiplexeur (205) configuré pour fournir sélectivement l'au moins une valeur à virgule flottante à un circuit sélectionné parmi les premier et deuxième circuits de conversion depuis un format interne en un format externe (206, 207) ; et - un premier multiplexeur (209) configuré pour fournir sélectivement la valeur convertie générée par le premier ou le deuxième circuit de conversion depuis un format interne en un format externe (206, 207) à la mémoire externe (120, 122), dans lequel les sélections effectuées par le premier démultiplexeur (205) et le premier multiplexeur (209) sont commandées par un premier signal de commande commun (S_CTRL). Exemple A3 : Circuit de calcul à virgule flottante de l'exemple A1, dans lequel l'unité de chargement et de stockage (108, 118) est configurée pour fournir l'au moins une valeur à virgule flottante à la fois aux premier et deuxième circuits de conversion depuis un format interne en un format externe (206, 207), l'unité de chargement et de stockage (108, 118) comprenant en outre un circuit de commande (220) configuré pour valider sélectivement un des premier et deuxième circuits de conversion depuis un format interne en un format externe ou les deux (206, 207) afin de sélectionner celui qui doit effectuer la conversion. Exemple A4 : Circuit de calcul à virgule flottante comprenant : une mémoire interne (104, 114) stockant une ou plusieurs valeurs à virgule flottante dans un premier format ; une unité de chargement et de stockage (108, 118) pour charger des valeurs à virgule flottante en provenance d'une mémoire externe (120, 122) dans la mémoire interne (104, 114) et pour stocker des valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), l'unité de chargement et de stockage (108, 118) comprenant : - un premier circuit de conversion depuis un format externe en un format interne (216) configuré pour convertir au moins une valeur à virgule flottante à précision variable chargée à partir de la mémoire externe (120, 220) depuis un premier format de mémoire à virgule flottante à précision variable en le premier format à virgule flottante, et pour stocker le résultat de la conversion dans la mémoire interne (104, 114) ; et - un deuxième circuit de conversion depuis un format externe en un format interne (217) configuré pour convertir au moins une autre valeur chargée à partir de la mémoire externe (120, 122) depuis un deuxième format en le premier format à virgule flottante, et pour stocker le résultat de la conversion dans la mémoire interne (104, 114). Exemple A5 : Circuit de calcul à virgule flottante de l'exemple A4, dans lequel l'unité de chargement et de stockage (108, 118) comprend en outre : - un deuxième démultiplexeur (215) configuré pour fournir sélectivement l'au moins une valeur à virgule flottante à un circuit sélectionné parmi les premier et deuxième circuits de conversion depuis un format externe en un format interne (216, 217) ; et - un deuxième multiplexeur (219) configuré pour fournir sélectivement la valeur convertie générée par le premier ou le deuxième circuit de conversion depuis un format externe en un format interne (216, 217) à la mémoire interne (104, 114), dans lequel les sélections effectuées par le deuxième démultiplexeur (215) et le deuxième multiplexeur (219) sont commandées par un premier signal de commande commun (L_CTRL). Exemple A6 : Circuit de calcul à virgule flottante de l'exemple A4, dans lequel l'unité de chargement et de stockage (108, 118) est configurée pour fournir l'au moins une valeur à virgule flottante à la fois aux premier et deuxième circuits de conversion depuis un format externe en un format interne (216, 217), l'unité de chargement et de stockage (108, 118) comprenant en outre un circuit de commande (220) configuré pour valider sélectivement un des premier et deuxième circuits de conversion depuis un format externe en un format interne (206, 207) afin de sélectionner celui qui doit effectuer la conversion. Exemple A7 : Procédé de calcul à virgule flottante comprenant : le stockage, par une mémoire interne (104, 114) d'un dispositif de calcul à virgule flottante, d'une ou de plusieurs valeurs à virgule flottante dans un premier format ; le chargement, par une unité de chargement et de stockage (108, 118) d'un dispositif de calcul à virgule flottante, des valeurs à virgule flottante en provenance d'une mémoire externe (120, 122) dans la mémoire interne (104, 114), et le stockage, par l'unité de chargement et de stockage (108, 118), des valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), dans lequel l'unité de chargement et de stockage (108, 118) est configurée pour effectuer ledit stockage en : - convertissant, par un premier circuit de conversion depuis un format interne en un format externe (206), au moins une des valeurs à virgule flottante dans la mémoire interne (104, 114) depuis le premier format en un premier format à virgule flottante à précision variable ; et - convertissant, par un deuxième circuit de conversion depuis un format interne en un format externe (207), au moins une des valeurs à virgule flottante dans la mémoire interne (104, 114) depuis le premier format en un deuxième format différent du premier format à virgule flottante à précision variable. Exemple A8 : Procédé de l'exemple A7, dans lequel l'unité de chargement et de stockage (108, 118) est configurée pour effectuer ledit chargement en : - convertissant, par un premier circuit de conversion depuis un format externe en un format interne (216), au moins une valeur à virgule flottante à précision variable chargée à partir de la mémoire externe (120, 122) depuis le premier format à virgule flottante à précision variable en le premier format à virgule flottante et le stockage du résultat de la conversion dans la mémoire interne (104, 114) ; et - convertissant, par un deuxième circuit de conversion depuis un format externe en un format interne (217), au moins une autre valeur chargée à partir de la mémoire externe (120, 122) depuis le deuxième format en le premier format à virgule flottante et le stockage du résultat de la conversion dans la mémoire interne (104, 114). Exemple A9 : Procédé de calcul à virgule flottante comprenant : le stockage, par une mémoire interne (104, 114) d'un dispositif de calcul à virgule flottante, d'une ou de plusieurs valeurs à virgule flottante dans un premier format ; le chargement, par une unité de chargement et de stockage (108, 118) d'un dispositif de calcul à virgule flottante, de valeurs à virgule flottante en provenance d'une mémoire externe (120, 122) dans la mémoire interne (104, 114), et le stockage, par l'unité de chargement et de stockage (108, 118), de valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), dans lequel l'unité de chargement et de stockage (108, 118) est configurée pour effectuer ledit stockage en : - convertissant, par un premier circuit de conversion depuis un format externe en un format interne (216), au moins une valeur à virgule flottante à précision variable chargée à partir de la mémoire externe (120, 122) depuis le premier format à virgule flottante à précision variable en le premier format à virgule flottante et le stockage du résultat de la conversion dans la mémoire interne (104, 114) ; et - convertissant, par un deuxième circuit de conversion depuis un format externe en un format interne (217), au moins une autre valeur chargée à partir de la mémoire externe (120, 122) depuis un deuxième format en le premier format à virgule flottante, et le stockage du résultat de la conversion dans la mémoire interne (104, 114). Exemple A10 : Procédé selon l'exemple A7, A8 ou A9 comprenant en outre la mise en œuvre, par une unité à virgule flottante (116), d'une opération arithmétique à virgule flottante sur au moins une valeur à virgule flottante stockée par la mémoire interne (104, 114). Exemple A11 : Procédé selon l'exemple A7, A8, A9 ou A10, dans lequel le deuxième format est un deuxième format à virgule flottante à précision variable différent du premier format à virgule flottante à précision variable. En outre, bien que des modes de réalisation aient été décrits dans lesquels un circuit de calcul à virgule flottante peut comprendre une pluralité de circuits de conversion de formats, les exemples de mode de réalisation qui suivent sont également possibles. Exemple B1 : Circuit de calcul à virgule flottante comprenant : une mémoire interne (104, 114) stockant une ou plusieurs valeurs à virgule flottante dans un premier format ; une unité de chargement et de stockage (108, 118) pour charger des valeurs à virgule flottante en provenance d'une mémoire externe (120, 122) dans la mémoire interne et pour stocker des valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), l'unité de chargement et de stockage (108, 118) comprenant : - un premier circuit de conversion depuis un format interne en un format externe (206) configuré pour convertir au moins une des valeurs à virgule flottante dans la mémoire interne (104, 114) depuis le premier format en le format à virgule flottante à précision variable Custom Posit. Exemple B2 : Circuit de calcul à virgule flottante comprenant : une mémoire interne (104, 114) stockant une ou plusieurs valeurs à virgule flottante dans un premier format ; une unité de chargement et de stockage (108, 118) pour charger des valeurs à virgule flottante provenant d'une mémoire externe (120, 122) dans la mémoire interne (104, 114) et pour stocker des valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), l'unité de chargement et de stockage (108, 118) comprenant : - un premier circuit de conversion depuis un format externe en un format interne (216) configuré pour convertir au moins une valeur à virgule flottante à précision variable chargée à partir de la mémoire externe (120, 122) depuis le format à virgule flottante à précision variable Custom Posit en le premier format à virgule flottante et pour stocker le résultat de la conversion dans la mémoire interne (104, 114). Exemple B3 : dans le circuit de l'exemple 1 ou 2, le format à virgule flottante à précision variable Custom Posit comprend par exemple, pour représenter un nombre, un bit de signe (s), un champ de bits de régime (RB) rempli avec des bits de la même valeur, la longueur du champ de bits de régime indiquant un facteur d'échelle (useed k ) du nombre et étant limitée par une limite supérieure (lzoc_max), une partie d'exposant d'au moins un bit et une partie de fraction d'au moins un bit, et dans lequel le premier circuit de conversion depuis un format interne en un format externe comprend un circuit pour calculer la limite supérieure (lzoc_max). Exemple B4 : Circuit de calcul à virgule flottante comprenant : une mémoire interne (104, 114) stockant une ou plusieurs valeurs à virgule flottante dans un premier format ; une unité de chargement et de stockage (108, 118) pour charger des valeurs à virgule flottante provenant d'une mémoire externe (120, 122) dans la mémoire interne et pour stocker des valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), l'unité de chargement et de stockage (108, 118) comprenant : - un premier circuit de conversion depuis un format interne en un format externe (206) configuré pour convertir au moins une des valeurs à virgule flottante dans la mémoire interne (104, 114) depuis le premier format en le format à virgule flottante à précision variable Not Contiguous Posit. Exemple B5 : Circuit de calcul à virgule flottante comprenant : une mémoire interne (104, 114) stockant une ou plusieurs valeurs à virgule flottante dans un premier format ; une unité de chargement et de stockage (108, 118) pour charger des valeurs à virgule flottante provenant d'une mémoire externe (120, 122) dans la mémoire interne (104, 114) et pour stocker des valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), l'unité de chargement et de stockage (108, 118) comprenant : - un premier circuit de conversion depuis un format externe en un format interne (216) configuré pour convertir au moins une valeur à virgule flottante à précision variable chargée à partir de la mémoire externe (120, 122) depuis le format à virgule flottante à précision variable Not Contiguous Posit en le premier format à virgule flottante et pour stocker le résultat de la conversion dans la mémoire interne (104, 114). Exemple B6 : dans le circuit de l'exemple 4 ou 5, le format à virgule flottante à précision variable Not Contiguous Posit comprend par exemple, pour représenter un nombre, soit : - un bit indicateur ayant une première valeur, et un format Custom Posit comprenant un bit de signe (s), un champ de bits de régime (RB) rempli avec des bits de la même valeur, la longueur du champ de bits de régime indiquant un facteur d'échelle (useed k ) du nombre et étant limitée par une limite supérieure (lzoc_max), une partie d'exposant d'au moins un bit et une partie de fraction d'au moins un bit ; soit - le bit d'indicateur ayant une deuxième valeur et un format par défaut représentant le nombre, le format par défaut ayant un bit de signe (s), une partie d'exposant d'au moins un bit et une partie de fraction d'au moins un bit ; dans lequel le premier ou le deuxième circuit de conversion depuis un format interne en un format externe (206, 207) comprend un circuit pour calculer une taille d'exposant (ES) sur la base du format Custom Posit et comparer la taille d'exposant du format par défaut et définir la valeur du bit d'indicateur de façon correspondante. Exemple B7 : Circuit de calcul à virgule flottante comprenant : une mémoire interne (104, 114) stockant une ou plusieurs valeurs à virgule flottante dans un premier format ; une unité de chargement et de stockage (108, 118) pour charger des valeurs à virgule flottante provenant d'une mémoire externe (120, 122) dans la mémoire interne et pour stocker des valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), l'unité de chargement et de stockage (108, 118) comprenant : - un premier circuit de conversion depuis un format interne en un format externe (206) configuré pour convertir au moins une des valeurs à virgule flottante dans la mémoire interne (104, 114) depuis le premier format en le format à virgule flottante à précision variable Modified Posit. Exemple B8 : Circuit de calcul à virgule flottante comprenant : une mémoire interne (104, 114) stockant une ou plusieurs valeurs à virgule flottante dans un premier format ; une unité de chargement et de stockage (108, 118) pour charger des valeurs à virgule flottante provenant d'une mémoire externe (120, 122) dans la mémoire interne (104, 114) et pour stocker des valeurs à virgule flottante provenant de la mémoire interne (104, 114) dans la mémoire externe (120, 122), l'unité de chargement et de stockage (108, 118) comprenant : - un premier circuit de conversion depuis un format externe en un format interne (216) configuré pour convertir au moins une valeur à virgule flottante à précision variable chargée à partir de la mémoire externe (120, 122) depuis le format à virgule flottante à précision variable Modified Posit en le premier format à virgule flottante et pour stocker le résultat de la conversion dans la mémoire interne (104, 114). Exemple B9 : dans le circuit de l'exemple 7 ou 8, le format à virgule flottante à précision variable Modified Posit comprend par exemple un bit de signe (s), un champ de bits de régime (RB) rempli avec des bits de la même valeur, la longueur (lzoc) du champ des bits de régime indiquant un facteur d'échelle (useedk) du nombre et étant limitée par une limite supérieure (lzoc_max), une partie d'exposant d'au moins un bit et une partie de fraction d'au moins un bit, dans lequel le premier ou le deuxième circuit de conversion depuis un format interne en un format externe (206, 207) comprend un circuit pour calculer le paramètre lzoc de sorte que l'exposant exp du nombre soit codé par l'équation suivante : [Math 28] où K est la longueur d'exposant minimale et S est l'intervalle d'incrémentation des bits de régime. Exemple B10 : dans le circuit de l'un quelconque des exemples 1 à 9, l'unité de chargement et de stockage (108, 118) comprend en outre : - un deuxième circuit de conversion de format configuré pour convertir au moins une des valeurs à virgule flottante dans la mémoire interne (104, 114) depuis le premier format en un deuxième format à virgule flottante à précision variable ; et/ou - un troisième circuit de conversion de format configuré pour convertir au moins une valeur à virgule flottante à précision variable chargée à partir de la mémoire externe (120, 122) depuis un deuxième format à virgule flottante à précision variable en le premier format à virgule flottante et pour stocker le résultat de la conversion dans la mémoire interne (104, 114). Enfin, la mise en œuvre pratique des modes de réalisation et variantes décrits est à la portée de la personne du métier à partir des indications fonctionnelles données ci-dessus. Dispositif de calcul à virgule flottante comprenant : - un premier circuit d'opération à virgule flottante (FP) (3202) comprenant une première unité de traitement (3204) configurée pour effectuer une première opération sur au moins une valeur FP d'entrée (F1, F2) pour générer un résultat ; - un premier circuit arrondisseur (3206) configuré pour effectuer une opération d'arrondi sur le résultat de la première opération ; et - un premier circuit de commande (3202) configuré pour commander une longueur de bits ou d'octets appliquée par l'opération d'arrondi du premier circuit arrondisseur (3206), dans lequel le circuit de commande (3302) est configuré pour appliquer une première longueur de bits ou d'octets (BLA) si le résultat de la première opération doit être stocké dans une mémoire interne (114) du dispositif de calcul à virgule flottante à utiliser pour une opération suivante et pour appliquer une deuxième longueur de bits ou d'octets (BLS), différente de la première longueur de bits ou d'octets, si le résultat de la première opération doit être stocké dans une mémoire externe (120, 122). Dispositif de calcul à virgule flottante selon la revendication 1, comprenant en outre une unité de chargement et de stockage (118) configurée pour stocker dans une mémoire un nombre arrondi de la deuxième longueur de bits ou d'octets généré par le premier circuit arrondisseur (3206), l'unité de chargement et de stockage (118) ne comprenant aucun circuit arrondisseur. Dispositif de calcul à virgule flottante selon la revendication 2, dans lequel le premier circuit d'opération à virgule flottante (3202) comprend le premier circuit arrondisseur (3206) et le dispositif de calcul comprend en outre : - un deuxième circuit d'opération à virgule flottante (FP) (3202) comprenant une deuxième unité de traitement (3204) configurée pour effectuer une deuxième opération sur au moins une valeur FP d'entrée (F1, F2) pour générer un résultat et un deuxième circuit arrondisseur (3206) configuré pour effectuer une deuxième opération d'arrondi sur le résultat de la deuxième opération ; et - un deuxième circuit de commande (3302) configuré pour commander une longueur de bits ou d'octets appliquée par la deuxième opération d'arrondi, dans lequel l'unité de chargement et de stockage (118) est en outre configurée pour stocker dans une mémoire un nombre arrondi généré par le deuxième circuit arrondisseur (3206). Dispositif de calcul à virgule flottante selon la revendication 2, comprenant en outre un deuxième circuit d'opération à virgule flottante (FP) (3202) comprenant une deuxième unité de traitement (3204) configurée pour effectuer une deuxième opération sur au moins une valeur FP d'entrée (F1, F2) pour générer un résultat, dans lequel le premier circuit arrondisseur (3206) est configuré pour effectuer une deuxième opération d'arrondi sur le résultat de la deuxième opération et le premier circuit de commande (3302) est configuré pour commander une longueur de bits ou d'octets appliquée par la deuxième opération d'arrondi. Dispositif de calcul à virgule flottante selon l'une quelconque des revendications 1 à 4, dans lequel le premier circuit de commande (3302) comprend un multiplexeur (3302) ayant une première entrée reliée pour recevoir une première valeur de longueur représentant la première longueur de bits ou d'octets (BLA), et une deuxième entrée reliée pour recevoir une deuxième valeur de longueur représentant la deuxième longueur de bits ou d'octets (BLS), et une entrée de sélection reliée pour recevoir un signal de commande (ADD.MEM_not_ADD) indiquant si le résultat de la première opération doit être stocké dans la mémoire interne (114) ou dans la mémoire externe (120, 122). Dispositif de calcul à virgule flottante selon l'une quelconque des revendications 1 à 5, dans lequel le dispositif de calcul à virgule flottante met en œuvre une architecture de jeu d'instructions, et les première et deuxième longueurs de bits ou d'octets sont indiquées dans des instructions de l'architecture de jeu d'instructions. Dispositif de calcul à virgule flottante selon l'une quelconque des revendications 1 à 6, dans lequel l'unité de traitement (3204) est une unité arithmétique et l'opération est une opération arithmétique, telle qu'une addition, une soustraction, une multiplication, une division, une racine carrée (sqrt), 1/sqrt, log, et/ou une accélération polynomiale et/ou l'opération comprend une opération de déplacement. Procédé de calcul à virgule flottante comprenant : - la mise en œuvre, par une première unité de traitement (3204) d'un premier circuit d'opération à virgule flottante, d'une première opération sur au moins une valeur FP d'entrée (F1, F2) pour générer un résultat ; - la mise en œuvre, par un premier circuit arrondisseur (3206), d'une première opération d'arrondi sur le résultat de la première opération ; et - la commande d'une longueur de bits ou d'octets appliquée par la première opération d'arrondi, comprenant l'application d'une première longueur de bits ou d'octets (BLA) si le résultat de la première opération doit être stocké dans une mémoire interne (114) du dispositif de calcul à virgule flottante à utiliser pour une opération suivante, et l'application d'une deuxième longueur de bits ou d'octets (BLS), différente de la première longueur de bits ou d'octets, si le résultat de la première opération doit être stocké dans une mémoire externe (120, 122). Procédé selon la revendication 8, comprenant en outre le stockage, par une unité de chargement et de stockage (118) du dispositif de calcul à virgule flottante, d'un nombre arrondi de la deuxième longueur de bits ou d'octets généré par le premier circuit arrondisseur (3206), dans lequel l'unité de chargement et de stockage (118) ne comprend aucun circuit arrondisseur. Procédé selon la revendication 9, comprenant en outre : - la mise en œuvre, par un deuxième circuit d'opération à virgule flottante (FP) (3202) comprenant une deuxième unité de traitement (3204), d'une deuxième opération sur au moins une valeur FP d'entrée (F1, F2) pour générer un résultat ; - la mise en œuvre, par un deuxième circuit arrondisseur (3206), d'une deuxième opération d'arrondi sur le résultat de la deuxième opération ; - la commande, par un deuxième circuit de commande (3302), d'une longueur de bits ou d'octets appliquée par la deuxième opération d'arrondi ; et - le stockage dans une mémoire, par l'unité de chargement et de stockage (118), d'un nombre arrondi généré par le deuxième circuit arrondisseur (3206). Procédé selon la revendication 9, comprenant en outre : - la mise en œuvre, par un deuxième circuit d'opération à virgule flottante (FP) (3202), comprenant une deuxième unité de traitement (3204), d'une deuxième opération sur au moins une valeur FP d'entrée (F1, F2) pour générer un résultat ; - la mise en œuvre, par le premier circuit arrondisseur (3206), d'une deuxième opération d'arrondi sur le résultat de la deuxième opération ; et - la commande, par le premier circuit de commande (3302), d'une longueur de bits ou d'octets appliquée par la deuxième opération d'arrondi du premier circuit arrondisseur (3206). Procédé selon l'une quelconque des revendications 8 à 11, dans lequel le circuit de commande (3302) comprend un multiplexeur (3302) ayant une première entrée reliée pour recevoir une première valeur représentant la première longueur de bits ou d'octets (BLA) et une deuxième entrée reliée pour recevoir une deuxième valeur de longueur représentant la deuxième longueur de bits ou d'octets (BLS), et une entrée de sélection reliée pour recevoir un signal de commande (ADD.MEM_not_ADD) indiquant si le résultat de la première opération doit être stocké dans la mémoire interne (114) ou dans la mémoire externe (120, 122). Procédé selon l'une quelconque des revendications 8 à 12, dans lequel le dispositif de calcul à virgule flottante met en œuvre une architecture de jeu d'instructions et les première et deuxième longueurs de bits ou d'octets sont indiquées dans des instructions de l'architecture de jeu d'instructions. Procédé selon l'une quelconque des revendications 8 à 13, dans lequel la première opération est une opération arithmétique, telle qu'une addition, une soustraction, une multiplication, une division, une racine carrée (sqrt), 1/sqrt, log, et/ou une accélération polynomiale ou une opération de déplacement.