Question

Je suis au courant de certains des gains évidents de l'architecture x64 (adresses de RAM adressables plus, etc) ... mais:

  • Que faire si mon programme n'a pas besoin réel de fonctionner en mode natif 64 bits. Dois-je le porter de toute façon?
  • Y a-t-il des délais prévisibles pour mettre fin à l'appui 32 bits?
  • Est-ce que ma course d'application plus rapide / mieux / plus sûr que le code natif x64?
Était-ce utile?

La solution

x86-64 est un peu un cas particulier - pour de nombreuses architectures (.) Par exemple SPARC, compilation d'une application pour mode 64 bits ne donne pas un avantage à moins qu'il puisse utiliser avec profit plus de 4 Go de mémoire. Tout ce qu'il fait est d'augmenter la taille du binaire, qui peut réellement faire le code plus lent si son impact sur le comportement du cache.

Cependant, x86-64 vous donne plus qu'un simple espace d'adressage 64 bits et 64 registres entiers de bits - il a également double le nombre de registres à usage général, qui sur une architecture déficiente registre comme x86 peut entraîner une augmentation significative de la performance, avec juste une recompilation.

Il permet également le compilateur suppose que de nombreuses extensions, comme SSE et SSE2, sont présents, ce qui peut également améliorer de manière significative l'optimisation de code.

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

Cependant, si l'application ne sont pas des performances sensibles, alors rien de tout cela est vraiment important soit.

Autres conseils

L'un des avantages possible, je ne l'ai pas vu encore mentionné est qu'il pourrait découvrir des bugs cachés. Une fois que vous le port à 64 bits, un certain nombre de modifications. Les dimensions de certains types de données changent, les changements de convention d'appel, le mécanisme de gestion des exceptions (au moins sous Windows) les modifications.

Tout cela pourrait conduire à des bugs autrement cachés à la surface, ce qui signifie que vous pouvez les corriger.

En supposant que votre code est correct et sans bug, portage à 64 bits devrait en théorie être aussi simple que d'un commutateur de effleurant compilateur. Si cela échoue, il est parce que vous comptez sur les choses non garanties par la langue, et ainsi, ils sont des sources potentielles d'erreurs.

Voici ce que 64 bits fait pour vous:

  • 64 bits vous permet d'utiliser plus de mémoire que d'une application 32 bits.
  • 64 bits fait tous les pointeurs 64 bits, ce qui rend votre empreinte de code plus grande.
  • 64 bits vous donne plus entier et registres à virgule flottante, ce qui provoque des registres moins Renverser à la mémoire, ce qui devrait accélérer votre application un peu.
  • 64 bits peut prendre plus rapidement les opérations ALU 64-bit (seulement utile si vous utilisez des types de données 64 bits).
  • Vous n'obtenez aucun sécurité supplémentaire (une autre réponse de sécurité a mentionné, je ne suis pas au courant des avantages de ce genre).
  • Vous êtes limité à ne fonctionne que sur les systèmes d'exploitation 64 bits.

Je l'ai porté un certain nombre de applications de C et vu d'un speedup de 10% avec le code 64 bits (même système, même compilateur, le seul changement était un 32 bits vs mode compilateur 64 bits), mais la plupart des ces applications ont fait une bonne quantité de mathématiques 64 bits. YMMV.

Je vous préoccupez pas de prise en charge 32 bits en va dans un proche avenir.

