Architecture Pipeline pour le Calcul Rapide des Fonctions
Transcription
Architecture Pipeline pour le Calcul Rapide des Fonctions
Architecture Pipeline pour le Calcul Rapide des Fonctions Elémentaires sur FPGA M. Anane, H.Bessalah, N. Anane & M.Issad Résumé—Une méthode matérielle pour le calcul rapide des fonctions élémentaires en double précision de la norme IEEE-754 sur circuit FPGA est présentée dans cet article. L’idée de base est d’adapter une méthode de calcul selon les ressources matérielles disponibles dans les circuits FPGAs de la famille VirtexII. Cette méthode combine lecture de tables et approximations polynomiales minimax par segments. Pour atteindre une précision de calcul de 2ulp et ne pas dépasser la capacité mémoire disponible dans le circuit FPGA, notre méthode requiert l’utilisation d’un polynôme de degré trois dont l’évaluation est faite selon le schéma de Horner afin de minimiser le nombre de multiplications et d’éviter le calcul des puissances de x. Dans cet article, il sera question du calcul du sinus, du cosinus, de l’exponentielle, du logarithme, la racine carrée, de l’inverse et de l’inverse de la racine carrée. La réduction d’argument étant supposée effectuée, on se ramène donc au problème d’évaluer juste la fonction. La notation Carry Save (C.S) est utilisée avantageusement pour la représentation des résultats intermédiaires dans le but d’éviter la propagation de la retenue. Certaines stratégies ont été adoptées dans l’implémentation des Fused multiplier adder (FMA) afin de minimiser le délai ainsi que la surface occupée. L'architecture résultante est compacte et a un temps de cycle d’environ 24 ns et opère avec une fréquence de 41 MHz. Le premier résultat est obtenu après une latence de quatre cycles et le débit de calcul est d’un résultat par cycle. Termes Index—Arithmétique, Sinus, Cosinus, Exponentielle, Logarithme, IEEE-754, Virtex II. I. INTRODUCTION L Évaluation rapide des fonctions élémentaires a toujours été considérée comme un moyen important pour accélérer les calculs scientifiques en traitement de signal. Le calcul des fonctions élémentaires sur ordinateur se faisait par logiciel [1], ce qui signifie des délais très importants. Cette évaluation peut s’effectuer avec du matériel dédié, c’est le cas de certains processeurs de traitement du signal [2]. Les méthodes d’évaluation sont nombreuses [3] et dépendent de la quantité de matériel que l’on est prêt à leur consacrer. Le moyen le plus rapide pour évaluer une fonction est l’utilisation d’une table. Néanmoins, la mémoire requise devient vite prohibitive avec l’augmentation de la précision. Certaines méthodes sont basées sur l’utilisation d’addition et de décalages (c’est le cas de l’algorithme CORDIC [4]). D’autres utilisent les approximations polynomiales. Le calcul par approximation polynomiale nécessite un degré de développement élevé qui résulte en un nombre élevé d’additions et de multiplications. Des méthodes ont récemment émergé, combinent lecture de table et évaluation de polynôme de petit degré [5, 6, 7], ce qui réduit sensiblement la taille des tables utilisées. Ces méthodes font appel à l’utilisation d’approximation polynomiale dans ses algorithmes de calcul. L’utilisation de cette dernière réduit sensiblement la taille des tables utilisées (comparée à la méthode tabulaire). Ces algorithmes de calcul à l’aide de tables ont été suscités par de nouvelles applications (comme la synthèse de l’image 3D, la réalité virtuelle et les jeux sur ordinateur) gourmandes en débit de calcul et favorisés par le progrès technologique (on peut réaliser des tables de plus en plus grandes). Les premiers algorithmes développés pour ce type de calcul étaient basés sur la lecture de tables et un développement de Taylor d’ordre 1. Ces algorithmes ne nécessitent pas beaucoup de calculs (on peut citer la méthode bipartite [8, 9, 10] et la méthode dite approximation linéaire. Avec l’élargissement de ce type de méthodes aux applications qui nécessitent plus de précision, ces algorithmes se sont avérés difficiles (voir impossible dans certains cas) à implémenter sur silicium. Ceci est du au fait de la grandeur des tables que requiert ces méthodes. D’autres méthodes ont été développés, celles ci sont toujours basées sur une lecture de table, mais utilisent des polynômes d’ordre deux [11,12,13]. Dans cet article, nous présentons une méthode orientée matériel pour le calcul rapide de certaines fonctions élémentaires en double précision de la norme IEEE754. Celle-ci est basée sur la lecture de table et le calcul d’un polynôme minimax d’ordre 3. L’implémentation de cette méthode est basée sur une architecture pipeline et l’utilisation de FMAs (Fused Multiplier Adder). Ces derniers sont optimisés et adaptée aux ressources matérielles disponibles dans les circuits FPGA de la famille VirtexII [14]. Le reste de cet article est structuré comme suit. Dans la section II, on donne un aperçu sur les approximations polynomiales et on focalise sur l’approximation minimax par segment. Le format de représentation des nombres en double précision est présenté dans la section III. Dans la section IV, est présentée le calcul de la réduction d’argument pour les fonctions élémentaires considérées. La méthode implémentée est présentée dans la section V. L’algorithme de calcul des coefficients est présenté dans la section VI. L’architecture est décrite dans la section VII. Le calcul d’erreur et le dimensionnement des tailles des données sont présentés dans la section VIII. Les résultats d’implémentation sont présentés dans la section IX. Enfin la section X est réservée à la conclusion. II. APPROXIMATION POLYNOMIALE L'approximation des fonctions est d’une grande utilité pour l’évaluation des fonctions élémentaires. Elle consiste à remplacer une fonction f(x) par un polynôme Pn(x) facile à calculer, puisque n'interviennent que des puissances entières de x, ainsi que des multiplications et des additions/ soustractions. Pour évaluer une fonction élémentaire f(x), il suffit de l’approximer par un polynôme Pn(x) de degré n sur un intervalle [a, b] fixe qui à la forme suivante : Pn(x) = C0 + C1x1 + … …… + Cn-1xn-1 + Cnxn Il y a plusieurs formes de polynômes d'approximations. Cellesci ont des propriétés différentes et peuvent être classées en deux groupes: Les approximations qui minimisent l'erreur moyenne telle que Chebychev et Legendre et les approximations qui minimisent l'erreur maximum telle que Taylor, et minimax. L'erreur d’approximation εappro est une bonne mesure d'exactitude de cette approximation et elle est définie comme la distance entre Pn(x) et f(x). εappro = ║ Pn(x) - f(x) ║ Les approximations qui minimisent l'erreur moyenne ne sont pas souvent employées parce que, malgré que l'erreur moyenne est petite, il peut y avoir une grande erreur en un point xq de l’intervalle [a, b]. Par contre les approximations qui minimisent l'erreur maximale sont largement utilisées puisque l’erreur sur tout l’intervalle, demeure inférieure à l’erreur maximale. Celleci est définie comme suit : εappro max = max ║ Pn(x) - f(x) ║ pour x ∈ [a, b] Il existe une méthode qui offre la meilleure approximation polynomiale possible d’une fonction sur un intervalle donnée avec un degré donné, grâce à l’algorithme de REMEZ [15]. C’est l’approximation qui minimise l’erreur maximale entre la fonction et le polynôme sur un intervalle. Cette approximation, appelé approximation minimax, permet d’obtenir la précision voulue avec un polynôme de degré le plus faible dont l’évaluation demandera donc moins de multiplications. Mais le calcul des coefficients de ce polynôme d’approximation est très difficile. Dès que la précision voulue augmente, il nécessite une très grande puissance de calcul, ce qui le rend impossible pour les très grandes précisions. De plus, il n’y a aucun lien entre deux approximations minimax de degrés différents. Cela signifie que quand la précision voulue n’est pas fixée au départ mais choisie par l’utilisateur, il faut calculer une approximation pour chacune des précisions possibles ce qui implique l’utilisation d’une table de taille importante pour stocker les coefficients des différents polynômes. Ce n’est pas le cas des approximations de Taylor, qui sont constituées d’une unique série entière que l’on tronque plus ou moins loin [16]. Malgré que l’approximation Minimax demeure moins employée pour la difficulté de calcul des coefficients du polynôme d’approximation, qui nécessite une procédure de calcul itérative due à l’algorithme Remez. Avec la puissance de calcul des machines actuelles, la méthode de Remez est devenue beaucoup plus abordable grâce au logiciel de calcul formel MAPLE [17]. Ce qui a permis à cette approximation de devenir un choix incontournable dans les applications ou la précision est fixe et le polynôme est de faible degré. II.1. Approximations Minimax par segments L’approximation Minimax est définie pour tout a ≤ x ≤ b par : max ⏐ f(x) – P*n(x)⏐= min (max ║ f(x) - Pn(x) ║) où P*n et Pn sont des polynômes de degré inférieur ou égal à n. Le polynôme P*n minimise l’erreur maximale sur l’intervalle [a, b] sur lequel on cherche à approcher la fonction f(x). Le grand avantage dans l’utilisation de cette approximation se situe dans le fait, que pour une précision donnée, on obtient le polynôme de degré le plus faible. Ce qui conduit à un polynôme avec un nombre de termes réduit et par conséquent un temps de calcul réduit. Comme le nombre de termes du polynôme est également affecté par la taille de l'intervalle d'approximation, il est possible de transformer l'intervalle original à plusieurs petits intervalles en employant l'approximation par segments. Cette dernière consiste à découper l’intervalle de calcul [a, b] en plusieurs sous intervalles [ai, bi] et utiliser plusieurs polynômes d’approximations Pi de faible degrés, avec un polynôme pour chaque sous intervalle. Cette technique conduit certes à une réduction de la complexité du hardware et par conséquent réduit le délai de calcul, Néanmoins la mémoire requise pour stocker les coefficients des polynômes augmente III. FORMAT DES NOMBRES Le standard IEEE 754 [18] est la représentation binaire des nombres en virgule flottante la plus utilisé. Ce standard a été développé pour faciliter la portabilité et le développement de programmes orientés numériques. Les nombres du format sont caractérisés par trois champs, une mantisse m= 1.f où f est la partie fractionnaire, un exposant e et un signe s, la base de représentation étant fixée à 2. Ainsi un nombre flottant x s’écrit de la façon suivante : x = (-1) s 1.f × 2e Le bit implicite valant toujours 1 n’est pas stocké. Seule la partie fractionnaire est stockée. En double précision un bit est utilisé pour coder le signe, 11 bits sont réservés pour l’exposant appartenant ainsi à [-1022, 1023] et 52 bits sont assignés à la partie fractionnaire de la mantisse normalisée à 1≤ m ≤2. IV. LA REDUCTION D’ARGUMENT Les algorithmes utilisés pour l’évaluation des fonctions élémentaires ne donnent des résultats de calcul exacts seulement si l’argument appartient à un petit intervalle. Comme les fonctions élémentaires ont des domaines de définition infinis, ils doivent être réduits à l'intervalle de convergence de l'algorithme, en utilisant des transformations mathématiques, ce processus est appelé réduction d’argument La précision du résultat de calcul de la fonction dépend en grande partie de la précision de calcul de la réduction d’argument [19, 20]. En pratique l’évaluation d’une fonction élémentaire passe par trois étapes : 1. La réduction d’argument, où l’argument d'entrée x est remplacé par x* se trouvant dans un intervalle plus petit. 2. L’approximation polynomiale de la fonction élémentaire avec l’argument réduit x*. 3. La reconstruction du résultat final de la fonction. On considère, dans ce qui suit, le calcul des fonctions suivantes : l’inverse 1/x, la racine carrée x1/2, l’exponentielle, le logarithme, le sinus et le cosinus, avec des nombres normalisés en double précision. A. L’inverse La fonction inverse 1/x est définie pour tout x différent de zéro. Le calcul de la fonction inverse se réduit au calcul de l’inverse de la mantisse du nombre et de la négation de l’exposant. L’opération de réduction d’argument est réalisé en décalant la mantisse d’un bit à droite et en ajoutant 1 à l’exposant. L’intervalle réduit est [0.5, 1[ et x* = 0.1f × 2e +1 1/x = 1/ (0.1f × 2(e +1)) = 1/ 0.1f × 2 - (e +1) Le signe du résultat est celui de l’opérande x. B. La racine carrée La fonction racine carrée est définie pour tous les nombres positifs représentables en double précision. La réduction d’argument pour cette fonction se fait comme suit : Si e est pair alors √x = √ 0.01f × 2 e+2 = √ 0.01f × 2 (e+2)/2 et l’intervalle sera [0.25, 1]. Si e est impair alors √ x = √ 0.1f ×2 e+1 = √ 0.1f × 2 (e+1)/2 et l’intervalle sera [0.5, 1]. Le calcul de la racine carrée de n’importe quel nombre revient à calculer la racine carrée de sa mantisse, décalée d’un ou de deux bits à droite, par une approximation minimax sur l’intervalle [0.25, 1]. C. L’exponentielle Le calcul de la fonction exp(x) d’un nombre en virgule flottante se fait par une première limitation du domaine de définition de la fonction par le fait que le résultat de calcul de cette fonction ne peut pas être supérieur au plus grand nombre représentable en double précision ni inférieur au plus petit nombre représentable en double précision de la norme IEEE 754. Les arguments qui donnent ces limites sont : A = log (2 –1023) = -709.0895657 B = log (21023) = 709.0895657 L’exponentiel d’un nombre plus grand que B est un dépassement de capacité alors que celui d’un nombre plus petit que A est arrondi vers zéro. Pour calculer l’exponentielle d’un nombre x un flottant en double précision. On utilise l’identité suivante : ex = 2 x/ln2. La première étape est donc de calculer l’argument réduit : x* = x - k × ln2, où x* ∈[-ln2/2, ln2/2] et k un entier qui est égal à: k= ⎡x/ln2⎦ ou ⎡ ⎦ indique la partie entière la plus proche. Le calcul de l’exponentiel devient alors : ex = ex*+k × ln(2) = ex* × ek × ln(2) = ex* ×2k. D. Le logarithme Le logarithme est définit seulement pour les valeurs de x positif, alors que pour la réduction d’argument, on utilise la propriété additive du logarithme : Ln(1.f ×2 e) = ln(0.1f)+ ln( 2 e+1) = ln(0.1f) + (e+1) × ln( 2 ) Le calcul du logarithme d’un nombre en virgule flottante sera alors le calcul du logarithme de la mantisse décalée d’un bit à droite puis on lui ajoute le produit de ln(2) avec l’exposant augmenté de 1. L’intervalle de calcul sera alors [0.5, 1[. E. Sinus/Cosinus Les fonctions Sinus et Cosinus ont des domaines de définition infinis alors que le résultat de calcul de ces fonctions appartient à l’intervalle [-1, 1]. Nous utilisons la réduction additive et l’intervalle de travail sera [-π/4, π/4]. La transformation utilisé pour exprimer x en fonction de l’argument réduit x* sera : x= x* + k × π/4, où k un entier et x* ∈ [-π/4, π/4]. k= ⎡2x/π ⎦ et | x*|≤ π/4 et x* =x - k× π / 2 Alors sin(x) = signe(x) × sin (x*) × (-1) k Le calcul de sin(x) et/ou cos(x) peut être réalisé comme étant le calcul de sin(x*), cos(x*), -sin(x*) ou -cos(x*) suivant le résultat de n = k modulo 4. n 0 1 2 3 sin(x) sin(x*) cos(x*) -sin(x*) -cos(x*) cos(x) cos(x*) -sin(x*) -cos(x*) sin(x*) V. METHODE IMPLEMENTEE Notre méthode de calcul des fonctions élémentaires est basée sur l’approximation minimax par segment. Celle-ci consiste à partitionner le domaine de calcul de f(x) en 2m segments, puis approximer la fonction sur chaque segment. Dans cette implémentation hardware, les m bits les plus significatifs de x (X1) sont utilisés pour adresser la mémoire contenant les coefficients des polynômes. Ces bits sont appelés les bits d’adresses. Les (n-m) bits restants de x (X2) spécifient le point ou l’approximation est effectuée. Ces bits sont appelés les bits d’interpolation. Cette méthode conduit à une diminution de la complexité du hardware ainsi que du temps de calcul par le fait qu’a chaque fois qu’on augmente le nombre d’intervalles le degré des polynômes Pi diminue. Cependant, cette augmentation dans le nombre des polynômes ne se fait pas sans inconvénient. Ce dernier se matérialise par l’augmentation de la mémoire nécessaire pour le stockage des coefficients de l’ensemble des polynômes, (donc l’augmentation de m). Notre méthode est destinée à être implémentée sur un circuit FPGA. Ces circuits sont réputés être à ressources limitées, pour cela on a ciblé la famille VirtexII qui est la plus riche en terme de ressources et en particulier en mémoire SRAM. Il en ressort que la détermination de la valeur de m est cruciale, dans la mesure où cette valeur représente la taille de l’adresse des tables. La première contrainte est la mémoire disponible sur le plus grand circuit FPGA de la famille VirtexII. La deuxième contrainte est la précision des calculs, qui a une influence sur l’ordre du polynôme d’approximation. Celle-ci est fixée à 2 ULP (Unit in Last Place), qui est égal 2(-52). Ce compromis a été résolu grâce à un programme écrit en C pour estimer la valeur de m et la taille totale des tables des coefficients pour différents degrés de polynômes. Il en résulte que l’ordre 3 des polynômes représente le plus faible ordre implantable sur les circuits FPGA actuels. Cela veut dire que l’évaluation des fonctions considérées sera faite avec des polynômes de la forme : P(x) = C0 +C1*x +C2*x2 + C3*x3 L’évaluation d’un polynôme d’ordre n exige n additions et n(n+1)/2 multiplications. Cette méthode d’évaluation polynomiale est très lente à cause du calcul des puissances de x qui est relativement coûteux en temps. De plus la précision de calcul du polynôme est faible et cela est dû aux erreurs d’arrondis commises à chaque opération de multiplication. Pour augmenter les performances en terme de rapidité et de précision de calcul, le schéma de Horner permet une réécriture différente du polynôme de façon à réduire le nombre total de multiplications. P (x) = ((C3*x + C2)* x + C1) * x +C0 VI. ALGORITHME DE CALCUL DES COEFFICIENTS Cet algorithme permet de déterminer les coefficients C0, C1, C2 et C3 des polynômes Pi. Ces coefficients sont ceux des polynômes d’approximations minimax, qu’on peut calculer grâce au logiciel Maple. Ce dernier permet d’obtenir ces polynômes d’approximations avec des coefficients, sans restriction au niveau de la taille du mot, qui conduisent à des résultats d’approximation des fonctions élémentaires avec une bonne précision. Cependant, le stockage de ces coefficients dans une table exige de les représenter avec une taille de mot fini, et la plus petite que possible, afin de minimiser la taille des tables. Il faut donc arrondir et un tel arrondi des coefficients peut affecter sérieusement la précision de l’approximation. Pour cela, on a réalisé un programme en C pour une estimation grossière des tailles minimales des coefficients arrondis C0*, C1*, C2*et C3* qui n’affecte pas la précision arrêtée dès le début qui est de 2 ulp. Ce programme donne les tailles suivantes 57, 45, 32 et 19. On a réalisé une procédure écrite en Maple, qui à base de quatre paramètres (p, q, r, t) représentant respectivement les LSB des coefficients C0*, C1*, C2*et C3*, calcule l’erreur totale commise dans l’approximation d’une fonction élémentaire par un polynôme minimax d’ordre 3. Le but de cette procédure est l’optimisation des tailles des coefficients pour avoir les tailles minimales des coefficients avec une erreur totale ne dépassant pas 2 ulp. Le principe est de lancer un premier calcul avec les dimensions données par le programme en C (qui représente le point de départ de nos calculs) et vérifier l’amplitude de l’erreur. Si cette dernière est inférieure à 2-53, on diminue la taille de C0 et on refait une autre passe, jusqu'à ce qu’on trouve la taille minimal de C0. Une fois que la taille de C0 est optimisée, on passe au coefficient C1 et on refait le même travail, puis on passe à C2, et enfin à C3. J.A.Pinero & al ont proposé dans [21] une méthode pour l’optimisation des tailles des coefficients pour une architecture parallèle. Néanmoins, cette méthode s’adapte aux approximations d’ordre 2. Il est à noter que la taille d’un coefficient est égale à son LSB plus son MSB. D’où le calcul des max et des min des coefficients est nécessaire, ceux-ci sont inclus dans la procédure de calcul des coefficients. Avec ces max et ces min, on peut déterminer sur combien de bits sont représentées les parties entières et fractionnaires de ces coefficients. Dans le tableau 1 sont montrées les tailles d’adressage m, les tailles des coefficients et l’erreur commise pour chaque fonction considérée. Fonction m Taille C0 * Taille C1* Taille C2 * Taille C3 * Max erreur ×10-16 Exp 12 1.53 1.41 0.30 0.19 0.08452483886 0.08718517477 Ln 12 1.53 1.41 0.30 0.19 Sin 12 1.53 1.42 0.30 0.20 0.10997466708 Cos 12 1.53 1.42 0.30 0.20 0.11040466233 1/x √x 13 13 2.53 0.53 3.40 0.41 3.30 0.30 4.20 0.19 0.08343295799 0.08303442273 1/√x 13 1.53 0.40 0.30 0.19 0.09146505417 *Les tailles des coefficients sont exprimées par des nombres, dont la partie entière représente la taille de la partie entière du coefficient alors que la partie fractionnaire représente la taille de la partie fractionnaire du coefficient. Tab.1 Tailles des coefficients des polynômes VII. ARCHITECTURE Le calcul d’une F.E fait intervenir trois fois le calcul l’expression (a*x+b), cette opération est calculée par un seul module, (FMA) Fused Multiplier Adder. L’évaluation d’une fonction peut être réalisée par une structure séquentiel ou pipeline. Afin d’augmenter les performances de notre architecture en terme de débit de calcul et de temps d’exécution, l’architecture pipeline a été adoptée, alors que l’expression (a*x+b) est calculée par un seul module, (FMA) sans propagation de la retenue. L’idée est de conserver les résultats issus des FMAs en représentation C.S (Carry-Save). La conversion C.S – Complément à deux est effectuée dans le dernier étage par un additionneur rapide. L’architecture proposée est illustrée sur la figure 1. VII.1. LES MODULES FMAS (FUSED MULTIPLIER ADDER ) Les modules FMA réalisent le calcul de l’expression (a*x+b). Chacun de ces modules est constitue d’un multiplieur et d’un additionneur. En général un multiplieur est constitué de trois parties : la génération des produits partiels, la réduction des produits patiels et enfin l’addition. Les FMAs de notre architecture ne comportent pas d’addition finale d’où les résultas à leurs sorties sont en représentation C.S (Carry Save). Le terme b est admis dans le bloc réduction des produits partiels au même titre que les produits partiels de a*x. La multiplication est réalisée selon l’algorithme de Booth modifié [22]. Pour le FMA1, le coefficient C3 fera l’objet d’un codage Cà2_SD4 (Complément à deux _ Sign Digit 4). Alors que pour le FMA2 et le FMA3, ce sont les résultats (Res_1 et Res_2) qui feront l’objet de codage SD4, il sera donc question du codage CS_SD4. Pour la réduction des produits partiels nous utilisons la méthode à base des compresseurs [23]. L’idée du compresseur 4 :2 est d’avoir deux retenues du même poids et l’une de ces retenues Cout1 est dirigée vers l’entrée Cin du compresseur, du même étage de la i+1éme tranche. Alors que Cout2 est dirigé vers l’entrée Cin du compresseur de l’étage (n+1) de la (i+1)éme EApprox = EPoly + EArro-Coef < 2-53 Dans le tableau 2, sont montrées les erreurs EApprox et EPoly pour chacune des fonctions considérées. Fonction Exp. Ln Sin Cos 1/x √x 1/√x EPoly ×10-17 0.0102222534125 0.6935506891277 0.0887740967359 0.1156482302025 0.3468388359924 0.0027528761392 1.5170495482276 EApprox ×10-15 0.08452483886 0.08718517477 0.10997466708 0.11040466233 0.08343295799 0.08303442273 0.09146505417 Tab. 2 EApprox et EPoly des fonctions considérées. Fig 1 Architecture globale pour l’évaluation des F.Es tranche. Il est à noter que chaque tranche (i) réalise la réduction des bits du poids (i). Alors que chaque tranche est composée de plusieurs étages. Le principe est, une fois que les PPs sont générés et organisés de façon à avoir tout les bits du même poids ensemble, de réduire jusqu’à avoir seulement deux bits, un bit SUM et un bit CARRY. Ce principe est montré sur la figure 2. VIII. CALCUL D’ERREUR L’erreur total du résultat final, peut être exprimé comme l’accumulation de l’erreur sur les résultats intermédiaires EInter (avant l’arrondi finale) et l’erreur due à l’arrondi finale EAr_fin. ΕTot = EInter + EAr_fin < 2-r Où r dépend du format de représentation des données d’entrées sorties de la fonction à calculer ainsi que de la précision désirée. Pour notre application, les calculs se feront en double précision avec une précision de 2 ulp (r=51). L’erreur sur les résultats intermédiaires EInter est la composante de deux erreurs EApprox, l’erreur due à l’approximation polynomiale et ECal_inter, l’erreur due à l’utilisation de tailles finies des résultats intermédiaires. A la fin de l’évaluation on effectue un arrondi au plus prés. Ce qui implique : EAr_fin ≤ 2-52 et L'erreur de calcul intermédiaire ECal-inter est l’accumulation des erreurs produites suite aux troncatures des résultats intermédiaires lors du calcul d’une fonction élémentaire. On note que ces troncatures concernent seulement les résultats issus des trois FMAs (Res_1, Res_2 et Res_3). ΕCal-inter < 2-53 C’est l’erreur au niveau du résultat final c-à-d après l’additionneur CPA. D’où l’erreur sur chacune des bronches de Res_3 (Carry et Sum) est de 2-54. De la même manière, on peut remonter et calcul l’erreur de troncature permise au niveau des résultats Res_2 et Res_1. Res_3 +ERes_3 = X2*(Res_2 +ERes_2) + C3. = X2*(Res_2+ C3) + X2*ERes_2 D’où ERes_3 = X2*ERes_2 X2 est représenté sur 52 bits, alors que ses 12 premiers bits sont à zéro. ERes_2 ≤ 2-42 De la même façon, on calcul ERes_1 à partir de ERes_2. ERes_1 ≤ 2-30 Ce calcul d’erreur nous permet de dimensionner les tailles des données dans notre architecture et de définir les niveaux de troncatures des résultats intermédiaires. Cette opération de troncature a l’avantage de réduire le délai d’exécution ainsi que le hardware nécessaire pour l’implémentation. EInter = EApprox + ECal-inter < 2-52 Les programmes Maple que nous avons réalisés, pour l’obtention des coefficients, calculent la contribution en erreur due à l’arrondi de ces coefficients. Donc EApprox est la composante e deux erreurs. La première est dûe à l’approximation polynomiale EPoly et la seconde est due à l’arrondi des coefficients EArro-Coef. Fig. 2 Schéma d’une tranche (i) de réduction des PPs IX. RESULTATS D’IMPLEMENTATION L'architecture pipeline que nous avons présentée dans cet article a été conçue en utilisant l’environnement de conception de Xilinx (fondation series 4.4i). Tous les blocs ont été décrits en code VHDL. Les tables ont été générées par l’outil CORE GENERATOR. Certaines stratégies ont été utilisées pour l’optimisation de notre architecture. Un intérêt particulier a été accordé au compresseur 4 :2. Nous avons utilisé la particularité des slices (qui sont des fonctions de génération de cinq entrées). Chacune des sorties du compresseur a été implémentée séparément dans un slice. D’où le délai du compresseur équivaut au délai d’un slice. Ceci réduit sensiblement le délai du compresseur et par voie de conséquence le délai au niveau des blocks de réduction des PPs. Les mêmes optimisations ont touchées les cellules de codage C.à.2_SD4 et CS_SD4. Ainsi le délai pour ces deux cellules est celui de deux slices. Pour garantir le bon fonctionnement de notre architecture, celle-ci a été simulée en utilisant l’outil ModelSim XE 5.5b, et synthétisée par l’outil FPGA express. Notre architecture a été implémentée dans le circuit XC2V3000(- 5)fg676. Les résultats d’implémentation sont donnés comme suit: La superficie totale accumulée: Le nombre de Slice 6524 de 14336 (45%) Le nombre de bloque SRAM 87 de 96 (90%) circuits FPGA programmable, est aussi une option pour le calcul de plusieurs fonctions élémentaires sur le même circuit. X. REFERENCES [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Le délai le plus important dans notre architecture est celui de l’étage 3 qui est de (23.759ns). Notre architecture peut opérer avec une fréquence de 41 Mhz et une latence de quatre cycles. [12] X. CONCLUSION [13] Une méthode de calcul rapide des fonctions élémentaires en virgule flottante double précision, dédié aux circuits FPGAs de Xilinx, a été présentée dans cet article. Cette méthode combine lecture de table et évaluation d’un polynôme. Les limites des ressources en terme de mémoire des circuits VirtexII de Xilinx nous ont obligé à utiliser un polynôme d’approximation minimax du troisième degré. Ce choix certes augmente le nombre d’opérations, pour l’évaluation d’une fonction, comparée aux méthodes qui utilisent le polynôme d’ordre deux, néanmoins, cet handicape a été surmonté grâce à l’utilisation de certaines stratégies de conception pour optimiser le délai d’évaluation d’une fonction. La structure pipeline a été introduite dans notre architecture afin d’augmenter le débit de calcul. Les FMAs sont réalisés sans propagation de la retenue et il en résulte que le délai dans ces modules est celui de la réduction des produits partiels. Une optimisation particulaire a été accordé au compresseur 4 :2, vu que de son délai dépend du délai du FMA. L’architecture que nous avons implémentée est dédiée au calcul de l’exponentielle. Néanmoins, celle-ci peut être adaptée à toutes les fonctions à un argument. Par l’utilisation d’un circuit plus important tel que XC2V8000, on peut implémenter le calcul de deux fonctions élémentaires sur le même chip. La reconfiguration, qui est une particularité des [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] W.Cody , W. Waite Software manual for the elementary Functions Prentice Hall, 1980 I.Koren, O.Zinaty, Evaluating Elementary Functions in a Numerical Coprocessor Based on Rational Approximations, IEEE Trans. on Computers, Vol 39, n° 8, August 1990. J.M Muller, Elementary functions Algorithms and Implementation, Birkhauser Boston, 1997. G. Havilland, A.Tuzynski, A Cordic arithmetic processor chip. In Proc. IEEE trans. on computers, vo.l C- 29, No.2, 1980. N. Takagi, Powering by a table look-up and a multiplication with operand modification. IEEE Trans. Computers, 47(11) pp 12161222, 1998. Andrew S Noetzel, An Interpolating Memory Unit for Function Evaluation: Analysis and Design. In Proc. of IEEE Transactions on Computers, vol. 38, No 3, March 1989. J.E Stine M.J Schulte, the Symmetric Table Addition Method for Accurate Function Approximation. Journal of VLSI Signal Processing 21, pages 167-177, (1999). D.Das Sarma An D W. Matula, Faithful Bipartite Rom Reciprocal Tables. Proc. of the 12th IEEE Symp. on Computer Arithmetic , pp 11- 28, 1995, Bath, UK. M.J Schulte, J.E Stine Approximating Elementary Functions with Symmetric Bipartite Tables. In Proc. Of IEEE Trans. On Computers, Vol. 48 N° 8 August 1999. J.-.M. Muller, “ Clacul de fonctions à l’aide de tables” Sympa’5 Rennes, 8-11 juin 1999. J. Cao, BelleW.Y.Wei, J.Cheng High Performance Architecture for Elementary Function Generation Proc. 13th Symposium on Computer Arithmetic, pp 184-188, 1997. J.A Pineiro, J.D Bruguera, J.M.Muller. High-Speed Double precision compotation of Reciprocal, Division, SquareRroot and Inverse Square Root. IEEE trans. Computers, vol.51, no.12, pp.1377-1388, Dec 2000. J.A Pineiro, J.D Bruguera, J.M.Muller Faithful Powering computation using Table look-up and a fused accumulation tree. Proc. IEEE 15th Int. Symp. Computer Arithmetic ARITH’15 2001. “Virtex™-II 1.5V Field programmable gate arrays”, Advance product specification, DS031-1 (v1.7) October 2, 2001. http://www.xilinx.com/ REMEZ Algorithm http://mathworld.wolfram.com/RemezAlgorithm.html Defour, D. Fonctions élémentaires : algorithmes et implémentations efficaces pour l'arrondi correct en double précision. Thèse de doctorat, Ecole Normale Supérieure de Lyon, Sept. 2003. Waterloo Maple Inc. Maple V programming guide, 1998 American National standards Institute and of electrical and Electronic Engineer,” IEEE standard for binary floating-point arithmetic”, ANSI/IEEE Standard,std 754-1985, New York , 1985. Florent de Dinechin,David Defour,Christoph Lauter, “Fast correct rounding of elementary functions in double precision using double-extended arithmetic”, Rapport de recherche n° 2004-10, CNRS-INRIA-ENS LYON-UCBL, March 2004. Brisebarre, D. Defour, P. Kornerup, J.-M. Muller and N. Revol, “A new range reduction algorithm”, presented at the 35th Conference on signals, systems and computers, Asilomar, USA, 4-7 November 2001. J.A.Pinero, S.F. Oberman, J.M.Muller & J.D. Bruguera High-Speed Function Approximation using Quadratic Interpolator. http://wwwgpaa.dec.usc.es/arquivos/articulos/2003/gac2003-i01.ps. Rapport de recherche Nov. 2003. G.W.BEWICK, Fast multiplication, algorithms and implementation. PhD thesis, Stanford University, 1994. A. Weinberger, ‘‘4:2 Carry-Save Adder Module,’’ IBM Technical Disclosure Bull., vol.23, Jan. 1981.