Question

Quelle opération devrait être plus rapide sur un processeur x86 sous Linux et quelles sont les différences moyennes (en%):

unsigned int x, y, z;
x = y / z;

ou

double x, y, z;
x = y / z;

L'opération double sera exécutée par la FPU et la CPU peut continuer à d'autres commandes. Est-ce correct? Est-ce que cela dépend de drapeaux de compilation (j'utilise gcc avec le drapeau de -O3)?

Était-ce utile?

La solution

Si votre travail est intrinsèquement basée entier, les conversions int-flotteur et flotteur-int peut ruiner un avantage de performance. La conversion par défaut C (troncature) peut être particulièrement lente sur des puces Intel âgées.

En dehors de cela, il y a des problèmes avec exactitude votre idée et que

est probablement une raison suffisante de ne pas le faire.

Autres conseils

Une instruction de division à virgule flottante individuelle prendra plus de temps que d'un nombre entier d'une. Toutefois, si vous faites beaucoup d'affilée, ils atteignent à peu près le même taux, en raison de pipelining (sur un x86 moderne, au moins).

Oh, et oui, la CPU peut être obtenir avec d'autres opérations tandis que le FPU est occupé.

opérations Integral sont généralement plus rapides que leurs homologues à virgule flottante. La différence dépend surtout du matériel:. Certaines plates-formes ne sont même pas un FPU

Une telle opération simple ne devrait pas dépendre du tout sur votre système d'exploitation ou sur les drapeaux du compilateur: cela devrait être des instructions de montage droite avant

.

La meilleure façon de savoir combien toute opération prend est la vérification de votre plate-forme assemblage manuel ou l'exécution d'un indice de référence de.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top