La division !

Signaler
Messages postés
221
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
11 décembre 2008
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Slt, programmant actuellement sur une cible embarqué avec quelque
contrainte temps réel et accès concurents, je me demandai si quelqu'un
(ou quelqu'une pas de discrimination) connait des technique
d'optimisation de la division.

Je m'explique, je sais déja que si l'on divise pas une constante, mieux
vaux multiplier par l'inverse (multiplication env 20 cycles division 40
cycles). Pour les division par puissance de 2 c'est le décalage qui
interviens. Mais si je ne me trompe pas, il me semble me souvenir de
technique pour les autres cas (notaments pour les divisions par 2^n -1
).

Les factorisations pour diminuer le nombre de division c'est pas mal (ex bete : 2/5 +3/5 => (2+3)/5 )



Un lien ou n'importe quel info es la bien venues.

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+

3 réponses

Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Ben apparemment tu connais déjà qq trucs.
Ya autre chose que tu as dit implicitement avec ta factorisation.
C'est qu'il faut tjs essayé de mettre la division à la fin d'une opération, ce qui revient à mettre toute une fraction ou équation au même dénominateur.
Ca permet ainsi d'éviter un cumul d'erreurs trop important, dû aux arrondis.

J'espère avoir répondu à ta question.

YOYO, @+.
YOYO
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
tu peux également utiliser la fonction div (déclarée dans stdlib.h) qui
permet d'avoir le quotient et le reste en appelant qu'une fois
l'instruction div du cpu (qui calcul naturellement les deux). Peut êter
que le compilateur fais lui même cette optimisation dans certains cas
(appels succesifs de / et %).



TRES IMPORTANT: regarde dans la documentation du processeur cible, ce genre d'optimisations sont généralement énumèrées.
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
steve_clamage > C justement ce que HCJarod veut eviter, car je rappelle que l'instruction 'div' est tres couteuse en terme de cycles (56-70 cycles sur un pentium 4 !). Je te conseille, si tu connais un peu l'asm, d'apprendre les instructions de la FPU, et pis de te faire une fonction de division !

Voila, ++

+2(p - n)