44 votes

Portage du code C++ 32 bits vers 64 bits - cela vaut-il la peine ? Pourquoi ?

Je suis conscient de certains des gains évidents de l'architecture x64 (adresses RAM plus élevées, etc.)... mais.. :

  • Que faire si mon programme n'a pas vraiment besoin de fonctionner en mode natif 64 bits. Dois-je quand même le porter ?
  • Y a-t-il une échéance prévisible pour la fin du support 32 bits ?
  • Mon application fonctionnerait-elle plus rapidement / mieux / plus sûrement en tant que code natif x64 ?

65voto

caf Points 114951

X86-64 est un cas un peu particulier - pour de nombreuses architectures (par exemple SPARC), la compilation d'une application en mode 64 bits ne lui apporte aucun avantage à moins qu'elle ne puisse utiliser de manière rentable plus de 4 Go de mémoire. Tout ce que cela fait, c'est d'augmenter la taille du binaire, ce qui peut en fait rendre le code plus complexe. plus lent si cela a un impact sur le comportement du cache.

Cependant, la norme x86-64 ne se limite pas à un espace d'adressage de 64 bits et à des registres entiers de 64 bits. doubles le nombre de registres d'usage général, ce qui, sur une architecture déficiente en registres comme le x86, peut entraîner une augmentation significative des performances, avec une simple recompilation.

Il permet également au compilateur de supposer que de nombreuses extensions, comme SSE et SSE2, sont présentes, ce qui peut aussi améliorer considérablement l'optimisation du code.

Un autre avantage est que x86-64 ajoute l'adressage relatif aux PC, ce qui peut simplifier considérablement le code indépendant de la position.

Toutefois, si l'application n'est pas sensible aux performances, tout cela n'est pas vraiment important non plus.

27voto

jalf Points 142628

Un avantage possible que je n'ai pas encore vu mentionné est qu'il pourrait découvrir des bugs latents. Une fois que vous le portez en 64 bits, un certain nombre de changements sont effectués. La taille de certains types de données change, la convention d'appel change, le mécanisme de gestion des exceptions (au moins sous Windows) change.

Tout cela peut conduire à l'apparition de bogues autrement cachés, ce qui signifie que vous pouvez les corriger.

En supposant que votre code est correct et exempt de bogues, le portage vers 64 bits devrait en théorie être aussi simple que d'actionner un commutateur de compilateur. Si cela échoue, c'est parce que vous vous appuyez sur des choses qui ne sont pas garanties par le langage, et qui sont donc des sources potentielles d'erreurs.

17voto

svec Points 2050

Voici ce que le 64 bits fait pour vous :

  • Le 64 bits vous permet d'utiliser plus de mémoire qu'une application 32 bits.
  • En 64 bits, tous les pointeurs sont en 64 bits, ce qui augmente l'empreinte de votre code.
  • Le 64 bits vous donne plus de registres entiers et de registres à virgule flottante, ce qui entraîne moins de débordement de registres en mémoire, ce qui devrait accélérer quelque peu votre application.
  • 64-bit peut rendre les opérations ALU 64-bit plus rapides (utile uniquement si vous utilisez des types de données 64-bit).
  • Vous ne bénéficiez d'aucune sécurité supplémentaire (une autre réponse a mentionné la sécurité, je ne suis pas au courant de tels avantages).
  • Vous êtes limité à l'utilisation de systèmes d'exploitation 64 bits.

J'ai porté un certain nombre d'applications C++ et j'ai constaté une accélération d'environ 10 % avec du code 64 bits (même système, même compilateur, le seul changement était un mode de compilateur 32 bits contre 64 bits), mais la plupart de ces applications faisaient une bonne quantité de mathématiques 64 bits. YMMV.

Je ne m'inquiéterais pas de la disparition prochaine du support 32 bits.

(Modifié pour inclure les notes des commentaires - merci !)

5voto

hplbsh Points 1812

Même s'il est vrai que le 32 bits sera encore présent pendant un certain temps sous une forme ou une autre, Windows Server 2008 R2 n'est livré qu'avec un SKU 64 bits. Je ne serais pas surpris de voir WOW64 comme option d'installation dès Windows 8, à mesure que les logiciels migrent vers le 64 bits. WOW64 représente un surcoût en termes d'installation, de mémoire et de performances. La limite de 3,5 Go de RAM dans Windows 32 bits et l'augmentation des densités de RAM encourageront cette migration. Je préfère avoir plus de RAM que de CPU...

Adoptez le 64 bits ! Prenez le temps de rendre votre code 32 bits compatible avec le 64 bits, c'est une évidence et c'est simple. Pour les applications normales, les changements sont plus précisément décrits comme des corrections de code. Pour les pilotes, le choix est le suivant : s'adapter ou perdre des utilisateurs. Le moment venu, vous serez prêt à déployer sur n'importe quelle plate-forme en recompilant.

Les problèmes actuels liés à la mémoire cache sont discutables ; les améliorations du silicium dans ce domaine et l'optimisation 64 bits sont à venir.

3voto

IDisposable Points 1164
  1. Si votre programme n'a pas besoin de fonctionner sous 64 bits, pourquoi le feriez-vous ? Si vous n'êtes pas limité par la mémoire et que vous n'avez pas d'énormes ensembles de données, il n'y a aucun intérêt. La nouvelle Miata n'a pas de gros pneus, car elle n'en a pas besoin.
  2. Le support 32 bits (même si ce n'est que via l'émulation) s'étendra bien au-delà du moment où votre logiciel cessera d'être utile. Nous émulons encore des Atari 2600, non ?
  3. Non, en toute probabilité, votre application sera plus lente en mode 64 bits, simplement parce qu'elle tiendra moins dans le cache du processeur. Elle sera peut-être légèrement plus sûre, mais les bons codeurs n'ont pas besoin de cette béquille :)

Le billet de Rico Mariani sur la raison pour laquelle Microsoft n'est pas Le portage de Visual Studio en 64 bits résume bien la situation. Visual Studio : Pourquoi n'y a-t-il pas de version 64 bits ? (encore)

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