53 votes

Les doubles sont-ils plus rapides que les flottants en C# ?

J'écris une application qui lit de grands tableaux de flottants et effectue quelques opérations simples avec eux. J'utilise des flottants parce que je pensais qu'ils seraient plus rapides que les doubles, mais après avoir fait quelques recherches, j'ai découvert qu'il y avait une certaine confusion à ce sujet. Quelqu'un peut-il m'éclairer à ce sujet ?

4voto

Dark Shikari Points 6178

Avec l'arithmétique de la FPU 387, les flottants ne sont plus rapides que les doubles pour certaines opérations itératives longues comme pow, log, etc (et seulement si le compilateur définit le mot de contrôle de la FPU de manière appropriée).

Avec l'arithmétique SSE emballée, cela fait cependant une grande différence.

3voto

CReeK Points 41

Matthijs,

Vous avez tort. Le 32 bits est bien plus efficace que le 16 bits - dans les processeurs modernes... Peut-être pas en termes de mémoire, mais en termes d'efficacité, le 32 bits est la voie à suivre.

Vous devriez vraiment mettre à jour votre professeur avec quelque chose de plus "actuel" ;)

Quoi qu'il en soit, pour répondre à la question, float et double ont exactement les mêmes performances, du moins sur mon intel i7 870 (en théorie).

Voici mes mesures :

(j'ai créé un "algorithme" que j'ai répété 10.000.000 fois, puis répété 300 fois, et j'ai obtenu une moyenne).

double

1 cœur = 990ms 4 cœurs = 340 ms 6 cœurs = 282 ms 8 cœurs = 250 ms

float

1 cœur = 992ms 4 cœurs = 340 ms 6 cœurs = 282 ms 8 cœurs = 250 ms

2voto

Tomas Pajonk Points 2400

J'ai toujours pensé que les processeurs étaient optimisés ou identiques, que ce soit en float ou en double. En cherchant des optimisations pour mes calculs intensifs (beaucoup de sorties d'une matrice, comparaisons de deux valeurs), j'ai découvert que les flottants sont environ 13 % plus rapides.

Cela m'a surpris, mais je suppose que c'est dû à la nature de mon problème. Je n'effectue pas de transferts entre float et double dans le cœur des opérations et mes calculs sont principalement des additions, des multiplications et des soustractions.

Ceci est sur mon i7 920. J'utilise un système d'exploitation 64 bits.

1voto

torial Points 9883

Cela indique que les flottants sont légèrement plus rapides que les doubles : http://www.herongyang.com/cs_b/performance.html

En général, chaque fois que vous effectuez une comparaison des performances, vous devez tenir compte des cas particuliers, par exemple si l'utilisation d'un type de produit nécessite des conversions supplémentaires ou un traitement des données. Ces éléments s'additionnent et peuvent contredire des repères génériques comme celui-ci.

1voto

Steven A. Lowe Points 40596

Les flottants devraient être plus rapides sur un système 32 bits, mais profilez le code pour vous assurer que vous optimisez la bonne chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X