Je veux connaître les performances relatives d'une application C ++ normale dans les scénarios suivants: P>
En outre, quels facteurs devrais-je envisager lors de la modification / le développement de l'application pour qu'il fonctionne plus rapidement sur des processeurs 64 bits? P>
7 Réponses :
Les performances dépendront probablement de votre application et peuvent varier beaucoup, selon que vous utilisez ou non des bibliothèques qui ont des optimisations pour des environnements 64 bits. Si vous souhaitez compter sur votre vitesse, vous devriez vous concentrer sur l'amélioration de vos algorithmes plutôt que de considérer l'architecture de l'instruction. P>
En ce qui concerne la préparation / le développement de 64 bits ... La principale chose est de ne pas faire d'hypothèses en ce qui concerne les types et leurs tailles respectives. Si vous avez besoin d'un type avec une taille spécifique, utilisez les types définis dans << a href = "http://www.opengroup.org/onlinepubs/000095399/basedefs/stdint.h.html" rel. "NOFOollow NoreFerrer"> stdint.h >. Chaque fois que vous constatez des fonctions qui utilisent Taille_T B> ou PTRDIFF_T B>, vous devez utiliser les caractères numériques plutôt que dans un autre type. P>
Réponse courte: vous ne remarquerez probablement pas une grande partie de la différence. P>
Réponse plus longue: 64 bits X86 a plus de registres à usage général, ce qui donne au compilateur une occasion d'optimiser les variables locales dans des registres pour un accès plus rapide. Le compilateur peut également assumer des fonctionnalités plus modernes, par exemple. Ne pas avoir à optimiser le code pour un 386 et peut supposer que votre CPU a des trucs comme ESS au lieu de l'ancien FPU X87 pour les mathématiques de points flottants. Mais les pointeurs seront deux fois plus larges, ce qui est pire pour le cache. P>
+1 pour mentionner la longueur du pointeur. Cela peut faire une énorme différence si de grandes structures de pointeur sont utilisées.
Vous pouvez obtenir certaines de ces optimisations du compilateur (mathématiques SSE scalaire, etc.), même dans des constructions 32 bits en spécifiant certaines options de compilateur, comme / arcade: SSE2.
... ou pour les utilisateurs de la GCC, quelque chose comme -march =-core2 -mfpmath = sse code>
Bien sûr, vous pouvez l'activer sur un code 32 bits, mais vous ne pouvez pas supposer que tout le monde que vous envoyez le binaire a une CPU capable de cela. Avec AMD64, vous pouvez.
En général, vous ne trouverez pas de processeurs équivalents qui ne diffèrent que dans leur support pour une opération de 64 bits, il sera donc difficile de donner des comparaisons concrètes comprises entre 1) et 2). D'autre part, la différence entre le bâtiment pour 32 et 64 bits dépend entièrement de l'application. Une version 64 bits peut être légèrement plus lente ou légèrement plus rapide que la version 32 bits. Si votre application utilise beaucoup de variables temporaires, l'ensemble du jeu de registre d'augmentation du mode 64 bits peut faire une très grande différence de performance. p>
De l'expérience J'ai eu tendance à trouver un rééquilibrage de 64 bits d'une application 32 bits rend généralement environ 30% plus rapidement. C'est une figure approximative, mais elle contient un certain nombre d'applications que j'ai portées à 64 bits. Fondamentalement, c'est pour les raisons expliquées ci-dessus. Vous avez plus de registres qui est une dieu et permet d'échanger beaucoup moins de mémoire (qui sera probablement mis en cache de toute façon, ce qui rend la victoire assez petite). Certaines optimisations peuvent également être faites beaucoup plus facilement. Cependant, vous subissez le problème des plus grands pointeurs qui éliminent une partie du gain, sans oublier que faire un commutateur de contexte nécessite plus de mémoire à utiliser en raison du jeu de registres plus vaste. P>
Une optimisation des mains soigneusement en 64 bits peut fournir une énorme performance gagne, cependant. P>
Votre meilleur plan est de recompiler 64 bits et profiler. c'est-à-dire voir ce qui est meilleur. p>
Les programmes intensifs de la CPU peuvent être sensiblement plus rapides sur 64 bits. Le processeur a 16 au lieu de 8 registres à usage général disponibles qui sont également deux fois plus larges (64 au lieu de 32 bits). P>
Le nombre de registres pour les instructions SSE est également doublé de 8 à 16 qui aide aux applications multimédias ou à d'autres applications qui font de nombreux calculs à virgule flottante. P>
Pour plus de détails, voir x86-64 sur Wikipedia. P>
Une chose qui n'a pas encore été mentionnée est que des versions de 64 bits de systèmes d'exploitation tels que Windows et Linux utilisent une autre Convention d'appel pour des appels de fonction sur des systèmes 64 bits; Au lieu de passer des arguments sur la pile, les arguments sont (de préférence) ont été transmis dans des registres, ce qui est en principe plus rapide. Donc, le logiciel sera plus rapide car il y a moins d'appels de fonction. P>
Vous savez-vous quelque chose sur les fonctionnalités de bus de données de données multi-chaînes de MC, IMC et de nouvelles architectures X86_64? Au moins, MEMCY peut être optimisé plus rapidement si 64 bits en raison de l'utilisation de 64 bits bus et des registres indépendamment de la rafale concurrente. Au moins de nouvelles arches sont capables de préférer les données de plusieurs modules de mémoire dans le cache simultanément. et plus ... p>
Reportez-vous à code.google.com/p/eeffogpled/downloads/list , Nom du document Effodesign_MemTest.pdf pour certaines idées.
Avez-vous une exigence pour> 4G de mémoire? Exploiter les gobs de mémoire est vraiment la grande raison d'aller 64 bits. P>
Hmm. Voté sans commentaire. Bien que ce n'était pas une question très précise, il pourrait y avoir des informations intéressantes ici.