Algorithme matériel pour le calcul de la multiplication à précision variable sur circuit FPGA N.Anane, H.Bessalah, M.Anane, M.Issad et K.Messaoudi (1) Centre de Développement des Technologies Avancées CDTA Haouch Oukil, BP.17, Baba Hassen, Alger.4 Résumé Un algorithme matériel pour le calcul de la multiplication à précision variable est présenté dans cet article. La méthode de calcul est basée sur l utilisation d un multiplieur parallèle de taille m, pour le calcul de la multiplication de deux nombres de taille n m. Les deux opérandes à multiplier sont représentés en virgule flottante à précision variable, néanmoins dans cet article seulement la mantisse est prise en charge, l exposant est facilement obtenu par addition des exposants des opérandes. Dans cette méthode de calcul de la multiplication, les produits partiels sont cumulés au fur et à mesure qu ils sont calculés, ce qui résulte en l utilisation d une mémoire, pour le stockage des résultats intermédiaires, la plus faible que possible (c.à.d. la taille du résultat est de 2n m). Les circuits FPGA de Xilinx des familles virtex-2 et plus disposent de ressources très intéressantes (telle que les multiplieurs 18 18 bits, les blocs mémoires (SelectRam) et de chemins de retenue (carry chain) pour l accélération de l addition. Ces ressources ont été utilisées, dans l implémentation, avantageusement pour réduire le temps de calcul comparé à une solution qui utilise seulement les CLBs du FPGA. Notre architecture a été taillée sur-mesure pour utiliser ces ressources performantes. L architecture résultante est dédiée au calcul de la multiplication d opérandes de tailles allant de 1 64 bits à 64 64 bits avec un délai de n 2 33 ns. Index Terms Multiplication multi précision, Norme IEEE-754, Multiplication de Karatsuba, Architecture matérielle, Virtex-2 FPGA. II. INTRODUCTION urrant cette dernière décade la vitesse de calcul des Dordinateurs a connu une augmentation spectaculaire. Ceci a été grâce au développement des technologies VLSI qui a permis l'intégration de millions voir de milliards de transistors sur la même puce. Cette quantité importante de transistors a rendu possible le parallélisme et le pipelining d'opérations au niveau matériel pour atteindre les performances actuelles en termes de vitesse de calcul. Néanmoins, les normes qui régissent la précision de ces calculs ne se sont pas développées depuis 1985, date d'apparition de la norme IEEE-754 [1] qui régit le calcul en virgule flottante. La puissance de calcul offerte par les processeurs actuels a fait émerger des applications gourmandes en opérations arithmétiques, cependant un des obstacles majeurs des capacités de calcul actuelles réside dans le manque de certitude sur la fiabilité des résultats, dû à l'accumulation des erreurs d'arrondis et des erreurs d'élimination catastrophique. Dans certaines applications, ces erreurs peuvent avoir des conséquences dramatiques : tel que le cas des logiciels utilisés dans les moyens de transport (avion, train etc.) par les équipes médicales dans le domaine de la radiothérapie (administration des radiations pour les malades cancéreux) ou dans l armée (systèmes de défense etc.). Ceux-ci font partie de la liste, toujours plus longue des applications critiques pour la vie ou la sécurité. Une erreur dans ces applications peut être très coûteuse, comme en témoigne la destruction de la fusée Ariane 5 lors de son premier vol en 1996 [2] ou peut coûter des vies humaines comme le prouve la défaillance de l antimissile Patriote lors de la première guerre du golf en 1991 [3] ou bien l administration d overdose de radiation tel le cas de l institut national oncologique à Panama en 2000 [4]. Ces erreurs sont dues, en grande partie, à la nature discrète de la représentation des nombres en virgule flottante dans la norme IEEE-754, où ces nombres sont représentés sur un nombre fini de bits. Le calcul en précision variable «ou multi précision» [5] permet de varier la précision des calculs selon le problème à résoudre et la précision requise par le résultat. Pour surpasser les limitations numériques des processeurs actuels, plusieurs langages de programmation et de bibliothèques logicielles dédiées [6] ainsi que des coprocesseurs [7] ont été développés pour le calcul en précision variable. Ce type de calcul s'avère très utile dès lors que l'on a des problèmes à résoudre qui ne sont pas très stables numériquement ou dés qu'une grande précision de calcul est requise (c'est-à-dire plus grande que celle disponible sur ordinateur). Néanmoins, ces solutions logicielles s'avèrent lentes et ne répondent pas aux exigences d'une certaine classe d'applications qui nécessitent, en plus de la précision des calculs, un certain niveau de performance. Pour répondre à ces exigences une implémentation matérielle est incontournable. Dans ce travail, nous exploitons les développements récents des circuits FPGA (Field Programmable Gate Array) tels que la reprogrammation et le faible coût de développement pour
implémenter sur un circuit FPGA de la famille Virtex-2 une méthode originale permettant d effectuer rapidement la multiplication multi précision avec des ressources hardwares minimes où la multiplication de deux nombres flottants ayant une taille de 1 à 64 mots s exécute en 33 ns. Seule la mantisse a été traitée car elle représente la partie difficile à manipuler. Notre article est structuré comme suit. La section 2 rappelle la représentation des nombres en virgule flottante à précision variable. La section 3 introduit le principe de la multiplication classique. La section 4 décrit la multiplication de Karatsuba. La section 5 présente le principe d exécution de la multiplication de deux nombres de grande taille. L architecture de notre multiplieur à précision variable est détaillée dans la section 6. La section 7 résume les résultats d implémentation et enfin une conclusion est donnée en section 8. mesure pour éviter de mémoriser inutilement n nombres à (n+1) chiffres. Par contre si l on ne dispose pas de multiplieur de taille n m (pour des opérandes de grande taille), la complexité sera accrue dans la mesure où la multiplication de l opérande par un chiffre ne peut être exécutée en une seule opération. Dans ce cas, les opérandes sont subdivisés en plusieurs mots de taille égale à la taille du multiplieur à «m bits» et la multiplication est réalisée selon le concept schématisé sur la figure 2. III. REPRESENTATION DES NOMBRES EN ARITHMETIQUE VIRGULE FLOTTANTE A PRECISION VARIABLE En arithmétique à précision variable, deux formats de représentation des nombres sont utilisés : la représentation en virgule fixe à précision variable et la représentation en virgule flottante à précision variable. Cette dernière a été retenue pour notre application dans la mesure où, elle permet de représenter plus de nombres et une dynamique plus importante que la représentation en virgule fixe. Ce format est donné par la figure 1. Il se compose d un champ exposant (E), un bit signe (S), un champ type (T), un champ longueur de la mantisse (L) et une mantisse (M) qui comporte L+1 mots (M(0) à M(L)). L exposant est en format complément à 2. Le bit signe est à zéro si le nombre est positif et à un si le nombre est négatif. Le champ type indique si le nombre est infini, nul, ou pas un nombre. Le champ longueur spécifie le nombre de mots à m bits dans la mantisse [8]. Les mots de la mantisse sont stockés à partir du bit le plus significatif M(0) au bit le moins significatif M(L). La mantisse est normalisée entre 1/2 et 1. La valeur d un nombre virgule flottante à précision variable (VP) est donnée par : 16bits 8bits Exposant (E) S T L Mot Mantisse M (0) Mots Mantisse M (1) a M (L-1) Mot Mantisse M (L) mbits IV. MULTIPLICATION CLASSIQUE L algorithme de multiplication le plus simple est celui que nous utilisons lorsque nous faisons les calculs «à la main» : multiplier chaque chiffre d un opérande par chaque chiffre de l autre opérande puis effectuer les décalages adéquats pour enfin additionner le tout. Dans cette méthode dite «manuelle», nous commençons par calculer tous les produits partiels avant de les additionner. Dans la version «informatique», les additions sont effectuées au fur et à Figure 2. Multiplication classique en multi précision de deux nombres de 3 mots à. Dans cette méthode, la taille des opérandes est supposée égale à n chiffres de et le calcul d un produit partiel, qui est la multiplication d un opérande par un chiffre de l autre opérande, nécessite n multiplications de m et (n-1) additions de. D où le nombre d opérations nécessaires pour le calcul de la multiplication de deux opérandes de n m bits est de n 2 multiplications de m et de [n (n-1)+2n] additions de. Néanmoins cette méthode d exécution de la multiplication, qui consiste à calculer les produits partiels et de les stocker dans une mémoire puis faire l addition finale, est très coûteuse en mémoire dans la mesure où tous les produits partiels doivent être stockés dans la mémoire. Pour une multiplication de deux nombres de n n chiffres de, la mémoire nécessaire pour stocker tous les produits partiels est de n 2 (m+1) bits. Pour des nombres qui s'écrivent sur une taille de 512 64 bits, la mémoire nécessaire est de l'ordre de 17 Méga bits. V. MULTIPLICATION DE KARATSUBA L algorithme de Karatsuba est un algorithme récursif introduit par deux mathématiciens russes Karatsuba et Ofman en 1962. Cet algorithme est basé sur une décomposition de chacune des multiplicande et multiplicateur en deux parties : les moins signifiantes A L et B L et les plus signifiants A H et B H et utilise l égalité polynomiale suivante avec 2 m est la base de calcul: (A H.2 m +A L ) (B H.2 m +B L ) = A L B L + [( A H +A L ) (B H + B L )
- A L B L - A H B H )].2 m + (A H B H ).2 2m D où la multiplication de deux nombres de n bits se ramène donc à trois multiplications de n/2 bits, ainsi que quatre additions et deux soustractions de nombres de n/2 bits et quelques décalages. Au lieu de quatre multiplications et trois additions pour la multiplication classique. Il est clair que l algorithme de Karatsuba [9] est basé sur la substitution d une multiplication par trois additions, dans la mesure où, il fait une réduction du nombre de multiplication de un au détriment de trois additions supplémentaires. D où les performances de cet algorithme sont basées sur l écart en performances entre les deux opérateurs (de multiplication et d addition) utilisés pour réaliser cet algorithme. Il a été reporté dans [10] que la complexité algorithmique en terme de temps d exécution d une multiplication de deux nombres de taille n par l algorithme de Karatsuba est de T(n) = O(n log 3 ). Cette dernière est bien inférieure à la complexité de l algorithme classique qui est de T(n) = O(n 2 ). La multiplication de Karatsuba est assez fréquemment implantée dans des logiciels pour le calcul en précision variable. Cet algorithme s avère plus performant par rapport à l algorithme classique quand la taille des opérandes dépasse un certain seuil. Ce seuil est souvent un résultat d une expérimentation et dépend de la nature de la machine utilisée et de la manière dont est programmée cette méthode [11]. Malgré le degré de complexité algorithmique moindre que présente l algorithme de Karatsuba, sa mise en œuvre matérielle est souvent complexe et dépend du type du matériel qui va recevoir l implémentation (ASIC, FPGA, etc.). Pour une implémentation sur circuit FPGA, la multiplication de Karatsuba présente une complexité de routage qui croit avec la taille des opérandes, due aux divisions successives des opérandes pour obtenir des sous mots dont la taille est égale à celle du multiplieur utilisé dans l architecture. Cette complexité de routage est d autant plus importante que le ratio (taille des opérandes sur taille du multiplieur) est grand. VI. LA METHODE PROPOSEE la taille du multiplieur et de la taille des cases mémoires utilisés dans cette méthode. A 0 A 1 -------------- A n-2 A n-1 B 0 B 1 -------------- B n-2 B n-1 R 0 R 1 -------------- R 2n-2 R 2n-1 Figure 3 Découpage des opérandes A, B et du résultat R en mots de Dans la section précédente, nous avons parlé de la complexité de routage engendrée dans l implémentation de la méthode de Karatsuba et de l importance du délai de routage dans l implémentation de fonctions complexes sur circuits FPGAs. Pour diminuer cette complexité de routage qui engendre parfois des délais supérieurs à ceux de la logique, notre méthode est basée sur l accumulation des produits A i B j au fur et à mesure qu ils sont calculés. L algorithme de calcul de la multiplication à précision variable est comme suit : Algorithme Multiplication à précision variable Entrées A, B Sortie R= A B Initialisation R= 0 for j= 0 to n-1 do for i= 0 to n-1 do R(j+i) = LSB de (Aj Bi) + R(j+i) ; R(j+i +1) = MSB de (Aj Bi) + R(j+i +1) ; end for end for Retourner R = (R 0, R 1,., R 2n-1 ) Un exemple de calcul avec la méthode proposée de la multiplication à précision variable pour deux nombres de 3 m bits est montré sur la figure 4. La méthode qu on propose dans cette section est en faite tirée de la méthode classique avec remède à l inconvénient de l utilisation de mémoire de grande taille. Dans cette méthode, on utilise une mémoire de n 2 au lieu de n 2 2m. Cette réduction est d autant plus importante que la taille des opérandes est grande. Un intérêt particulier a été accordé à l adaptation de cette méthode à une implémentation sur circuits FPGA de Xilinx. Ces derniers sont caractérisés par des ressources intéressantes pour l implémentation de la multiplication pour des nombres de grandes tailles. Soit la multiplication R = A B où A = Σ n-1 i=0 A i 2 i m, B = Σ n-1 j=0 B j 2 j m R = Σ 2n-1 k=0 R k 2 k m = (Σ n-1 i=0 A i 2 i m ) (Σ n-1 j=0 B j 2 j m ) = Σ n-1 j=0 (Σ n-1 i=0 (A i B j ) 2 (i+j) m ) Comme montré sur la figure 3, les opérandes A, B ainsi que le résultat R sont découpés en mots de qui correspond à Figure 4. Processus de calcul de la multiplication à
précision variable proposée. VII. ARCHITECTURE L architecture qui implémente la méthode décrite dans la section précédente est montrée sur la figure 5. Dans cette architecture, les opérandes A et B sont rangés au préalable dans deux mémoires MA et MB dans des cases mémoires de. Chacun des mots A i, B j des opérandes A et B est adressé par son poids respectivement i et j, qui représente leurs emplacement dans les mémoires MA et MB. VIII. RESULTATS D IMPLEMENTATION Notre méthode a été implémentée sur un circuit FPGA en utilisant l outil de conception ISE 7.1 de Xilinx. Les différents modules constituants cette architecture ont été générés d une manière optimisée grâce à l outil CORE generator. Pour garantir le fonctionnement correct de notre architecture, elle a été simulée avec ModelSim PE 6.0, puis synthétisé en utilisant l outil XST de Xilinx. Elle a été mappée, et routée dans le circuit XC2v1000-5bg575 de la famille Virtex-2. Les résultats d implémentation de cette architecture sont représentés dans le tableau 1. Le temps d exécution d un cycle est de 33 ns. Elément Taux d occupation % IOB 72/392 21% SRAM 3/48 7 % Slice 2381/7680 11% Mult 18 18 16/40 40% BUFGMUX 11/16 68% DCM 3/8 37% Tableau 1. Taux d occupation de l architecture sur le XC2v1500 Figure 5. Architecture pour le calcul de la multiplication en multi précision A chaque itération le produit A i B j est effectué par le multiplieur parallèle de 64 64 bits, d où l obtention d un résultat sur 128 bits. Les 64 bits moins significatifs (LSB) ont un poids de (i+j) alors que les 64 bits les plus significatifs (MSB) ont un poids de (i+j+1). Le LSB et le MSB du résultat de la multiplication sont cumulés avec les résultats de l itération précédente stockés dans la mémoire résultat MR respectivement aux adresses (i+j) et (i+j+1). Et les résultats de ces deux additions sont mémorisés une autre fois aux mêmes adresses. Ce processus se poursuit jusqu aux dernier produit A n-1 B n-1. IX. CONCLUSION Dans cet article une méthode matérielle pour le calcul de la multiplication à précision variable a été présentée. Celle-ci tire ses avantages de l utilisation de la méthode classique qui présente une complexité de routage faible comparée à la méthode de Karatsuba et l utilisation astucieuse des ressources performantes des circuits FPGAs pour l implémentation d une architecture qui présente un délai de n 2 33 ns (pour la multiplication de deux nombres de n 64 bits). Ce multiplieur convient à une utilisation, comme IP Intellectual Propriety, dans un système embarqué pour des applications nécessitant le calcul multi précision. Les tailles d opérandes supportées par notre architecture vont de 64 bits à 64 64 bits. Néanmoins, ces tailles peuvent être modifiés, selon les besoins de l application, dans la mesure où nous n avons utilisé que 7% des ressources en SRAM (Tableau 1) et que la modification de la taille de la mémoire c.-à-d. n n aura aucune influence ni sur l architecture ni sur ses performances. REFERENCES [1] M.Daumas, F.Dinechin, A, Tisserand, L arithmétique des ordinateurs, <Réseaux et systèmes répartis- Calculateurs parallèles, Volume 13 n 4-5/2001. [2] Douglas N. Arnold, The Explosion of the Ariane 5, http://www.ima.umn.edu/~arnold/disasters/ariane.html, 2000. [3] Douglas N. Arnold, The Patriot Missile Failure, http://www.ima.umn.edu/~arnold/disasters/patriot.html,2000. [4] WISE News Communique Radiological accident in Panama, http://www10.antenna.nl/wise/index.html?http://www10.anten na.nl/wise/549/5278.html, June 2001.
[5] J.-C Bajard. ; L. Imbert; F. Rico, Evaluation rapide des fonctions élémentaires en multi précision, TSI : Technique et Science Informatiques, 2001, Vol. 20, n 2, pp. 267-286 [6] M.Quercia, calcul multi précision, http://pauillac.inria.fr/~quercia/papers/multiprecision.ps.gz. [7] D. M.Smith, Using Multiple Precision Arithmetic, Computing in Science &Engineering IEEE publication, July/august 2003. [8] M. J. Schulte, E. E. Swartzlander Jr. A Family of Variable-Precision Interval Arithmetic Processors IEEE Trans. On Computers Vol. 49, No. 5, May 2000. [9] A. Karatsuba, Ofman Yu, Multiplication of multiple numbers by mean of automata, Dokadly Akad. Nauk SSSR 145, no 2, 1962, pp293-294. [10] Serdar S. Erdem,Çetin K. Koç, A Less Recursive Variant of Karatsuba-Ofman Algorithm for Multiplying Operands of Size a Power of Two, 16 th IEEE Symposium on Computer Arithmetic, 2003. [11] M. Daumas, JM Muller, Qualité des calculs sur ordinateur, vers des primitives plus fiables.edition Masson, Paris 1997, ISBN 2-225-85534-X. [12] Kassem Kalach «Implémentation de la multiplication es grands nombres dans le contexte des algorithmes cryptographiques» Thèse de Master université de Montréal. DAT 2008