Brevet FR3093571A1 — publié le 20200911

Description Titre de l'invention : PROCÉDÉ ET DISPOSITIF DE REPRÉ- SENTATION EN VIRGULE FLOTTANTE AVEC PRÉCISION VARIABLE Domaine technique 100011 La présente description concerne de façon générale le domaine des calculs en virgule Ilottante et en particulier un procédé et un dispositif de calcul à précision variable. Technique antérieure [0002] 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 communément 16, 32, 64 ou 128 bits, bien que des nombres non binaires et des nombres plus grands que 128 bits soient aussi pris en charge. [0003] Un inconvénient. de la représentation FP de la norme IEEE 754-2008 est que, en raison de la nature discrète des longueurs en bits, les calculs basés sur des nombres FP peuvent être affectés d'erreurs de calcul comme des erreurs d'arrondi, des erreurs d'annulation et des erreurs d'absorption. [0004] Les erreurs d'annulation surviennent 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 ayant des valeurs relativement proches mais non égales. Vu la précision associée à ces grands nombres FP, la soustraction donne un résultat de zéro. [0005] Les erreurs d'absorption surviennent 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 vu la précision associée au nombre FP très grand, l'addition ou la soustraction ne provoque aucune modification du grand nombre FP. [0006] L'accumulation d'erreurs d'arrondi, d'annulation et d'absorption peut rapidement conduire à des inexactitudes très significatives dans les calculs. [0007] Le calcul à précision variable, connu aussi dans la technique sous le nom de calcul à précision multiple, à trans-précision et à précision contrôlée, procure un moyen pour obtenir des améliorations en ce qui concerne la précision lorsque cela est nécessaire, réduisant ainsi les erreurs de calcul. Le calcul à précision variable est particulièrement pertinent pour résoudre des problèmes qui ne sont pas très stables d'un point de vue numérique, ou lorsqu'une précision particulièrement élevée est souhaitée à certains points du calcul. [0008] Toutefois, il existe des problèmes techniques avec les solutions de calcul à précision variable existantes, au moins en ce qui concerne l'empreinte mémoire. Il existe donc un besoin dans la technique d'un procédé et d'un dispositif améliorés pour réaliser des 2 calculs à précision variable. Résumé de l'invention [0009] Un objet de modes de réalisation de la présente description est de répondre au moins partiellement à une ou plusieurs difficultés de l'art antérieur. [0010] Selon un mode de réalisation, on prévoit un procédé de mémorisation, par un circuit de chargement et de stockage ou par d'autres moyens de traitement, d'une valeur en virgule flottante à précision variable à une adresse mémoire d'une mémoire, le procédé comprenant : réduire la longueur en bits de la valeur en virgule flottante à précision variable à pas plus qu'une limite de taille ; et mémoriser la valeur en virgule flottante à précision variable dans l'une d'une pluralité de zones de stockage dans la mémoire, chacune de la pluralité de zones de stockage comportant un espace de stockage égal ou supérieur à la limite de taille. [0011] Dans certains modes de réalisation, la longueur en bits est réduite soit : en dé- terminant, en comparant une longueur en bits de la valeur en virgule flottante à précision variable à la limite de taille, que la longueur en bits de la valeur en virgule flottante à précision variable dépasse la limite de taille, puis en arrondissant ou en tronquant la valeur en virgule flottante à précision variable ; soit en convertissant la valeur en virgule flottante à précision variable d'un premier format en un deuxième format, dans le deuxième format la longueur en bits étant limitée à pas plus que la limite de taille. [0012] Selon un mode de réalisation, la limite de taille est mémorisée dans un registre ac- cessible par le circuit de chargement et de stockage ou d'autres moyens de traitement, la limite de taille étant programmable. [0013] Selon un mode de réalisation, le procédé comprend en outre, avant de réduire la longueur en bits, la réception par le circuit de chargement et de stockage ou d'autres moyens de traitement d'une instruction de chargement comprenant un ou plusieurs bits indiquant la limite de taille. [0014] Selon un mode de réalisation, la limite de taille est égale à un multiple de p bits, où p est un entier positif, la limite de taille n'étant pas égale à une puissance de 2. [0015] Selon un mode de réalisation, le procédé comprend l'étape consistant à comparer la longueur en bits de la valeur en virgule flottante à précision variable à la limite de taille, et avant la comparaison, à convertir la valeur en virgule flottante à précision variable d'un troisième format de virgule flottante à précision variable en le deuxième format de virgule flottante à précision variable. [0016] Selon un mode de réalisation, la valeur en virgule flottante à précision variable comprend un champ d'exposant, un champ de mantisse et au moins un champ de taille indiquant une longueur en bits absolue ou relative du champ d'exposant et/ou du 3 champ de mantisse. [0017] Selon un mode de réalisation, la réduction de la longueur en bits de la valeur en virgule flottante à précision variable à pas plus que la limite de taille comprend une modification dudit au moins un champ de taille compte tenu de la longueur en bits réduite de la valeur en virgule flottante à précision variable. [0018] Selon un mode de réalisation, ledit au moins un champ de taille comprend un champ de taille d'exposant et un champ de taille de mantisse. [0019] Selon un mode de réalisation, si une longueur en bits dudit au moins un champ de taille est capable d'indiquer une longueur en bits du champ d'exposant et/ou du champ de mantisse qui dépasserait la limite de taille, l'étape de réduction de la longueur en bits comprend de mettre ledit au moins un champ de taille à une valeur maximum pour coder au moins un type de valeur FP spéciale. [0020] Selon un mode de réalisation, chaque zone de stockage comprend une pluralité de sous-portions, la mémorisation de la valeur en virgule flottante à précision variable comprenant la mémorisation dudit au moins un champ de taille de la valeur en virgule flottante à précision variable dans une ou plusieurs premières sous-portions de la zone de stockage. [0021] Selon un autre aspect, on prévoit un procédé de lecture, à une adresse mémoire dans une mémoire, d'une valeur en virgule flottante à précision variable mémorisée selon le procédé susmentionné, comprenant : lire lesdites une ou plusieurs premières sous-portions ; identifier, sur la base dudit au moins un champ de taille, une ou plusieurs autres sous-portions non vides de la zone de stockage ; et lire lesdites une ou plusieurs autres sous-portions non vides de la zone de stockage. [0022] Selon un mode de réalisation, l'identification desdites une ou plusieurs autres sous- portions non vides comprend en outre l'identification d'au moins une autre sous-portions vide de la zone de stockage, ladite au moins une autre sous-portion vide n'étant pas lue. [0023] Selon un autre aspect, on prévoit un procédé de lecture, à une adresse mémoire dans une mémoire, d'une ou plusieurs valeurs en virgule flottante à précision variable mémorisées selon le procédé susmentionné, comprenant : lire des valeurs de bits dans lesdites une ou plusieurs zones de stockage de la mémoire ; et extraire des valeurs de bits lues une ou plusieurs valeurs en virgule flottante à précision variable identifiées sur la base dudit au moins un champ de taille de chaque valeur. [0024] Selon un autre aspect, on prévoit un procédé de résolution d'un problème scientifique en utilisant au moins un processeur à virgule flottante à précision variable, le procédé comprenant : générer au moins un résultat intermédiaire représenté par une valeur en virgule flottante à précision variable de M bits ; et mémoriser la valeur en virgule flottante à précision variable de M bits dans une mémoire selon le procédé sus- mentionné. [0025] Selon un autre aspect, on prévoit un système de calcul comprenant un processeur à virgule flottante à précision variable agencé pour générer des valeurs en virgule flottante à précision variable, le processeur FP VP, et/ou un circuit de chargement et de stockage couplé au processeur FP VP, étant agencés pour mémoriser une valeur en virgule flottante à précision variable dans une mémoire en réduisant la longueur en bits de la valeur en virgule flottante à précision variable à pas plus qu'une limite de taille, et en mémorisant la valeur en virgule flottante à précision variable dans l'une d'une pluralité de zones de stockage dans la mémoire, chacune de la pluralité de zones de stockage ayant un espace de stockage égal ou supérieur à la limite de taille. [0026] Selon un mode de réalisation, le processeur FP VP, et/ou le circuit de chargement et de stockage couplé au processeur FP VP, sont agencés pour réduire la longueur en bits de la valeur en virgule flottante à précision variable soit en déterminant, en comparant une longueur en bits de la valeur en virgule flottante à précision variable à la limite de taille, que la longueur en bits de la valeur en virgule flottante à précision variable dépasse la limite de taille, puis en arrondissant ou en tronquant la valeur en virgule flottante à précision variable ; soit en convertissant la valeur en virgule flottante à précision variable d'un premier format en un deuxième format, dans le deuxième format la longueur en bits étant limitée à pas plus que la limite de taille. [0027] Selon un mode de réalisation, le système de calcul comprend en outre un registre mé- morisant une indication de la limite de taille, le registre étant accessible et programmable par le processeur à virgule flottante à précision variable et/ou par le circuit de chargement et de stockage. [0028] Selon un mode de réalisation, le processeur FP VP, et/ou un circuit de chargement et de stockage couplé au processeur FP VP, sont agencés pour mémoriser la valeur en virgule flottante à précision variable dans la mémoire sur la base d'une instruction de stockage, l'instruction de stockage comprenant un ou plusieurs bits indiquant la limite de taille. [0029] Selon un mode de réalisation, le processeur FP VP est mis en oeuvre : comme partie d'une unité de traitement graphique ; ou comme partie d'une unité à virgule flottante ; ou comme partie d'un dispositif de traitement principal couplé à une unité à virgule flottante. Brève description des dessins [0030] 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 illustratif et non limitatif en relation avec les figures jointes parmi lesquelles : [0031] [fig.1] la figure 1 représente schématiquement un système de calcul à précision variable selon un exemple de réalisation ; [0032] [fig.2] la figure 2 représente le format de nombre en virgule flottante à précision variable UNUM ; [0033] [fig.3] la figure 3 représente un graphique représentant une approche itérative pour résoudre un problème scientifique ; [0034] [fig.4] la figure 4 est un organigramme représentant un exemple d'approche itérative pour converger vers une solution à un problème scientifique ; [0035] [fig.5] la figure 5 représente des adresses mémoire d'une mémoire mémorisant des nombres en virgule flottante, dans laquelle chaque nombre a une empreinte mémoire variable ; [0036] [fig.6] la figure 6 représente schématiquement un système de calcul à précision variable selon un exemple de réalisation de la présente description ; [0037] [fig.7] la figure 7 représente un exemple d'un format de nombre en virgule flottante à précision variable assurant un format mémoire borné selon un exemple de réalisation de la présente description ; [0038] [fig.8] la figure 8 représente des adresses mémoire d'une mémoire mémorisant des nombres en virgule flottante, dans laquelle chaque nombre est dans un format de mémoire borné selon un exemple de réalisation de la présente description ; [0039] [fig.9] la figure 9 est un organigramme illustrant des étapes dans un procédé de mé- morisation d'un nombre en virgule flottante respectant un format de mémoire borné à une adresse mémoire selon un exemple de réalisation de la présente description ; [0040] [fig.10] la figure 10 est un organigramme illustrant des étapes dans un procédé de lecture d'un nombre en virgule flottante respectant un format de mémoire borné à une adresse mémoire selon un exemple de réalisation de la présente description ; [0041] [fig.11] la figure 11 représente un exemple d'un ensemble de formats pour une pluralité de types de nombres FP respectant un format de mémoire borné selon un exemple de réalisation de la présente description ; [0042] [fig.12] la figure 12 représente un exemple d'ensemble de formats pour une pluralité de types de nombres FP respectant un format de mémoire borné selon un autre exemple de réalisation de la présente description ; [0043] [fig.13] la figure 13 représente un exemple d'ensemble de formats pour une pluralité de types de nombres FP respectant un format de mémoire borné selon un autre exemple de réalisation de la présente description ; et [0044] [fig.14] la figure 14 représente un exemple d'ensemble de formats pour une pluralité de types de nombres FP respectant un format de mémoire borné selon encore un autre exemple de réalisation de la présente description. Description des modes de réalisation 6 [0045] 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 avoir les mêmes références et peuvent disposer de propriétés structurelles, dimensionnelles et matérielles identiques. [0046] 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 ou couplés entre eux, cela signifie que ces deux éléments peuvent être connectés ou être reliés ou couplés par l'intermédiaire d'un ou plusieurs autres éléments. [0047] Sauf précision contraire, les expressions "environ", "approximativement", "sen- siblement" et "de l'ordre dc" signifient à 10 % près, et de préférence à 5 % près. [0048] Dans la spécification suivante, on considérera que les ternies suivants ont les signi- fications suivantes : - nombre ou valeur en virgule flottante (FP) : nombre exprimé sous forme d'un exposant c et d'une mantisse ou fraction f ; - format FP : ensemble défini de champs dans un ordre défini utilisé pour représenter un nombre FP, et comportant au moins un champ représentant l'exposant c, et un autre champ représentant la mantisse ou fraction f ; - format FP à précision variable (VP) auto-descriptif : tout format de nombre en virgule flottante comportant un champ d'exposant, un champ de mantisse, et 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 en bits entre les champs d'exposant et de mantisse, soit une longueur combinée des champs d'exposant et de mantisse ou du nombre FP complet. Le format FP VP décrit ici comprend optionnellement un bit de signe, un bit d'incertitude et à la fois un champ de taille d'exposant indiquant la taille de l'exposant et un champ de taille de mantisse indiquant la taille de la mantisse ; - format de mémoire borné : format FP VP auto-descriptif tel que défini précédemment, et pour lequel aucune valeur ne dépasse une longueur en bits maximum définie par un budget à frontière maximum ou un budget en multiplets maximum (MBB), décrit plus en détail ci-après ; et - type de valeur FP spéciale : toute valeur non définie ou non représentable, des exemples étant des valeurs qui ne sont pas des nombres (NaN), qui sont à presque l'infini positif ou négatif, ou qui définissent des intervalles bornés par presque l'infini positif ou négatif. [0049] La figure 1 illustre schématiquement un système de calcul à précision variable 100 comprenant une unité à virgule flottante (FPU) 102 comprenant un ou plusieurs pro- 7 cesseurs sous le contrôle d'instructions mémorisées dans une mémoire d'instructions (INSTRUCTION MEMORY) 104. Le FPU 102 comprend par exemple un bloc-notes (SCRATCHPAD) 106 et est couplé à une autre mémoire 108, qui est par exemple une mémoire cache (CACHE). [0050] Le bloc-notes 106 est par exemple une mémoire mémorisant des nombres FP à précision variable relativement précis, par exemple allant jusqu'à 256 bits chacun. Cette mémoire 106 est par exemple mise en oeuvre par des registres, par une matrice mémoire relativement petite, ou par tout autre type de mémoire ayant des temps d'accès relativement rapides. La mémoire cache 108 est par exemple une mémoire plus grande que le bloc-notes 106, mais a des temps d'accès plus longs que ceux du bloc-notes 106. [0051] La figure 2 représente un format de nombre FP VP connu dans la technique sous le nom de format de nombre universel (UNUM). [0052] Le format UNUM comprend six champs référencés 201 à 206 en figure 2. Lc champ 201 contient une valeur s indiquant le signe du nombre, par exemple utilisant un seul bit, le champ 202 contient un exposant c du nombre, le champ 203 contient une fraction ou mantisse f du nombre, le champ 204 contient un bit d'incertitude u, ou uhit, associé au nombre, le champ 205 contient une taille d'exposant es-1, et le champ 206 contient une taille de fraction ou de mantisse fs-1. Ainsi, le format UNUM est un format auto-descriptif en ce que des informations concernant le nombre de bits formant l'exposant et le nombre de bits formant la mantisse, tels que définis par les champs 205 et 206, sont dynamiques et sont contenues dans la valeur FP VP, contrairement au format défini par la norme IEEE 754. Ces tailles peuvent par exemple être personnalisées en fonction des besoins d'une application ou d'un utilisateur. [0053] Lorsqu'elle est exprimée en bits, une valeur au format UNUM peut être décodée selon l'équation suivante [Math I] e (2') (I - Boo le[e 01) x - (-1)'2 (Boole [e > 0] + 2ts) où s est le bit de signe, e est l'exposant, es est la taille de l'exposant en bits, f est la mantisse, k est la taille de la mantisse en bits, et Boolele>01 est une fonction booléenne de la forme Boole[test] qui renvoie 1 lorsque le test est vrai, et 0 autrement. La fraction 17(2fs) est par exemple dans la plage 10,1), en d'autres termes supérieure ou égale à zéro et inférieure à 1. 100541 Le format UNUM assure une représentation à précision variable présentant des avantages pour divers types de calculs scientifiques, dont on va décrire des exemples en faisant référence aux figures 3 et 4. 8 [0055] La figure 3 est un graphique représentant une approche itérative pour résoudre un problème scientifique. Par exemple, on souhaite trouver x qui résout la relation Ax=h, où x est un vecteur de n éléments de valeurs xl à x', b est un vecteur de n éléments de valeurs bl à b', et A est une matrice n par n fournissant les données d'entrée. Dans un exemple, n est relativement grand, par exemple égal ou supérieur à 500 000, ce qui implique environ un million de degrés de liberté (DoF) ou plus. L'axe y en figure 3 représente par exemple : [Math.2] IlA x - b II [0056] et l'axe x représente par exemple : Il X n II 100571 Une courbe 302 en figure 3 représente la convergence de l'approche itérative, qui atteint zéro lorsque x est tel que Ax=h. 100581 Le calcul à précision variable est particulièrement bénéfique pour le type de calcul par itérations représenté en figure 3. En effet, l'approche itérative représentée en figure 3 implique de démarrer à un point de la courbe 302, tel que celui référencé 304, associé à une valeur de x relativement élevée. La valeur de Ax-h à ce point de départ a par exemple une amplitude relativement élevée, et devrait par conséquent être représentée en utilisant un exposant relativement long, alors que la fraction est de moindre importance. Les valeurs de x sont ensuite modifiées afin de se déplacer le long de la courbe 302, et alors que la solution converge vers une valeur finale de x, la valeur de Ax-h va devenir de plus en plus petite jusqu'à atteindre zéro à la précision donnée de la valeur FP VP correspondante. Pour une précision raisonnable, ces valeurs proches de la convergence devraient être représentées en utilisant une fraction relativement longue, alors que les exposants de ces valeurs peuvent être faibles. Ainsi il serait bénéfique de représenter les valeurs pour une telle approche itérative avec une précision variable, autrement dit où le nombre de bits représentant l'exposant et la fraction peuvent changer au cours du calcul, à partir d'un exposant relativement grand et d'une fraction relativement petite au début de l'algorithme jusqu'à un exposant relativement petit et une fraction relativement grande vers la fin de l'algorithme. [0059] La figure 4 est un organigramme représentant un exemple de procédé itératif pour converger vers une solution à un problème scientifique, ce procédé conduisant par exemple à la courbe 302 de la figure 3. En particulier, l'exemple de la figure 4 est basé sur un résolveur de Jacobi simplifié qui utilise plusieurs boucles imbriquées. [0060] Dans une étape 401, une valeur d'itération K est par exemple mise à zéro. [0061] Dans une étape 402 après l'étape 401, une variable o est par exemple mise à zéro, et une variable j est par exemple mise à 1. [0062] Dans une étape 403 après l'étape 402, on détermine si les variables j et i ne sont pas 9 égales. Si elles ne sont pas égales, une étape 404 est réalisée, étape dans laquelle la variable o est incrémentée d'un incrément égal à aii.xi(K), où ai; est une valeur dans la matrice d'entrée A à la colonne i et la rangée j, et x; est la valeur de rang j dans le vecteur x. [0063] Après l'étape 404, ou après l'étape 403, si les variables i et j sont égales, une étape 405 est réalisée dans laquelle on détermine si j est égal à n, en d'autres termes si la dernière rangée de la matrice d'entrée A a été atteinte. Si ce n'est pas le cas, j est incrémenté dans une étape 406, puis l'étape 403 est répétée. Par contre, si j est égal à n, l'opération suivante est l'étape 407. [0064] Dans une étape 407, une valeur xi pour l'itération K+1 est calculée en fonction de la valeur courante de a, c'est-à-dire x,(K.»=f(a). [0065] Après l'étape 407, dans une étape 408, on détermine si la variable i est égale à n, en d'autres termes si la dernière colonne de la matrice d'entrée A a été atteinte. Dans la négative, i est incrémenté dans une étape 409, puis les étapes 402 à 407 sont répétées. [0066] Si dans l'étape 408 la variable i est égale à n, alors dans une étape 410, on détermine si la convergence a été atteinte ou non, sur la base par exemple d'un calcul de la norme du résidu. Dans la négative, dans une étape 411, la variable K est incrémentée et la variable i est réinitialisée à 1, et le procédé revient ensuite à l'étape 402. Une fois qu'on a déterminé dans l'étape 410 que la convergence a été atteinte, le procédé par exemple sc termine à une étape 412. [0067] Selon certains modes de réalisation, les valeurs accumulées de la variable o pendant la boucle intérieure constituée des étapes 403 à 406 de la figure 4 sont mémorisées dans un bloc-notes. Toutefois, les valeurs de xi occupent par exemple une quantité de mémoire relativement grande, et sont ainsi par exemple mémorisées dans un cache. [0068] La figure 5 représente des adresses mémoire d'une mémoire 500 mémorisant des nombres en virgule flottante dans un format à précision variable auto-descriptif comme le format UNUM décrit précédemment en relation avec la figure 2. Par exemple, les valeurs mémorisées dans la mémoire 500 correspondent à des données intermédiaires qui sont trop grosses pour être maintenues dans le bloc-notes et sont ainsi mémorisées en mémoire principale. Par exemple, dans le cas particulier de la figure 4, de telles données intermédiaires pourraient correspondre aux valeurs de xi générées dans l'étape 407. Au vu du format à précision variable et donc de la longueur en bits variable des valeurs, les valeurs stockées en mémoire ont une empreinte mémoire variable. Les valeurs sont par exemple représentées par des nombres Ul, U2, etc., dans le format UNUM ayant un bit de signe, un exposant et une fraction représentés par des portions en hachures denses en figure 5, et les paramètres u, es-1 et fs-1 représentés par des portions en hachures légères en figure 5. La longueur de chaque valeur UNUM dans la mémoire est représentée par une flèche en trait interrompu. Des adresses @0 à @ 14 sont représentées en figure 5, les adresses ayant un pas d'adresse d'un multiplet de 8 bits. [0069] Les valeurs UNUM sont à longueur variable, et toutes sont sur plus d'un seul multiplet. Les valeurs sont stockées en mémoire l'une après l'autre sans espace vide entre les valeurs adjacentes. Cela présente des avantages en ce qui concerne l'efficacité d'utilisation de la mémoire. Toutefois, des accès affins à des positions aléatoires dans la matrice mémoire sont difficiles. Un accès mémoire affin implique que l'adresse à accéder est prévisible, en d'autres termes que l'adresse d'une valeur de données s[n] peut être déterminée par une fonction linéaire de n, de la forme a.n-Ffi. Par exemple, pour accéder à la valeur U4 en figure 5, les adresses @9 à @ 14 doivent être lues, mais ces informations d'adresse peuvent seulement être obtenues en lisant d'abord chacune des valeurs Ul à U3 afin de trouver les longueurs en bits de chacune de ces valeurs. Cela place une contrainte significative sur chacune de telles opérations de lecture. [0070] La capacité de réaliser des accès mémoire affins est importante dans de nombreuses applications. Par exemple, en faisant référence au procédé itératif de la figure 4, l'accès aux valeurs xi dans l'étape 404, ou la mise à jour des valeurs xi dans l'étape 407, impliquent un accès mémoire affin. [0071] Une autre difficulté rencontrée dans la mémorisation de valeurs FP utilisant des em- preintes variables comme cela est représenté en figure 5 est que la réalisation d'une sur-écriture sur une valeur avec une nouvelle valeur ayant une longueur en bits plus grande devient onéreuse. Par exemple, pour mettre à jour la valeur U2 avec une valeur ayant une longueur en bits plus grande, les valeurs U3 et U4, et toutes les valeurs suivantes en mémoire, devront aussi être réécrites. [0072] La figure 6 illustre schématiquement un système de calcul à précision variable 600 selon un exemple de réalisation de la présente description. [0073] Le système 600 comprend par exemple une pluralité de pavés, deux pavés 602 et 602' étant représentés en figure 6, bien qu'ils puissent être beaucoup plus nombreux. Chaque pavé en figure 6 correspond à un module de traitement auquel on peut affecter des taches de calcul en relation avec un calcul complexe, qui peut par exemple impliquer l'utilisation d'un seul pavé, ou de deux ou plusieurs pavés fonctionnant en parallèle. [0074] Chaque pavé 602, 602' comprend par exemple un processeur principal (P) 603 et un coprocesseur à virgule flottante à précision variable (VP FP CO-PROC) 604, qui sont par exemple couplés entre eux. Le coprocesseur FP VP 604 comprend par exemple un bloc-notes (SCRATCHPAD) 606. Dans certains modes de réalisation le bloc-notes 606 est mis en oeuvre, par exemple, par 16, 32, 64 registres ou plus mémorisant chacun une valeur FP ayant une mantisse par exemple de jusqu'à 512 bits de longueur ou plus. Le bloc-notes 606 a par exemple des temps d'accès relativement rapides. Par exemple, 11 dans certains modes de réalisation, les accès mémoire au bloc-notes impliquent jusqu'à dix cycles d'horloge du coprocesseur 604. [0075] Dans certains modes de réalisation, chaque pavé 602, 602' comprend une unité à virgule flottante (FPU) 608 couplée au processeur principal 603 permettant par exemple des calculs en virgule flottante basés sur des valeurs FP standard respectant le format FP TEEE 754. Par exemple, dans certains modes de réalisation, le FPU 608 est utilisé pour des calculs qui ne nécessitent pas des niveaux de précision élevés, l'exécution de tels calculs étant relativement efficace en ce qui concerne l'énergie et la puissance lorsqu'ils sont réalisés par le FPU 608. [0076] Le processeur principal 603 de chaque pavé 602, 602' est par exemple couplé à un circuit de chargement et stockage (L&S) 610, qui charge des valeurs à partir d'une ou plusieurs mémoires caches (S) 612 et stocke des valeurs dans lesdites une ou plusieurs mémoires caches 612. Lesdites une ou plusieurs mémoires caches 612 correspondent par exemple à un cache de niveau Ll local à chaque pavé. En outre ou à la place, le cache 612 peut correspondre à une mémoire cache qui est partagée par une grappe de deux ou plusieurs pavés, comme un cache L2, un cache L3, et/ou un cache de niveau inférieur jusqu'au cache LLC (cache de dernier niveau), qui est le dernier cache avant de quitter la puce. [0077] Le coprocesseur FP VP 604 de chaque pavé est par exemple aussi couplé à un circuit de chargement et de stockage (L&S) 614, qui à son tour est couplé auxditcs une ou plusieurs mémoires caches 612. Le circuit 614 est aussi par exemple couplé à un registre système 616 mémorisant une valeur MBB indiquant un budget à frontière maximum ou un budget en nombre de multiplets, comme on va le décrire plus en détail ci-après. [0078] Bien qu'en figure 6, chaque pavé 602, 602' comprennent un processeur principal 603 et le processeur FP VP 604 mis en oeuvre sous forme d'un coprocesseur, dans des variantes de réalisation les fonctionnalités du processeur FP VP 604, comme les fonctionnalités des circuits 614 et 616, pourraient être mises en oeuvre sous forme d'un GPU (unité de traitement graphique), sous forme d'un GPGPU (calcul d'usage général mis en oeuvre par un GPU), à l'intérieur du FPU 608, à l'intérieur du processeur principal 603 et/ou à l'intérieur du circuit 610. En outre, les circuits 608 et 610 pourraient être mis en oeuvre dans le processeur principal 603. [0079] En outre, dans des variantes de réalisation, le circuit de chargement et stockage 614 et le registre 616 pourraient être mis en oeuvre dans le coprocesseur FP VP 604 par du matériel et/ou au moins partiellement émulés par du logiciel ou du micro-logiciel embarqué exécuté par le coprocesseur 604. En outre, dans certains modes de réalisation, le registre 616 pourrait être omis, et les valeurs MBB pourraient être fournies au circuit de chargement et de stockage 614 dans une instruction de stockage, générée 12 par exemple par le coprocesseur 604. Par exemple, l'instruction de stockage comprend, dans un champ dédié, un ou plusieurs bits indiquant la limite de taille MBB. En variante, la limite de taille pourrait être codée avec l'adresse de l'instruction de stockage. Par exemple, l'instruction de stockage indique une adresse virtuelle, et si l'adresse virtuelle tombe dans une première plage d'adresses, cela implique une première limite de taille, et si l'adresse virtuelle tombe dans une deuxième plage d'adresses, cela implique une deuxième limite de taille différente de la première limite de taille. [0080] La ou les mémoires caches 612 de chaque pavé 602, 602' sont par exemple couplées à une mémoire externe (EXTERNAL MEMORY (RAM)) 618, qui est par exemple mise en oeuvre par une mémoire à accès aléatoire (RAM) comme une matrice DRAM. Les accès mémoire à la mémoire externe 618 et au cache 612 sont par exemple relativement lents par rapport aux accès au bloc-notes 606, qui prennent par exemple jusqu'à 10 cycles d'horloge. Par exemple, les accès mémoire au cache 612 impliquent entre 20 et 100 cycles d'horloge, et les accès mémoire à la mémoire externe 618 impliquent plus de 100 cycles et jusqu'à 1000 cycles. [0081] En fonctionnement, le coprocesseur FP VP 604 est par exemple un processeur capable de réaliser des calculs en virgule flottante sur des valeurs de données à précision variable relativement grandes. Dans certains modes de réalisation, le coprocesseur 604 pourrait être un processeur UNUM qui fonctionne sur des valeurs dans le format UNUM directement. En variante, le coprocesseur 604 pourrait réaliser des opérations sur des valeurs FP VP dans d'autres formats. Le circuit de chargement et de stockage 614 est par exemple agencé pour convertir des résultats intermédiaires générés par le coprocesseur 604 en un format de mémoire borné (BMF) avant un stockage dans le cache 612 et/ou dans la mémoire externe 618. Par exemple, cette conversion implique une réduction, par un arrondi ou une troncature, des longueurs d'au moins certaines des valeurs VP mémorisées dans un ou plusieurs des registres du bloc-notes 604 à un nombre de bits indiqué par le budget MBB maximum mémorisé dans le registre 616. Si la valeur à convertir est un intervalle, elle est par exemple réduite en l'arrondissant, conformément au budget en multiplets maximum MBB, de telle sorte que l'intervalle réduit contienne la valeur d'entrée à convertir. [0082] La figure 7 représente un format de nombre en virgule flottante à précision variable ayant le format mémoire borné (BMF) selon un exemple de réalisation de la présente description. Par exemple, la longueur L de chaque valeur représentée dans ce format ne dépasse pas la limite définie par la valeur MBB. [0083] Le format BMF contient par exemple les mêmes champs que ceux du format UNUM représenté en figure 2. Cependant, les champs sont par exemple réordonnés afin d'avoir les champs descripteurs (utag, voir ci-après) au début ou proche du début de la 13 valeur FP VP lorsqu'elle est accédée dans une mémoire. Par exemple, en figure 7, un premier champ 701 mémorise le signe s, un deuxième champ 702 mémorise le uhit associé au nombre, un troisième champ 703 mémorise la taille de l'exposant es-1, un quatrième champ 704 mémorise la taille de la fraction ou mantisse fs-1, un cinquième champ 705 mémorise l'exposant c et un sixième champ 706 mémorise la fraction ou mantisse f. Les champs s, u, es-1 et fs-1 forment par exemple une portion utag du format mémoire borné. Ces champs fournissent des paramètres pour interpréter les champs d'exposant et de mantisse c et f. L'ordre des bits peut bien entendu être du LSB vers le MSB ou vice versa, afin de permettre une organisation mémoire petithoutiste ou gros-houtiste. En plus ou à la place, l'ordre des champs pourrait être modifié, par exemple inversé, afin de permettre une organisation mémoire petithoutiste ou gros-boutistc. [0084] La figure 7 correspond à un exemple de format mémoire borné pour une repré- sentation FP VP, mais il sera clair pour l'homme de l'art que des variantes seraient possibles. Par exemple, certains champs comme le champ uhit pourraient être omis, et des ordres différents seraient possibles. Plus généralement, le format mémoire borné comprend par exemple au moins les champs 705 et 706 contenant l'exposant et la mantisse, et au moins un champ de taille indiquant, directement ou indirectement, la taille de l'exposant et/ou de la mantisse. Par exemple, ledit au moins un champ de taille indique une longueur en bits absolue ou relative du champ d'exposant et/ou du champ de mantisse. Par exemple, dans le cas d'une longueur en bits relative, ledit au moins un champ de taille pourrait indiquer un rapport de nombre de bits entre le champ d'exposant et le champ de mantisse, ou un rapport de nombre de bits entre l'un ou l'autre, ou les deux, des champs d'exposant et de mantisse et la longueur en bits globale de la valeur FP VP, etc. [0085] Comme cela a été mentionné précédemment, ledit au moins un champ de taille peut par exemple représenter soit la longueur du champ d'exposant, la longueur du champ de mantisse, un rapport de nombre de bits entre les champs d'exposant et de mantisse, soit une longueur combinée des champs d'exposant et de mantisse ou du nombre FP complet. Ledit au moins un champ de taille est par exemple disposé avant les champs d'exposant et de mantisse de sorte que, pendant une opération de lecture, les informations de taille peuvent être utilisées pour déterminer le nombre de sous-portions ou d'adresses mémoire qui doivent être lues, comme on va l'expliquer maintenant plus en détail en faisant référence à la figure 8. En effet, dans certains modes de réalisation, les mots lus dans la mémoire externe 618 ou dans le cache 612 peuvent être de longueur variable afin d'optimiser l'opération de lecture. En outre ou à la place, dans certains modes de réalisation, des accès au cache, par exemple au cache Li, comprennent une interface d'activation de multiplets par laquelle des drapeaux peuvent 14 être activés afin de sélectionner la taille de lecture en fonction des multiplets qui doivent être récupérés dans la mémoire externe. [0086] La figure 8 représente des adresses mémoire d'une mémoire 800 mémorisant des nombres en virgule flottante dans laquelle chaque nombre est dans un format de mémoire borné comme le format de la figure 7. La figure 8 illustre des adresses @0 à @ 15 ayant des tailles de pas d'adresse de longueur p, où p est par exemple égal à 8 bits, mais pourrait plus généralement être égal à un entier positif quelconque. La valeur p correspond par exemple à la longueur en bits minimum qui peut être lue dans une seule opération de lecture. Chaque adresse correspond à une sous-portion, de p bits de longueur, d'un espace d'adresses alloué à chaque valeur FP VP. Cet espace d'adresses alloué de taille égale à au moins la taille définie par le MBB va être appelé dans la suite zone de stockage BMF. Dans l'exemple de la figure 8, le budget en multiplets maximum MBB correspond à 4 multiplets, ou 32 bits dans cet exemple. Toutefois, le budget en multiplets maximum pourrait être égal à un nombre entier de multiplets quelconque, ou pourrait être remplacé par un budget à frontière maximum défini comme un nombre entier des sous-portions p, où p pourrait être un nombre de bits entier positif quelconque. [0087] En effet, bien que dans l'exemple de la figure 8 le MBB corresponde à une puissance de 2, égale à 32 bits dans cet exemple, dans des variantes de réalisation le MBB pourrait correspondre à une valeur qui n'est pas une puissance de 2. Dans un tel cas, le circuit de chargement et de stockage 614 est par exemple capable de supporter des accès mémoire non alignés sur la base du MBB, en d'autres termes des accès mémoire qui accèdent à des groupes d'adresses qui ne sont pas alignés avec des mots d'une longueur en bits d'une puissance de 2 donnée, comme 32 bits, 64 bits, 128 bits, etc. [0088] Les valeurs au format de mémoire borné mémorisées sont appelées Ul, U2, etc., et chacune comprend par exemple un utag contenant les champs s, u, es-1 et fs-1 représentés par des portions en hachures légères, et des champs d'exposant et de mantisse représentés par des portions en hachures denses. La longueur de chaque valeur UNUM dans la mémoire est représentée par une flèche en trait interrompu. [0089] Les champs s, u, es-1 et fs-1 sont par exemple présents dans une ou plusieurs premières sous-portions de chaque zone de stockage BMF, en d'autres termes les une ou plusieurs adresses mémoire de la zone de stockage BMF qui vont être lues en premier, con-espondant par exemple aux adresses les plus basses dans l'exemple de la figure 8. De cette manière le circuit de chargement et de stockage 614 est par exemple capable de lire cette adresse et de déterminer à partir de l'information de taille la longueur en bits de la valeur FP VP, et ainsi est capable de lire seulement le nombre approprié d'adresses suivantes afin de lire la valeur FP VP entière. Cela permet de réduire la durée de l'opération de lecture, ce qui peut par exemple être particulièrement avantageux dans le cas où la longueur en bits définie par le MBB, et donc la taille de chaque zone de stockage BMF, est relativement grande, par exemple égale à 6 multiplets ou plus. [0090] Dans l'exemple de la figure 8, les valeurs U2 et U3 sont plus courtes que le hudget en multiplets maximum MBB, et ainsi chacune comprend un ou plusieurs bits vides à la fin de la zone de stockage BMF correspondante. En outre, les valeurs U2 et U3 occupent moins de trois multiplets, impliquant que pour chacune d'elles le quatrième multiplet de la zone de stockage BMF n'a pas besoin d'être lu. Les valeurs Ul et U4 utilisent par exemple la longueur complète du hudget en multiplets maximum MBB. Cela implique que chacune de ces valeurs a déjà une longueur égale au MBB, ou, plus préférablement, que sa longueur a été réduite au MBB pendant l'opération de stockage, en supposant que la longueur possible maximum de la valeur FP VP était supérieure à la longueur définie par le MBB. [0091] Le format de stockage en mémoire représenté en figure 8 peut par exemple être utilisé dans des modes standards de chargement et de stockage dans lesquels les adresses sont accédées une à la fois, ou dans des modes en salves dans lesquels des séquences programmées d'opérations d'accès sont réalisées. Par exemple, pendant le mode en salves, des accès mémoire non alignés sont par exemple réalisés. En particulier, un nombre B d'adresses de p bits sont par exemple accédées, où B*p est par exemple égal au nombre de bits défini par le MBB, ou un multiple de celui-ci. Ainsi, le nombre d'adresses accédées pourrait être un entier quelconque, y compris des entiers impairs ou des entiers non égaux à une puissance de deux. Par exemple, dans le cas où le MBB correspond à cinq adresses de p bits, le mode en salves pourrait impliquer le chargement et le stockage de cinq adresses à la fois, ou d'un multiple de cinq adresses. [0092] La figure 9 est un organigramme représentant des étapes dans un procédé de stockage d'un nombre en virgule flottante respectant un format de mémoire borné à une adresse mémoire d'une mémoire selon un exemple de réalisation de la présente description. Ce procédé est par exemple mis en oeuvre en partie par le coprocesseur FP VP 604 de la figure 6 et en partie par le circuit de chargement et de stockage 614 de chaque pavé 602, 602' de la figure 6. En outre ou à la place, ce procédé pourrait être mis en oeuvre au moins partiellement par du logiciel exécuté par le coprocesseur FP VP 604 ou par le processeur principal 603 de la figure 6. [0093] Dans une étape 901, une valeur de M bits est par exemple générée par le co- processeur FP VP 604. Cette valeur de M bits correspond par exemple à un résultat intermédiaire d'un algorithme de calcul exécuté par le processeur 604, comme la valeur xicK+n dans l'algorithme de la figure 4. Dans certains cas, la valeur de M bits est mémorisée dans le bloc-notes 606, bien qu'elle puisse en variante être générée puis fournie directement au circuit de chargement et de stockage 614, si par exemple elle 16 correspond au résultat d'un certain type d'opérations comme une opération d'addition et de stockage. [0094] Dans une étape 902, le circuit de chargement et de stockage 614 convertit par exemple la valeur de M bits provenant du bloc-notes 606 dans le format FP VP utilisé par le format de mémoire borné, si ce n'est pas déjà le cas. Par exemple, dans le mode de réalisation de la figure 6, le coprocesseur 604 ou le processeur principal 603 peuvent être un processeur UNUM agencé pour traiter des valeurs en virgule flottante dans le format UNUM, et cette conversion implique simplement de réordonner les champs des valeurs UNUM. Dans des variantes de réalisation, on pourrait utiliser d'autres types de processeurs agencés pour traiter des valeurs en virgule flottante à précision variable dans d'autres formats, auquel cas la conversion de l'opération 902 est par exemple utilisée pour convertir le format en celui de la figure 7. Dans certains modes de réalisation, cette conversion est réalisée sans limitation à la longueur en bits, et l'opération suivante est une opération 903. En variante, cette conversion peut être réalisée tout en limitant directement la longueur en bits à une valeur égale ou inférieure à la longueur en bits maximum définie par le MBB. Par exemple, dans le cas où le MBB définit un budget en multiplets maximum, la longueur en bits maximum est égale à 8*MBB. Plus généralement, la longueur en bits maximum est par exemple égale à p*MBB. Dans un tel cas, comme cela est représenté par une flèche en trait interrompu en figure 9, l'étape suivante est une étape 904, dans laquelle la valeur est mémorisée directement dans le cache ou dans une mémoire externe. [0095] Dans l'étape 903, on détermine si la taille de la valeur dans le format FP VP est su- périeure à la longueur en bits maximum définie par le MBB. Si ce n'est pas le cas, la valeur peut être mémorisée dans le cache ou une mémoire externe dans l'étape 904. Si la taille est supérieure à la longueur en bits maximum, la taille est par exemple réduite dans une étape 905, soit en arrondissant la mantisse, soit en tronquant la mantisse, en d'autres termes simplement en retirant un certain nombre des bits les moins significatifs. Par exemple, si la valeur FP VP définit un intervalle, l'étape 905 implique une réduction de la précision des points d'extrémité, conduisant à un agrandissement de la définition de l'intervalle. Si la valeur FP VP définit une valeur scalaire, la précision de sortie est par exemple réduite pour s'adapter à la longueur en bits définie par le MBB, pendant la troncature ou l'arrondi, par exemple, à la valeur la plus proche qui peut être représentée en utilisant le nombre de bits réduit. N'importe quel mode des nombreux modes d'arrondi possibles pourrait être utilisé, les nombreux modes d'arrondi possibles étant connus de l'homme de l'art. Dans tous les cas ledit au moins un champ de taille de la valeur FP VP est aussi par exemple modifié en conséquence compte tenu de la longueur réduite de la mantisse. [0096] Après l'étape 905, la valeur FP VP de taille réduite est mémorisée dans le cache ou 17 dans une RAM dans une étape 906. [0097] La mémorisation de la valeur FP VP dans le cache ou dans la mémoire externe dans les étapes 904 et 906 implique par exemple la mémorisation dudit au moins un champ de taille 703, 704 dans une ou plusieurs premières adresses de la zone de mémorisation BMF, de sorte que cette valeur puisse être lue en premier pendant une opération de lecture suivante. [0098] Dans certains modes de réalisation, si au moment de la réduction de la longueur en bits dans les étapes 902 ou 905, on détermine qu'il n'y a pas assez de bits pour représenter la totalité du champ d'exposant, on pourrait générer un message d'erreur, un drapeau d'avertissement, un déclencheur ou une interruption pour informer un utilisateur que le MBB est insuffisant et devrait être augmenté. [0099] La figure 10 est un organigramme représentant des étapes dans un procédé de lecture d'un nombre FP VP respectant un format de mémoire borné, à partir d'une adresse mémoire d'une mémoire selon un exemple de réalisation de la présente description. Ce procédé est par exemple mis en oeuvre par le circuit de chargement et de stockage 614 de chaque pavé 602, 602' de la figure 6. En variante, ce procédé pourrait être mis en oeuvre au moins partiellement par du logiciel exécuté par le coprocesseur FP VP 604 ou le processeur principal 603 de la figure 6. [0100] Dans une étape 1001, une ou plusieurs premières sous-portions de la valeur FP VP sont lues. Par exemple, la première adresse de la valeur FP VP peut être déterminée sur la base du MBB, ou elle est fournie directement dans l'instruction de chargement, ou calculée par le coeur principal 603 ou par le coprocesseur 604. Cette adresse, et une ou plusieurs sous-portions ou adresses suivantes mémorisant ledit au moins un champ de taille, sont lues. Dans certains modes de réalisation, lesdites une ou plusieurs premières sous-portions contiennent le champ de taille d'exposant es-1 et le champ de taille de mantisse fs-1, et dans certains modes de réalisation le utag complet contenant en plus le bit de signe et le ubit. Bien sûr, il sera clair pour l'homme de l'art que les multiples sous-portions ou adresses peuvent être lues en parallèle, comme une opération de chargement de 64 bits, impliquant le chargement de 8 multiplets correspondant par exemple à 8 sous-portions. [0101] Dans une étape 1002, la présence d'une ou plusieurs autres sous-portions non vides de la valeur FP VP est identifiée sur la base des données lues dans lesdites une ou plusieurs premières sous-portions. Par exemple cela peut être déterminé sur la base d'au moins la taille de l'exposant et/ou de la mantisse. [0102] Dans une étape 1003, on détermine s'il y a au moins une autre sous-portion non vide de la valeur FP VP à lire. En effet, dans certains cas, on peut déterminer dans l'étape 1002 que la totalité des sous-portions restantes de la zone de mémorisation BMF sont vides, et ainsi aucune autre opération de lecture ne doit être réalisée. 18 [0103] S'il y a au moins une sous-portion non vide à lire, une sous-portion suivante de la valeur FP VP est par exemple lue dans une étape 1004, puis l'étape 1003 est répétée. Quand il n'y a plus d'autres sous-portions non vides de la zone de stockage BMF à lire, le procédé se termine à une étape 1005. [0104] La figure 11 représente un exemple du format de mémoire borné dans le cas où le budget en multiplets maximum de la mémoire est réglé à une valeur égale ou supérieure à la plus grande valeur FP VP à stocker dans la mémoire. L'axe horizontal en figure 11 représente la longueur en bits de la valeur FP VP stockée en mémoire. À titre d'exemple, la taille d'exposant maximum es max pourrait être de 16 bits, et la taille de mantisse maximum fs_max pourrait être de 32 bits, et en supposant une taille css de 4 bits pour le champ de taille d'exposant es-1 et une taille fss de 5 bits pour le champ de taille de mantisse fs-1, un seul bit de signe s et un seul ubit, la valeur FP VP la plus grande serait de 59 bits. Ainsi en réglant le MBB à 64 bits ou 8 multiplets, toutes les valeurs en virgule flottante pourraient être écrites à une adresse mémoire correspondante sans réduire leur longueur en bits, et même pour la taille de valeur en virgule flottante la plus grande, il y aura 5 bits inutilisés (UNUSED BITS). Plus généralement, dans le cas où le MBB est égal ou supérieur au nombre en virgule flottante le plus grand, le nombre de bits le plus grand qu'une valeur en virgule flottante selon le format de nombre borné pourrait prendre est par exemple 2-Fess+fss-F2ess+2fs'. [0105] Une rangée inférieure 1101 de la figure 11 représente un cas général dans lequel : le bit de signe s est mis à un sur la base du signe de la valeur en virgule flottante ; le ubit n'est pas mis à un si le nombre est exact, ou mis à un si le nombre codé est un intervalle de la taille d'un ULP ; les champs de taille d'exposant et de mantisse es-1, fs-1 indiquent respectivement les tailles de l'exposant et de la mantisse, ces champs ayant par exemple des longueurs fixes de ess et fss respectivement, le champ d'exposant a une taille comprise entre 1 bit et es_max, et la mantisse a une taille comprise entre 1 bit et fs_max. Par exemple, les tailles minimum de l'exposant et de la mantisse étant chacune de un bit, le champ de taille d'exposant par exemple indique la taille de l'exposant moins un (es-1), et le champ de taille de mantisse indique par exemple la taille de la mantisse moins un (fs-1). [0106] Les autres rangées en figure 11 traitent des cas spécifiques de valeurs SP spéciales comme des non-nombres qui sont par exemple supportés par le format de mémoire borné. [0107] Les rangées 1102 et 1103 représentent respectivement des valeurs qNaN (de l'anglais "quiet Nota Number") et sNaN (de l'anglais "signaling Nota Number"). La valeur qNaN est par exemple une valeur au-delà de l'infini positif et la valeur sNaN est par exemple une valeur au-delà de l'infini négatif, aucune des deux n'ayant une signification mathématique. La valeur qNaN est par exemple codée par un bit de signe de 0, 19 un ubit de 1, et en remplissant tous les autres champs avec des uns. La valeur sNaN est codée de la même manière que la valeur qNaN, mais avec le hit de signe à 1. [0108] Les rangées 1104 et 1105 représentent respectivement des valeurs d'infini positif et d'infini négatif. L'infini positif est par exemple codé par le fait que le hit de signe et le uhit sont mis à zéro, et que les autres champs sont remplis avec des uns. L'infini négatif est par exemple codé de la même façon que l'infini positif, mais avec le hit de signe à 1. [0109] Les rangées 1106 et 1107 représentent respectivement des valeurs de presque l'infini positif et presque l'infini négatif, correspondant à des valeurs qui sont trop grosses pour être représentées mais qui ne sont pas à l'infini positif ou négatif. Dans le cas où les valeurs représentées sont des intervalles, le mot "RIGHT" dans la rangée 1106 indique que l'intervalle codé ne comprend pas l'infini positif, et le mot "LEFT" dans la rangée 1107 indique que l'intervalle codé ne comprend pas l'infini négatif. Par exemple, une valeur de presque l'infini positif est codée en menant le hit de signe à zéro, le uhit à 1, et en remplissant les autres champs avec des uns, excepté le hit final de la mantisse, qui est par exemple à zéro. Une valeur de presque l'infini négatif est par exemple codée de la même façon que presque l'infini positif, mais avec le hit de signe mis à un. [0110] Les rangées 1108 et 1109 représentent des variantes de codage pour presque l'infini positif et presque l'infini négatif, qui permettent par exemple une réduction de l'espace de stockage. En effet, dans les rangées 1108 est 1109, les champs de signe et de ubit sont par exemple les mêmes que pour les rangées 1106 et 1107 respectivement, mais chacun des champs es-1 et fs-1 est par exemple mis à une valeur inférieure à la taille maximum qui peut être définie par ces champs, en d'autres termes chacun d'eux inclut au moins un bit à zéro, et les champs d'exposant et de mantisse sont par exemple entièrement remplis de uns. [0111] Les flèches horizontales 1110 en figure 11 (et de manière similaire dans les figures 12 à 14) indiquent que les longueurs des champs d'exposant des rangées 1108, 1109 et 1101 peuvent varier sur la base des informations se trouvant dans le champ de taille d'exposant es-1. De manière similaire, les flèches horizontales 1112 en figure 11 (et de manière similaire dans les figures 12 à 14) indiquent que les longueurs des champs de mantisse des rangées 1108, 1109 et 1101 peuvent varier sur la base des informations se trouvant dans le champ de taille de mantisse fs-1. [0112] La figure 12 représente des exemples de formats d'une pluralité de types de nombres FP respectant un format de mémoire borné selon un autre exemple de réalisation de la présente description dans lequel le MBB est mis à une valeur inférieure à la longueur d'au moins l'une des valeurs en virgule flottante à stocker en mémoire. [0113] Une rangée 1201 en figure 12 con-espond à un cas dans lequel la valeur FP VP mémoriser a une longueur en bits égale ou inférieure à la longueur en bits maximum définie par le MBB. Dans un tel cas, il peut y avoir un ou plusieurs bits non utilisés (UNUSED BITS) dans la zone de mémorisation BMF. [0114] Une rangée 1202 en figure 12 correspond à un cas dans lequel la valeur FP VP à mémoriser a une longueur en bits supérieure à la longueur en bits maximum définie par le MBB, mais la longueur combinée des champs s, u, es-1, fs-1 et c est inférieure d'au moins 1 bit à la longueur en bits maximum définie par le MBB. En d'autres termes, après avoir été réduite au MBB, la valeur FP VP a encore un champ de mantisse d'au moins un bit. Dans ce cas, la valeur FP VP est réduite à partir de sa longueur en bits d'origine à la longueur en bits définie par le MBB, par exemple par un arrondi ou une troncature de la mantisse. [0115] Une rangée 1203 en figure 12 correspond à un cas dans lequel les champs s, u, es-1, fs-1 et c de la valeur FP VP à mémoriser ont une longueur en bits combinée supérieure à la longueur en bits maximum définie par le MBB, mais la longueur combinée des champs s, u, es-1, fs-1 est inférieure d'au moins un bit à la longueur en bits maximum définie par le MBB. En d'autres termes, après avoir été réduite au MBB, la valeur FP VP a encore un champ d'exposant d'au moins un bit. Dans ce cas, la valeur FP VP est réduite à partir de sa longueur en bits d'origine à la longueur en bits définie par le MBB en réduisant son champ de mantisse à un seul bit, et en tronquant le champ d'exposant. Puisqu'il n'y a pas assez de bits pour exprimer l'exposant, la valeur du nombre est par exemple saturée à presque l'infini positif ou négatif, selon le signe de la valeur. [0116] Une rangée 1204 correspond à un cas dans lequel les tailles ess et fss des champs de taille d'exposant et de mantisse es-1, fs-1 de la valeur FP VP sont relativement grandes, mais lorsqu'ils sont arrondis ou tronqués au MBB, les champs d'exposant et de mantisse comprennent encore chacun au moins un bit. [0117] Une rangée 1205 en figure 12 correspond à un cas dans lequel les tailles ess et fss des champs de taille d'exposant et de mantisse es-1, fs-1 de la valeur FP VP sont si grands, ou la longueur en bits maximum définie par le MBB est si petite, que la longueur en bits combinée des champs s, u, es-1 et fs-1 est supérieure à la longueur en bits définie par le MBB. Dans un tel cas, la forme tronquée de la valeur FP VP va être sans signification et va être considérée comme une erreur de codage. [0118] Les rangées 1206. 1207, 1208 et 1209 en figure 12 correspondent aux valeurs FP VP des rangées 1102, 1103, 1104 et 1105 de la figure 11 respectivement, mais pour lesquelles la longueur combinée des champs s, u, es-1, fs-1 et e est inférieure d'au moins un bit à la longueur en bits définie par le MBB. Ces valeurs ne respectent plus le codage défini en figure 11, et provoquent par exemple un message d'erreur, ou la levée d'un drapeau d'erreur ou d'avertissement, d'un déclencheur ou d'une interruption, ou 21 tout autre moyen pour avertir un utilisateur d'une erreur. [0119] Dans certains modes de réalisation, par exemple en réponse à un message d'erreur, un drapeau ou une interruption, le MBB peut être augmenté afin d'éviter au moins les cas des rangées 1203 et 1205 à 1209 dc la figure 12. Cependant, pour les cas des rangées 1206 à 1209, le codage utilise les longueurs maximum des champs es-1, fs-1, c et f, et ainsi ces valeurs ne peuvent pas être tronquées du tout sans créer des représentations non valides. [0120] On va maintenant décrire une variante de codage permettant de coder ces valeurs en utilisant une longueur en bits inférieure à la longueur maximum en faisant référence à la figure 13. En effet, dans certains modes de réalisation décrits en relation avec la figure 13, on notera que, lorsque la longueur en bits possible la plus haute d'une valeur FP VP est supérieure à la longueur en bits définie par le MBB, tout nombre de la sorte ne peut pas avoir à la fois ses champs de taille d'exposant et de mantisse es-1, fs-1 à leurs valeurs maximum. Cela permet à cette valeur maximum d'être utilisée pour coder des types de valeurs SP spéciales. [0121] La figure 13 représente des exemples de formats d'une pluralité de types de nombres FP respectant un format de mémoire borné selon un exemple de réalisation de la présente description. [0122] Les rangées 1301 à 1309 de la figure 13 correspondent respectivement aux cas des rangées 1101 à 1109 dc la figure 11, et ne seront pas décrits de nouveau en détail. On supposera pour ces cas en figure 13 que les champs es-1 et fs-1 ont des tailles ess' et fss' respectivement. [0123] Les rangées 1310 à 1316 en figure 13 correspondent à des cas dans lesquels les champs es-1 et fs-1 ont des tailles ess" et fss" respectivement, qui sont plus grandes que les tailles ess' et fss', et dans lesquels la taille maximum d'une valeur FP VP mémoriser en mémoire est supérieure au nombre maximum de bits défini par le MBB. Cependant, le MBB est par exemple choisi de telle sorte que, après un arrondi ou une troncature, les champs d'exposant et de mantisse comprennent chacun au moins un bit. [0124] Les rangées 1310, 1311, 1312 et 1313 codent les mêmes valeurs que les rangées 1302, 1303, 1304 et 1305 respectivement, en utilisant un codage similaire excepté que les valeurs sont par exemple codées en utilisant seulement le utag, c'est-à-dire les champs s, u, es-1 et fs-1. De cette manière, il n'est pas nécessaire de mémoriser ou de charger des sous-portions de la zone de mémorisation BMF après le utag pour ces types de FP VP spécifiques. [0125] Les rangées 1314, 1315 et 1316 codent les mêmes valeurs que les rangées 1308, 1309 et 1301 respectivement, excepté que dans le cas d'une valeur FP VP ayant une longueur en bits supérieure ou égale à la longueur en bits indiquée par le MBB, il n'y a par exemple aucun bit non utilisé dans l'adresse mémoire. On notera que les formats des nombres dans les rangées 1314 et 1315 diffèrent de ceux des rangées 1302 et 1303 respectivement en ce que, dans le cas des rangées 1314 et 1315, les tailles css", fss" sont telles que la longueur en bits la plus élevée possible de la valeur FP VP est supérieure à la longueur en bits maximum définie par le MBB. [0126] La figure 14 représente des exemples de formats d'une pluralité de types de nombres FP respectant un format de mémoire borné selon une variante de réalisation par rapport à la figure 13. [0127] Les rangées 1401 à 1409 et 1416 à 1418 sont les mêmes que les rangées 1301 à 1309 et 1314 à 1316 de la figure 13, et ces rangées ne seront pas décrites de nouveau en détail. Les quatre rangées 1410 à 1413 codent les mêmes types FP VP que les rangées 1310 à 1313 de la figure 13, mais plutôt que de n'avoir aucun champ d'exposant et de mantisse, ces valeurs sont codées en utilisant un seul champ qui est rempli de uns. En outre, les rangées 1414 et 1415 montrent des variantes de la manière de coder les types FP VP des rangées 1406 et 1407 en utilisant, à la place des champs d'exposant et de mantisse, un seul champ rempli de uns, excepté le bit final, qui est à zéro. [0128] Un avantage des modes de réalisation décrits ici est que des valeurs FP VP peuvent être mémorisées dans une mémoire de telle façon que des accès mémoire affins soient possibles, en d'autres termes que les adresses mémoire puissent être accédées en lecture ou en écriture dans n'importe quel ordre. En outre, la précision peut être modifiée dynamiquement en changeant la longueur en bits maximum d'un nombre définie par le MBB. [0129] En outre, on peut réaliser des opérations de lecture relativement rapides en adaptant l'opération de lecture en fonction d'un ou plusieurs champs de taille de la valeur FP VP à lire. En particulier, cela permet d'éviter de lire une ou plusieurs sous-portions vides de la mémoire. [0130] Divers modes de réalisation et diverses variantes ont été décrits. L'homme de l'art re- marquera que certains éléments de ces modes de réalisation peuvent être combinés et d'autres variantes apparaîtront facilement à l'homme de l'art. Par exemple, il apparaîtra clairement à l'homme de l'art que les formats FP VP donnés dans les figures 11 à 14 ne sont que quelques exemples, et qu'un ensemble de formats reconnus pour chaque type de FP VP pourrait comprendre toutes sortes de combinaisons des exemples fournis dans ces figures. [0131] En outre, il apparaîtra clairement à l'homme de l'art que dans des variantes de réa- lisation, le format de mémoire borné décrit ici pourrait omettre le ubit. Dans un tel schéma, les points d'extrémité des intervalles sont par exemple considérés comme toujours inclus (exact), et des valeurs FP spéciales sont par exemple codées en utilisant des codages de bits dédiés. [0132] En outre, alors qu'on a décrit des exemples de réduction des longueurs en bits des 23 valeurs FP VP basés sur un arrondi, il apparaîtra clairement à l'homme de l'art qu'il existe de nombreuses techniques d'arrondi connues spécifiques qui pourraient s'appliquer. Mises en oeuvre logicielles [0133] L'opération de stockage en mémoire décrite précédemment en relation avec la figure 9 sur la base du format de la figure 13 peut être mise en oeuvre en utilisant le code suivant, qui est en pseudo code : [0134] [Math.4] Algorithm 2 13.M1 store funetion IrafFel: UE, 111D B. /412,11;12n1t111i 2: L, tag Width ,-- GU:1i 17)GWIDTH(LiE) lie Itag t:Mare ka:trajet 3: «ft ';'d th et the exponett Me:wey footatint 1: if MAK USW 1'1 noie fui] q(Vaa1 case mEssmeltdst,U) tilEtiaeliarted e-- _rat d t. 'tare ma letmilt Mec (2: case 133SIVeSACTIN11 /1/2110L-1,,f/ht) 211:71111714,1111,1,1i 11C.E. e Va A' 2:3: case reQNAN111,: ME3-Y10,-i(11111: 1 the utag footFeint expenent hetivint tt gel- the. fraction metor:: ['col !Mu! UNITIM niait d st 'rit fit ii the (7u1)elli MRS th, expirent t> leact the frac: Ln: check lorsitei dctit case EsQN;`.».. cia. case ut }I, ,ç tuTI s eine, fj -tsc. J. case }SNE Ar"/ INF( rt if ftr.to tioh case eft,r.:S +- EXTRA (1Tir i1)1. é»; Céféfé,'r, f LA-Uné-MA) else liNUM P.MX SiZe c'en Hot fit in the current MBB switch Htscj do Nule k les clea eti,g case tstiNtN(itiag case EsQN ; X cao) ti ts- NeiV case ishittstctlititdatd CâSf) EY.F. ( 27.31incif /-,:q :Ph j. e LDIT / °dit, e*: '11-14l/, 7," thd/ki, Ervilhi ,witeb a .r; _r igh I! do case cd,;Ex 'cc g, c. i^f_r irAIt case ' r L E.X.T17 F U NUM I sites, return [Cl losii dire espace'', r. icsel the nactilee is check lands! date [Revendication 1] [Revendication 2] [Revendication 3] [Revendication 4] [Revendication 5] [Revendication 6] REVENDICATIONSProcédé de mémorisation, par un circuit de chargement et de stockage (614) ou par d'autres moyens de traitement (604), d'une valeur en virgule flottante à précision variable à une adresse mémoire d'une mémoire (612, 618), le procédé comprenant : - réduire la longueur en bits de la valeur en virgule flottante à précision variable à pas plus qu'une limite de taille (MBB) ; et - mémoriser la valeur en virgule flottante à précision variable dans l'une d'une pluralité de zones de stockage dans la mémoire, chacune de la pluralité de zones de stockage comportant un espace de stockage égal ou supérieur à la limite de taille (MBB). Procédé selon la revendication 1, dans lequel la réduction de la longueur en bits de la valeur en virgule flottante à précision variable comprend soit : déterminer, en comparant une longueur en bits de la valeur en virgule flottante à précision variable à la limite de taille (MBB), que la longueur en bits de la valeur en virgule flottante à précision variable dépasse la limite de taille (MBB), puis arrondir ou tronquer la valeur en virgule flottante à précision variable ; soit convertir la valeur en virgule flottante à précision variable d'un premier format en un deuxième format (BMF), dans le deuxième format la longueur en bits étant limitée à pas plus que la limite de taille (MBB). Procédé selon la revendication 1 ou 2, dans lequel la limite de taille (MBB) est mémorisée dans un registre (616) accessible par le circuit de chargement et de stockage (614) ou autres moyens de traitement (604), la limite de taille (MBB) étant programmable. Procédé selon la revendication 1 ou 2, comprenant en outre, avant de réduire la longueur en bits, la réception par le circuit de chargement et de stockage (614) ou autres moyens de traitement (604) d'une instruction de chargement comprenant un ou plusieurs bits indiquant la limite de taille (MBB). Procédé selon l'une quelconque des revendications 1 ou 4, dans lequel la limite de taille (MBB) est égale à un multiple de p bits, où p est un entier positif, la limite de taille n'étant pas égale à une puissance de 2. Procédé selon l'une quelconque des revendications 1 à 5, comprenant l'étape consistant à comparer la longueur en bits de la valeur en virgule flottante à précision variable à la limite de taille (MBB), et avant la 26 [Revendication 7] [Revendication 8] [Revendication 9] [Revendication 10] [Revendication 11] [Revendication 12] comparaison, convertir la valeur en virgule flottante à précision variable d'un troisième format de virgule flottante à précision variable en le deuxième format de virgule flottante à précision variable (BMF). Procédé selon l'une quelconque des revendications 1 à 6, dans lequel la valeur en virgule flottante à précision variable comprend un champ d'exposant (705), un champ de mantisse (706) et au moins un champ de taille (703, 704) indiquant une longueur en bits absolue ou relative du champ d'exposant et/ou du champ de mantisse. Procédé selon la revendication 7, dans lequel la réduction de la longueur en bits de la valeur en virgule flottante à précision variable à pas plus que la limite de taille (MBB) comprend une modification dudit au moins un champ de taille (703, 704) compte tenu de la longueur en bits réduite de la valeur en virgule flottante à précision variable. Procédé selon la revendication 7 ou 8, dans lequel ledit au moins un champ de taille comprend un champ de taille d'exposant (703) et un champ de taille de mantisse (704). Procédé selon l'une quelconque des revendications 7 à 9, dans lequel si une longueur en bits (css", fss") dudit au moins un champ de taille est capable d'indiquer une longueur en bits du champ d'exposant et/ou du champ de mantisse qui dépasserait la limite de taille (MBB), l'étape de réduction de la longueur en bits comprend de mettre ledit au moins un champ de taille à une valeur maximum pour coder au moins un type de valeur FP spéciale. Procédé selon l'une quelconque des revendications 7 à 10, dans lequel chaque zone de stockage comprend une pluralité de sous-portions, dans lequel la mémorisation de la valeur en virgule flottante à précision variable comprend la mémorisation dudit au moins un champ de taille (703, 704) de la valeur en virgule flottante à précision variable dans une ou plusieurs premières sous-portions de la zone de stockage. Procédé de lecture à une adresse mémoire dans une mémoire (612, 618), d'une valeur en virgule flottante à précision variable mémorisée selon le procédé de la revendication 11, comprenant : - lire lesdites une ou plusieurs premières sous-portions ; - identifier, sur la base dudit au moins un champ de taille (703, 704), une ou plusieurs autres sous-portions non vides de la zone de stockage ; et - lire lesdites une ou plusieurs autres sous-portions non vides de la zone de stockage. 27 [Revendication 13] [Revendication 14] [Revendication 15] [Revendication 16] [Revendication 17] Procédé selon la revendication 12, dans lequel l'identification desdites une ou plusieurs autres sous-portions non vides comprend en outre l'identification d'au moins une autre sous-portions vide de la zone de stockage, ladite au moins une autre sous-portions vide n'étant pas lue. Procédé de lecture, à une adresse mémoire dans une mémoire (612, 618), d'une ou plusieurs valeurs en virgule flottante à précision variable mémorisées scion le procédé de la revendication 11, comprenant : - lire des valeurs de bits dans lesdites une ou plusieurs zones de stockage de la mémoire ; et - extraire, des valeurs de bits lues, une ou plusieurs valeurs en virgule flottante à précision variable identifiées sur la hase dudit au moins un champ de taille (703, 704) de chaque valeur. Procédé de résolution d'un problème scientifique en utilisant au moins un processeur à virgule flottante à précision variable (604), le procédé comprenant : - générer au moins un résultat intermédiaire représenté par une valeur en virgule flottante à précision variable de M bits ; et - mémoriser la valeur en virgule flottante à précision variable de M bits dans une mémoire (612, 618) selon le procédé de l'une quelconque des revendications 1 à 11. Système de calcul comprenant un processeur à virgule flottante à précision variable (FP VP) (604) agencé pour générer des valeurs en virgule flottante à précision variable, le processeur FP VP (604), et/ou un circuit de chargement et de stockage (614) couplé au processeur FP VP (604), étant agencés pour mémoriser une valeur en virgule flottante à précision variable dans une mémoire (612, 618) : - en réduisant la longueur en bits de la valeur en virgule flottante à précision variable à pas plus qu'une limite de taille (MBB) ; et - en mémorisant la valeur en virgule flottante à précision variable dans l'une d'une pluralité de zones de stockage dans la mémoire, chacune de la pluralité de zones de stockage ayant un espace de stockage égal ou supérieur à la limite de taille (MBB). Système de calcul selon la revendication 16, dans lequel le processeur FP VP (604), et/ou le circuit de chargement et de stockage (614) couplé au processeur FP VP (604), sont agencés pour réduire la longueur en bits de la valeur en virgule flottante à précision variable soit : en déterminant, en comparant une longueur en bits de la valeur en virgule flottante à précision variable à la limite de taille (MBB), que la 28 [Revendication 18] [Revendication 19] [Revendication 20] longueur en bits de la valeur en virgule flottante à précision variable dépasse la limite de taille (MBB), puis en arrondissant ou en tronquant la valeur en virgule flottante à précision variable ; soit en convertissant la valeur en virgule flottante à précision variable d'un premier format en un deuxième format (BMF), dans le deuxième format la longueur en bits étant limitée à pas plus que la limite de taille (MBB). Système de calcul selon la revendication 16 ou 17, comprenant en outre un registre (616) mémorisant une indication de la limite de taille (MBB), le registre étant accessible et programmable par le processeur à virgule flottante à précision variable (604) et/ou par le circuit de chargement et de stockage (614). Système de calcul selon la revendication 16 ou 17, dans lequel le processeur FP VP (604), et/ou un circuit de chargement et de stockage (614) couplé au processeur FP VP (604), sont agencés pour mémoriser la valeur en virgule flottante à précision variable dans la mémoire sur la hase d'une instruction de stockage, l'instruction de stockage comprenant un ou plusieurs bits indiquant la limite de taille (MBB). Système de calcul selon l'une quelconque des revendications 16 à 19, dans lequel le processeur FP VP (604) est mis en oeuvre : - comme partie d'une unité de traitement graphique ; ou - comme partie d'une unité à virgule flottante (608) ; ou - comme partie d'un dispositif de traitement principal (603) couplé à une unité à virgule flottante (608).