2010-09-06 5 views
1

J'espère que cela n'a pas été couvert auparavant, mais si je compile un programme 32 bits en C++ qui utilise des nombres à virgule flottante de 64 bits (double), et l'exécuter sur un 64 bit OS, faudra-t-il encore autant de cycles d'horloge pour déplacer le flottant 64 bits vers le processeur et le ramener vers le bélier comme sur un système d'exploitation 32 bits car il est compilé pour 32 bits. Ou cela prendrait-il moins de cycles d'horloge car le système d'exploitation se déplace en 64 bits à la fois, même si le programme est compilé en compilateur 32 bits. La raison pour laquelle je demande est parce que im utilisant VS express qui a 32 bits seulement, et je me demande si je peux utiliser 64 bits flottants tout en maintenant la vitesse ou si 32 bits flottants seront plus rapides, même si im en utilisant un système d'exploitation 64 bits, et croyez-moi , le programme que je veux écrire utilisera des dizaines de milliers de nombres à virgule flottante qui auront beaucoup de calculs et d'opérations sur bits (effectuées sur des réseaux de neurones).64 bits flottants compilés avec le compilateur 32 bits sur OS 64 bits

Merci.

Répondre

1

Le 32 vs 64 bits dont vous entendez parler est combien de bits sont dans l'adresse. Cela a peu à voir avec le nombre de bits utilisés pour représenter un double. En particulier, les programmes 32 bits représentent toujours un double en 64 bits, et les processeurs modernes ont un matériel qui peut traiter les flottants de 64 bits en mode natif (même s'ils ne peuvent traiter que des nombres entiers de 32 bits en mode natif). Donc, pour répondre à votre question, non, cela ne devrait pas avoir d'importance. La vitesse des opérations à virgule flottante ne doit pas dépendre de la taille 32 ou 64 de l'OS ou du compilateur.

+0

oh, merci, et si ce n'est pas beaucoup à demander, pourriez-vous me pointer dans la bonne direction, avec comme un livre ou quelque chose pour comprendre comment les données sont transférées entre le processeur et ram. – contrapsych

+0

Les données se trouvent entre le processeur et la RAM grâce à une multitude de caches ces jours-ci, consultez http://en.wikipedia.org/wiki/CPU_cache pour une introduction. –

+0

L'OP a demandé à propos de la vitesse de déplacement, pas de la vitesse mathématique en virgule flottante. Dans ce cas, si vous utilisez les registres normaux, le système 64 bits serait plus rapide, mais si les registres SSE sont utilisés, il n'y a pas de différence. –

0

Les doubles sont plus lents que les flottants en règle générale. A) il faut plus de temps pour que les données soient déplacées dans et hors de la mémoire. Les bus sont vraiment larges de nos jours, mais il faut encore plus de temps pour déplacer plus de données. B) Les doubles prennent plus de temps à calculer, car le matériel a tendance à fonctionner sur des groupes de bits à la fois en faisant des maths, pas tous en même temps.

C) Les flotteurs 4 byte ont eu plus d'utilisation et donc, plus de portes ont été jetés sur eux. Notez que SSE sur les puces x86 fonctionnent sur 4 flotteurs à la fois, généralement en 4 horloges par instruction, il y a quelques instructions SSE qui utilisent des doubles, mais seulement deux à la fois,

Cependant, si vous avez besoin de la précision supplémentaire, alors utiliser des doubles, et manger le coût de performance. Vous voudrez peut-être regarder dans GPGPU pour croquer des ensembles de données volumineux, seul le matériel le plus récent fait des doublons, mais leurs performances de GPU genearly float est exceptionnelle.

+0

Notez que c'est très, très douteux. Le matériel commun tel que x86 (x87) fonctionne sur les doubles, pas sur les flottants, et donc les doubles sont plus rapides. Bien sûr, SSE peut exécuter une instruction sur 4 flotteurs à la fois, contre 2 doubles. Mais si vous avez seulement un flotteur ou un double, peu importe si SSE est inactif à 75% ou 50%. D'un point de vue réaliste, utilisez double pour les calculs, mais stockez endresults comme 'float []'. – MSalters

+0

J'ai regardé dans CUDA. J'ai un GTS250, donc ça devrait plutôt bien se passer si je prends cette déroute. – contrapsych

Questions connexes