(Sous la direction d'inclure des notes de commentaires - merci!)

Bien que son vrai que 32 bits sera autour pendant un certain temps sous une forme ou une autre, Windows Server 2008 R2 avec un des navires seulement SKU 64 bits. Je ne serais pas surpris de voir WOW64 comme option d'installation dès que Windows 8 comme plus de logiciels à 64 émigre bits. WOW64 est une installation, la mémoire et la performance au-dessus. La limite de RAM 3.5GB dans Windows 32 bits ainsi que l'augmentation des densités de RAM encouragera cette migration. Je préfère avoir plus de RAM que CPU ...

Embrassez 64 bits! Prenez le temps de rendre votre code 32 bits compatible 64 bits, est un doux euphémisme et simple. Pour les applications normales, les changements sont décrit avec plus de précision que des corrections de code. Pour les pilotes, le choix est: adapter ou perdre les utilisateurs. Lorsque le temps vient, vous prêt à déployer sur toute plate-forme avec une recompilation.

OMI le cache actuel des questions liées sont sans objet; l'amélioration de silicium dans ce domaine et une optimisation plus poussée de 64 bits sont à venir.

  1. Si votre programme n'a pas besoin de fonctionner en 64 bits, pourquoi voulez-vous? Si vous n'êtes pas la mémoire liée, et vous n'avez pas des jeux de données énormes, il n'y a pas de point. La nouvelle Miata n'a pas plus gros pneus, car il ne les n'a pas besoin.
  2. prise en charge 32 bits (même si seulement via l'émulation) prolongera passé depuis longtemps lorsque votre logiciel cesse d'être utile. Nous imitons encore Atari 2600, droit?
  3. Non, tous likelyhood, votre application sera plus lente en mode 64 bits, tout simplement parce que moins il s'adaptera dans le cache du processeur. Il est peut-être un peu plus sûr, mais de bons programmeurs ne ont pas besoin que Béquille:)

poste de Rico Mariani sur la raison pour laquelle Microsoft n'est pas portage Visual Studio à 64 bits résume vraiment haut Visual studio: Pourquoi est-il pas de version 64 bits? (Encore)

Cela dépend si votre code est une application ou une bibliothèque réutilisable. Pour une bibliothèque, gardez à l'esprit que le client de cette bibliothèque peut avoir de bonnes raisons pour fonctionner en mode 64 bits, donc vous devez vous assurer que votre scénario fonctionne. Cela peut également appliquer aux applications quand ils sont extensibles via des plugins.

Si vous n'avez pas besoin réel maintenant, et ne sera probablement jamais, pour le mode 64 bits, vous ne devriez pas faire le portage.

Si vous n'avez pas besoin maintenant, mais peut avoir un jour, vous devriez essayer d'estimer combien d'efforts il sera (par exemple en activant tous les avertissements du compilateur respectifs, et de tenter une compilation 64 bits). Attendez-vous que certaines choses ne sont pas négligeables, il sera utile de savoir comment les problèmes que vous rencontrerez probablement, et combien de temps il faudrait probablement les corriger.

Notez que le besoin peut également provenir de dépendances. Si votre programme est une bibliothèque (par exemple une DLL), il peut être nécessaire de le porter en mode 64 bits seulement parce que certaines applications hôte obtient porté

Pour un avenir prévisible, les applications 32 bits continueront à être pris en charge.

A moins qu'il ya une raison d'affaires pour aller à 64 bits, alors il n'y a pas vraiment de « besoin » pour soutenir 64 bits.

Cependant, il y a quelques bonnes raisons pour aller à 64 bits à un moment donné, en dehors de tous ceux que d'autres ont déjà dit.

  • Il devient plus difficile d'acheter des ordinateurs qui ne sont pas 64 bits. Même si 32 des applications de bits fonctionneront en mode de compatibilité pour les années à venir, tous les nouveaux PC vendus aujourd'hui ou dans l'avenir sont susceptibles d'être 64 bits. Si je possède un système d'exploitation 64 bits brillant Je ne veux pas vraiment exécuter « des applications de 32 bits qui puent » en mode de compatibilité!

  • Certaines choses ne fonctionnent pas correctement en mode comptibility - ce n'est pas la même chose que courir sur un système d'exploitation 32 bits sur le matériel 32 bits. J'ai rencontré quelques problèmes (par exemple accès au registre dans les ruches de registre 32/64 bits, des programmes qui échouent parce qu'ils ne sont pas dans le dossier qu'ils attendent d'être, etc.) lors de l'exécution en mode de compatibilité. Je me sens toujours nerveux au sujet de courir mon code en mode de compatibilité -. Il est tout simplement « pas la vraie chose », et il montre souvent

  • Si vous avez écrit votre code proprement, alors les chances sont que vous suffit de recompiler comme 64 bits exe et cela fonctionnera bien, donc il n'y a aucune raison de ne pas essayer.

  • le plus tôt vous construisez une version 64 bits native, plus il sera facile de garder fonctionner sur 64 bits que vous ajoutez de nouvelles fonctionnalités. C'est un bien meilleur plan que de continuer à se développer dans les âges sombres pour un autre « n » années, puis essayer de sauter dans la lumière.

  • Quand vous allez pour votre prochaine entrevue d'emploi, vous serez en mesure de dire que vous avez expeirence 64 bits et 32-> 64 expérience de portage.

Vous êtes déjà au courant des avantages x64 (surtout la taille de la RAM a augmenté) et vous n'êtes pas intéressé par un, alors ne pas le port d'un exécutable (.exe). Habituellement, les performances se dégradent après un port, principalement en raison de l'augmentation de la taille d'un module x64 sur x86: tous les pointeurs exigent maintenant double longueur, ce qui percole partout, y compris la taille du code (quelques sauts, appels de fonction, vtables, invoque virtuels, des symboles globaux etc). Est-ce pas une dégradation importante, mais elle est généralement mesurable (diminution de 3-5% de la vitesse, dépend de nombreux facteurs).

DLLs valent le portage parce que vous gagnez un nouveau « public » dans les applications x64 qui sont en mesure de consommer votre DLL.

Certains systèmes d'exploitation ou configurations ne sont pas capables d'exécuter des programmes 32 bits. Un Linux minimal sans 32 bits libc installé par exemple. Aussi je compile habituellement IIRC le support 32 bits du noyau.

Si ces systèmes d'exploitation ou configurations font partie de votre nombre d'utilisateurs potentiels alors oui, vous devriez le porter.

Si vous avez besoin de plus de vitesse, alors vous devriez également le port (comme d'autres l'ont dit, x86-64 a plusieurs registres et des instructions cool qui accélèrent vers le haut).

Ou, bien sûr, si vous voulez mmapper () ou la carte autrement un grand fichier ou beaucoup de mémoire. Puis 64 bits aide.

Par exemple, si vous aviez écrit le code 32 bits (GNU C / ++) comme ci-dessous EDIT: code de format

struct packet {
    unsigned long name_id;
    unsigned short age;
};

pour la messagerie réseau, vous devez faire le portage tout recompiler sur un système 64 bits, en raison de htonl / ntohl etc, la communication se déchirait dans le cas du peer réseau utilise toujours le système 32 bits (en utilisant la même code que le vôtre); vous connaissez sizeof (long) sera modifié de 32 à 64 aussi à vos côtés.

Voir plus de notes sur 32/64 http://code.google. com / p / effocore / téléchargements / liste , nom du document EffoCoreRef.pdf.

Il est assez peu probable que vous verriez un avantage à moins que vous avez besoin de mesures de sécurité extrêmes ou des quantités obscènes de RAM.

En fait, vous seriez savez probablement intuitivement si votre code est un bon candidat pour le portage 64 bits.

En ce qui concerne les délais. Je ne vous inquiétez pas, des choses comme 32bit seront de l'ordre pour un bon moment en mode natif et pour un avenir prévisible sous une autre forme.

Voir ma réponse à cette question ici. Je DÉNOUÉES ce poste en disant qu'un ordinateur 64 bits peut stocker et récupérer beaucoup plus d'informations qu'un ordinateur 32 bits. Pour la plupart des utilisateurs, cela ne signifie vraiment pas beaucoup parce que les choses comme la navigation sur le web, vérification du courrier électronique et de jouer Solitaire travailler confortablement dans les limites de l'adressage 32 bits. Lorsque la prestation 64 bits va vraiment briller est dans les zones où vous avez beaucoup de données, l'ordinateur devra désabonnement à travers. traitement du signal numérique, la photographie gigapixels et les jeux 3D avancés sont tous les domaines où leurs quantités massives de traitement de données constateraient un grand coup de pouce dans un environnement 64 bits.

En ce qui concerne votre code en cours d'exécution plus rapide / plus, il est tout à fait à votre code et les exigences imposées à ce sujet.

En ce qui concerne les problèmes de performance, cela dépend de votre programme réellement. Si votre programme est pointeur à forte intensité, le portage à 64 bits peut provoquer une dégradation de la performance, puisque pour le cache du processeur avec la même taille, chaque pointeur 64 bits occupent plus d'espace sur le cache et applications virtuelles à physique occupe également plus d'espace TLB . Dans le cas contraire, si votre programme est le pointeur à forte intensité non, sa performance bénéficiera de 64 bits.

performance est bien sûr pas la seule raison pour le portage, d'autres questions comme effort de portage, la programmation de temps devrait également être envisagée.

Je recommande le portage à 64 bits juste pour que vous utilisez « native » (Aussi, j'utiliser OpenBSD. Dans leur port AMD64, ils ne fournissent pas de support d'émulation 32 bits, tout doit être 64 bits)

En outre, stdint.h est votre meilleur ami! En portant votre application, vous devez apprendre à coder portably. Ce qui fera votre travail code quand nous avons 128 processeurs peu trop (dans quelques décennies on l'espère)

Je l'ai porté à 64 bits 2 ou 3 choses et développer dès maintenant pour les deux (ce qui est très facile si vous utilisez stdint.h) et sur mon premier projet de portage à 64 bits comme causé 2 ou 3 bugs à apparaître, mais était-ce. La majeure partie était une simple recompilation et maintenant je ne vous inquiétez pas sur les différences entre 32 et 64 bits lors de nouveau code parce que je viens coder automatiquement portably. (En utilisant intptr_t et size_t et autres)

Dans le cas d'un dll être appelé à partir d'un processus 64 bits puis le dll doivent être 64 bits aussi. Ensuite, il n'a pas d'importance si elle vaut la peine, vous avez pas le choix.

Une question à garder à l'esprit les bibliothèques de logiciels disponibles. Par exemple, ma société développe une application qui utilise plusieurs bibliothèques OpenGL, et nous le faisons sur le système d'exploitation openSUSE. Dans les anciennes versions du système d'exploitation, on peut télécharger une version 32 bits de ces bibliothèques sur l'architecture x86_64. Les versions plus récentes, cependant, ne sont pas. Il a rendu plus facile de compiler en mode 64 bits.

64 bits fonctionnera beaucoup plus rapide, lorsque les compilateurs 64 bits deviennent matures, mais quand il se produira, je ne sais pas

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top