les calculs a virgules fixes sont excessivement plus rapide que les virgules flottantes.
apres au niveau de l'archi :
sur les archis MMXisante, le MMX permet de paralleliser en prime des operations a virgules fixes la ou il n'y a qu'une operation a virgule flottante
il peut etre interessant d'utiliser certaines propriétés des pentium ( non MMX aussi ) qui ont une deuxieme UAL plus restreinte pour paralleliser les operations.
je ne connais pas les specificités des Athlon, je ne peux donc en parler.
et enfin reste une version MP du calcul.
au niveau du code :
un jmp réinitie le bus une partie du processeur ( pipeline de traitement des instructions ) donc il faut etaler les boucles.
les conditions sont couteuses.
un shift ( multiplication ou division par deux ) est bien moins couteux en cycle qu'un mul sur des entiers
un and est mieux qu'un div pour obtenir le reste ( s'arranger avec 2^x-1 )
avoir une approche differentielle du calcul permet dans une certaine mesure de se passer aussi des multiplication et division
si tout cela est impossible, selon la precision demander une logarithme bien choisi peut aussi facilité les calculs
faut aussi penser à aligner les données en memoire
avec ca, tu peux avoir des gains assez phenomenaux ... mais il faut faire du benchmark et surtout une analyse sinon cela peut ne servir a rien.
# optims de base
Posté par Mouns . En réponse au journal Optimisation de code C. Évalué à 3.
les calculs a virgules fixes sont excessivement plus rapide que les virgules flottantes.
apres au niveau de l'archi :
sur les archis MMXisante, le MMX permet de paralleliser en prime des operations a virgules fixes la ou il n'y a qu'une operation a virgule flottante
il peut etre interessant d'utiliser certaines propriétés des pentium ( non MMX aussi ) qui ont une deuxieme UAL plus restreinte pour paralleliser les operations.
je ne connais pas les specificités des Athlon, je ne peux donc en parler.
et enfin reste une version MP du calcul.
au niveau du code :
un jmp réinitie le bus une partie du processeur ( pipeline de traitement des instructions ) donc il faut etaler les boucles.
les conditions sont couteuses.
un shift ( multiplication ou division par deux ) est bien moins couteux en cycle qu'un mul sur des entiers
un and est mieux qu'un div pour obtenir le reste ( s'arranger avec 2^x-1 )
avoir une approche differentielle du calcul permet dans une certaine mesure de se passer aussi des multiplication et division
si tout cela est impossible, selon la precision demander une logarithme bien choisi peut aussi facilité les calculs
faut aussi penser à aligner les données en memoire
avec ca, tu peux avoir des gains assez phenomenaux ... mais il faut faire du benchmark et surtout une analyse sinon cela peut ne servir a rien.