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.