97 votes

Flotteur vs Double Performance

J'ai fait quelques synchronisation tests de lire quelques articles comme les ce l'un (dernier commentaire),et il semble que dans la Version de construire, float et double des valeurs de prendre la même quantité de temps de traitement.

Comment est-ce possible? Lorsque le flotteur est moins précis et plus petites par rapport aux valeurs doubles, comment le CLR obtenir des doubles dans le même temps de traitement?


Edit:

Réplique exacte de "doubles plus vite que les flotteurs en c"

164voto

P Daddy Points 14228

Sur les processeurs x86, au moins, float et double seront convertis à 10 octets réel par la FPU pour le traitement. La FPU ne dispose pas d'unités de traitement distinctes pour les différents les types à virgule flottante, il prend en charge.

Le vieux conseils qu' float plus rapide que de l' double appliqué il y a 100 ans, quand la plupart des Processeurs n'ont pas intégré dans les Unités de police constituées (et peu de gens avaient séparé FPU puces), de sorte que la plupart virgule flottante manipulation se fait dans le logiciel. Sur ces machines (qui était alimenté par de la vapeur générée par le puits de lave), il est plus rapide d'utiliser floats. Maintenant, le seul réel avantage d' floats, c'est qu'ils prennent moins de place (ce qui seules questions si vous avez des millions d'entre eux).

15voto

Bitterblue Points 1652

Repose sur un système 32 bits ou 64 bits . Si vous compilez à 64 bits double sera plus rapide. Compilé en 32 bits sur 64 bits (machine et OS) fait flotter autour de 30 % plus rapidement :

12voto

Mene Points 1896

J'ai eu un petit projet où j'ai utilisé de CUDA et je me souviens que le flotteur a été plus rapide que le double il y, trop. Pour une fois que le trafic entre l'Hôte et l'Appareil est plus faible (de l'Hôte est le CPU et le "normal" de la RAM et de l'Appareil est le GPU et de la RAM). Mais même si les données se trouve sur le Périphérique, tout le temps, il est plus lent. Je pense que j'ai lu quelque part que cela a changé récemment ou est censé changer avec la prochaine génération, mais je ne suis pas sûr.

Il semble donc que le GPU ne peuvent tout simplement pas gérer le double précision en mode natif dans ces cas, qui pourrait aussi expliquer pourquoi GLFloat est généralement utilisé plutôt que GLDouble.

(Comme je l'ai dit c'est seulement aussi loin que je me souvienne, juste tombé sur ce lors de la recherche pour flotter vs double sur un CPU.)

11voto

Cruachan Points 11749

Il y a toujours des cas où les flotteurs sont préféré cependant - avec OpenGL codage par exemple il est beaucoup plus courant d’utiliser le type de données GLFloat (généralement mappée directement à 16 bits float) tel qu’il est plus efficace sur la plupart des GPU de plus GLDouble

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