Systèmes 32 bits ou 64 bits


224

Quelles sont les différences entre les systèmes 32 bits et 64 bits?

Si vous avez utilisé les deux, quelles sortes de différences nettes avez-vous rencontrées?

Serait-il problématique d'utiliser des programmes 32 bits sur des systèmes 64 bits dans certains cas?


Il existe de nombreuses confusions ici et ailleurs sur le Web entre l'adressage physique (accès au RAM), le PEA affecte ceci, la carte mère l'affecte, et l'adressage logique (mémoire virtuelle par processus). Sur un système d'exploitation 32 bits, la mémoire virtuelle est limitée à 4 Go moins ce que le noyau réserve. Indépendamment de la RAM, vous pourriez avoir 0,1 Mo ou 8 Go de RAM et exactement 4 Go de mémoire virtuelle (mais certaines sont réservées par le noyau). PEA peut être utilisé pour avoir plus de RAM, mais ce n’est pas une réponse parfaite car le noyau NE PEUT PAS accéder à tout.
ctrl-alt-delor

Réponses:


264

Remarque: ces réponses s'appliquent aux processeurs PC standard x86 (Intel et AMD) et à Windows (généralement configurés pour les utilisateurs finaux). D'autres puces 32 bits ou 64 bits, d'autres systèmes d'exploitation et d'autres configurations de système d'exploitation peuvent avoir des compromis différents.

D'un point de vue technique, un système d'exploitation 64 bits vous offre:

  • Permet à des processus individuels de traiter chacun plus de 4 Go de RAM (en pratique, la plupart des systèmes d'exploitation 32 bits, mais pas tous, limitent également la RAM système totale utilisable à moins de 4 Go, et pas seulement le maximum par application).

  • Tous les pointeurs prennent 8 octets au lieu de 4 octets. L’effet sur l’utilisation de la mémoire RAM est minime (car il est peu probable qu’une application soit remplie de giga-octets de pointeurs), mais dans le pire des cas théoriques, le cache du processeur peut contenir autant de pointeurs que ce soit effectivement la moitié de la taille). Pour la plupart des applications, ce n'est pas une grosse affaire.

  • Il existe de nombreux autres registres de CPU à usage général en mode 64 bits. Les registres constituent la mémoire la plus rapide de tout votre système. Il n'y a que 8 en mode 32 bits et 16 registres généraux en mode 64 bits. Dans les applications de calcul scientifique que j'ai écrites, la recompilation en mode 64 bits a permis d'améliorer jusqu'à 30% les performances (mon application pourrait vraiment utiliser les registres supplémentaires).

  • La plupart des systèmes d'exploitation 32 bits ne permettent aux applications individuelles d'utiliser 2 Go de RAM, même si 4 Go sont installés. En effet, les 2 Go d'espace d'adressage restants sont réservés au partage de données entre les applications, avec le système d'exploitation et aux communications avec les pilotes. Windows et Linux vous permettront d'ajuster ce compromis à 3 Go pour les applications et à 1 Go en partage, mais cela peut poser des problèmes pour certaines applications qui n'attendent pas le changement. Je suppose également que cela pourrait paralyser une carte graphique dotée de 1 Go de RAM (mais je ne suis pas sûr). Un système d'exploitation 64 bits peut donner aux applications 32 bits individuelles plus près des 4 Go à jouer.

Du point de vue de l'utilisateur:

  • La vitesse d'application est généralement plus rapide pour une application 64 bits sous un système d'exploitation 64 bits par rapport à la version 32 bits de l'application sous un système d'exploitation 32 bits, mais la plupart des utilisateurs ne verront pas cette accélération. La plupart des applications destinées aux utilisateurs normaux ne tirent pas vraiment parti des registres supplémentaires ou les avantages sont compensés par de plus gros pointeurs remplissant le cache.

  • Si vous avez des applications de mémoire de porc (comme les éditeurs de photo, le traitement vidéo, l'informatique scientifique, etc.), si vous avez (ou pouvez acheter) plus de 3 Go de RAM, et vous pouvez obtenir une version 64 bits de l'application, le choix est facile: utilisez le système d'exploitation 64 bits.

  • Certains matériels ne disposent pas de pilotes 64 bits. Vérifiez votre carte mère, toutes les cartes plug-in et tous les périphériques USB avant de faire le changement. Notez que dans les débuts de Windows Vista, il y avait beaucoup de problèmes avec les pilotes. De nos jours, les choses vont généralement mieux.

  • Si vous exécutez tellement d'applications à la fois que vous manquez de mémoire vive (vous pouvez généralement le savoir, car votre ordinateur commence à devenir très lent et vous entendez le craquement du disque dur), vous voudrez alors d'un système d'exploitation 64 bits. (et suffisamment de RAM).

  • Vous pouvez exécuter des applications 32 bits (mais pas des pilotes) sous Windows 64 bits sans aucun problème. Le pire ralentissement que j’ai mesuré pour une application 32 bits sous Windows 64 bits est d’environ 5% (ce qui signifie que s’il fallait 60 secondes pour faire quelque chose sous Windows 32 bits, il fallait au plus 60 * 1,05 = 65 secondes avec même application 32 bits sous Windows 64 bits).

Ce que 32 bits ou 64 bits n'implique pas :

Sur les systèmes x86, 32 bits par rapport à 64 bits font directement référence à la taille des pointeurs. C'est tout.

  • Il ne fait pas référence à la taille du inttype C. Cela est décidé par l’implémentation particulière du compilateur, et la plupart des compilateurs les plus populaires choisissent intles systèmes 32 bits sur les systèmes 64 bits.

  • Il ne fait pas directement référence à la taille des registres normaux sans pointeur. Cependant, l'utilisation de registres arithmétiques 64 bits nécessite également que l'application et le système d'exploitation s'exécutent également en mode pointeur 64 bits.

  • Il ne fait pas directement référence à la taille du bus d'adresse physique. Par exemple, un système avec des lignes de cache d'une largeur de 64 bits et un maximum de 512 Go de mémoire n'a besoin que de 33 bits dans son bus d'adresses (c'est-à-dire log2(512*1024**3) - log2(64) = 33).

  • Il ne fait pas référence à la taille du bus de données physique: c'est davantage lié aux coûts de fabrication (nombre de broches dans le socket de l'unité centrale) et à la taille des lignes de cache.


8
Très bonne réponse. Surtout parce que vous avez noté qu'il n'y a pas réellement de limite de 4 Go de RAM, mais de limite d'utilisation de la mémoire. Juste pour votre information, je pense que vous devriez jeter un coup d'oeil à ce lien: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=FR
Breakthrough

8
Ce sont des applications qui ne fonctionnent pas sur les fenêtres 64 bits: applications 16 bits / celles qui utilisent des pilotes en mode noyau 32 bits ou non signés. C'est beaucoup pour un
passionné de

1
@flextendu, étant donné les exigences de performance de ces anciens programmes, vous pourriez certainement les exécuter sur une machine virtuelle. Avec VMware Player, Virtual PC et Virtual Box, il n’ya aucune raison de ne pas essayer l’un d’eux, si vous possédez une licence Windows 32 bits Spere. Si vous ne voulez pas vous embêter avec cela, ils fonctionneront probablement aussi en "Mode Windows XP".
Mark Booth

6
Les applications 32 bits BTW n’utiliseront pas plus de 2 Go de RAM à moins qu'un indicateur spécifique ne soit activé dans leur manifeste. Source: blogs.technet.com/b/markrussinovich/archive/2008/11/17/…
Hello71

Oui, je suis sûr que Hello71 a trouvé quelque chose d'assez important qui n'est pas couvert ici: la plupart des applications 32 bits ne tireront jamais directement profit de la RAM supplémentaire. Je pense que cela mérite d'être mentionné, non?
Django Reinhardt

107

Fondamentalement, vous pouvez tout faire à une plus grande échelle:

  1. RAM par système d'exploitation: limite de RAM de 4 Go sur x86 pour le système d'exploitation (la plupart du temps)
  2. RAM par processus: limite de RAM de 4 Go sur x86 pour les processus (toujours). Si vous pensez que cela n’est pas important, essayez d’exécuter une énorme application gourmande en bases de données MSSQL. Il utilisera plus de 4 Go si vous l’avez disponible et si vous fonctionnerez beaucoup mieux.
  3. Adresses: les adresses ont 64 bits au lieu de 32 bits, ce qui vous permet d’avoir de plus gros programmes qui utilisent plus de mémoire.
  4. Poignées disponibles pour les programmes: vous pouvez créer plus de poignées de fichier, processus, ... Par exemple, sur Windows x64, vous pouvez créer plus de 2 000 threads par processus, mais sur x86 plus près de quelques centaines.
  5. Programmes plus larges disponibles: à partir d'un x64, vous pouvez exécuter des programmes x86 et x64. (Exemple de windows: wow64, émulation windows32 sur windows64)
  6. Options d'émulation: à partir d'un x64, vous pouvez exécuter des machines virtuelles x86 et x64.
  7. Plus rapide: certains calculs sont plus rapides sur un processeur 64 bits
  8. Division de plusieurs ressources système: une grande quantité de mémoire RAM est très importante lorsque vous souhaitez exécuter au moins un ordinateur virtuel, ce qui divise les ressources de votre système.
  9. Programmes exclusifs disponibles: Plusieurs nouveaux programmes ne prennent en charge que x64. Exemple Exchange 2007.
  10. Futur x86 obsolète ?: Au fil du temps, de plus en plus de 64 bits seront utilisés et de plus en plus de x86 ne seront plus utilisés. Les vendeurs ne supporteront donc que de plus en plus les versions 64 bits.

Les 2 grands types d'architectures 64 bits sont les architectures x64 et IA64. Mais x64 est de loin le plus populaire.

x64 peut exécuter des commandes x86 ainsi que des commandes x64. IA64 exécute également des commandes x86, mais ne fait pas les extensions SSE. Il existe du matériel dédié sur Itanium pour l'exécution d'instructions x86; c'est un émulateur, mais dans le matériel.

Comme @Phil l'a mentionné, vous pouvez avoir une meilleure idée de la façon dont cela fonctionne ici .


1
Hum IA64 exécute des commandes x86. Cela ne fait pas les extensions SSE, cependant. Il existe du matériel dédié sur Itanium pour l'exécution d'instructions x86; c'est un émulateur, mais dans le matériel.
mardi

2
Il y a quelques années, Raymond Chen a écrit sur le fil 2000 "limit", et c'est plus ou moins une légende urbaine: blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
bk1e

Vote positif pour Arstechnica pour leur explication.
Avihu Turzion

2
La limite de RAM de 4 Go n'est pas tout à fait vraie (il s'agit plutôt d'une limite artificielle imposée aux systèmes Windows des utilisateurs à domicile), vérifiez PAE . Avec le matériel le plus récent, un noyau Linux PAE (qui est utilisé par défaut pour la version 32 bits) peut traiter correctement plus de 4 Go. La même chose s'applique à FreeBSD et NetBSD.
Izzy

Les systèmes 32 bits ne peuvent pas utiliser plus de 4 Go (1er point) à cause de cette "adresse" (3e point). Parce que le numéro 32 bits le plus élevé est 4.294.967.296 (= 4 Go). Donc, vos 1ère et 3ème puncts sont les mêmes. Vous pouvez supprimer le 3ème point. :)
Jet

46

L’impact le plus important que les gens remarqueront à l’heure actuelle est qu’un PC 32 bits ne peut traiter qu’un maximum de 4 Go de mémoire. Lorsque vous retirez de la mémoire allouée à d’autres utilisations par le système d’exploitation, votre PC n’affichera probablement qu’environ 3,25 Go de mémoire utilisable. Passez à 64 bits et cette limite disparaît.

Si votre développement est sérieux, cela pourrait être très important. Essayez d’exécuter plusieurs machines virtuelles et vous manquerez bientôt de mémoire. Les serveurs ont davantage tendance à avoir besoin de mémoire supplémentaire. Vous constaterez donc que l'utilisation de 64 bits est bien plus importante sur les serveurs que sur les ordinateurs de bureau. La loi de Moore garantit que nous aurons de plus en plus de mémoire sur les machines. Ainsi, à un moment donné, les ordinateurs de bureau basculeront également en 64 bits comme norme.

Pour une description beaucoup plus détaillée des différences entre les processeurs, consultez cet excellent article d' ArsTechnica .


7
La plate-forme 32 bits et la limitation de 4 Go sont un peu impropres et constituent (était) principalement un choix architectural / limite de conception du système d'exploitation. En réalité, les 4 Go à partir de 32 bits sont vraiment limités dans un espace de processus de VA. L'adresse physique prend en charge 36 bits sur les processeurs Intel 32 bits
Tall Jeff

1
Vous faites un bon point qui est certainement vrai. Mais l’impact dans le monde réel des utilisateurs de PC est que leur machine n’utilisera pas les 4 Go complets qu’ils ont payés. Mon père a eu ce problème et est toujours confus que les 4 Go qu'il a payés ne peuvent pas être pleinement utilisés.

2
Appréciez votre argument, mais essayez simplement de faire comprendre que le correctif ne concerne pas le processeur ou passe à 64 bits, il s’agit simplement d’une conception légèrement améliorée du système d’exploitation. Ceci est par exemple abordé dans les versions d'entreprise de Windows, même dans les versions 32 bits. Il permet de 64 Go de RAM.
Tall Jeff

Techniquement, la limite ne disparaît pas. Cela va plus loin qu'il n'est pas pratique / impossible d'installer autant de RAM sur une machine à tout moment au cours de la prochaine décennie.

Voir ma remarque sur PAE ci-dessus: la limite de 4 Go n'est pas vraie pour l'ensemble du système - elle ne s'applique qu'à des processus uniques (aucun processus ne peut accéder à 4 Go ou plus, mais l'ensemble du système, c'est-à-dire tous les processus ensemble, peut activer PAE ). Donc, à moins que des applications qui tirent profit d’accès à 4 Go ou plus (tels que des éditeurs / convertisseurs vidéo avec de gros fichiers vidéo) et 8 Go + installés, cela ne devrait pas faire beaucoup de différence si vous utilisez 32 bits ou 64 bits.
Izzy

31

Rien n'est gratuit: bien que les applications 64 bits puissent accéder à plus de mémoire que les applications 32 bits, l'inconvénient est qu'elles ont besoin de plus de mémoire. Tous les pointeurs qui nécessitaient auparavant 4 octets ont maintenant besoin de 8. Par exemple, la configuration requise par défaut dans Emacs est de 60% de mémoire supplémentaire pour une architecture 64 bits. Cette empreinte supplémentaire nuit aux performances à tous les niveaux de la hiérarchie de la mémoire: les gros exécutables prennent plus de temps à charger à partir du disque, les ensembles de travail plus volumineux entraînent plus de pagination et les objets plus volumineux signifient moins d'espace dans les caches de processeur. Si vous pensez à un processeur avec un cache L1 de 16 Ko, une application 32 bits peut fonctionner avec 4096 pointeurs avant d’être manquée et de passer au cache L2, mais une application 64 bits doit atteindre le cache L2 après seulement 2048 pointeurs.

Sur x64, cela est atténué par les autres améliorations architecturales telles que davantage de registres, mais sous PowerPC, si votre application ne peut pas utiliser la 4G, elle fonctionnera probablement plus vite sur "ppc" que sur "ppc64". Même sur Intel, il existe des charges de travail qui s'exécutent plus rapidement sur x86, et quelques-unes exécutent plus de 5% plus vite sur x64 que x86.


2
Cette réponse suggère que PowerPC64 n’est pas aussi performant que x86-64. La vérité est que powerpc64 n'a pas amélioré powerpc, car powerpc n'était pas en panne.
ctrl-alt-delor

3
Linux a maintenant une ABI x32, avec tous les avantages de x86-64 en termes de vitesse (plus de registres, ABI repensée), mais avec des pointeurs 32 bits. +1 pour signaler que les avantages du mode 64 bits ne proviennent pas de l'augmentation de la largeur réelle, mais de la possibilité de laisser tomber une grande partie des bagages qui bloquaient l'architecture. Les regs 64 bits ont de la valeur pour certaines applications, mais l’espace de pointeur 64 bits est moins souvent nécessaire.
Peter Cordes

19

Un système d'exploitation 64 bits peut utiliser plus de RAM. C'est à peu près tout, en pratique. Vista / 7 64 bits utilisent des fonctions de sécurité plus sophistiquées dans les endroits où ils placent des composants vitaux dans la RAM, mais ce n'est pas vraiment «perceptible» en tant que tel.

De ChrisInEdmonton:

Un système d'exploitation 32 bits sur un système ix86 avec PAE peut gérer jusqu'à 64 Go de RAM. Un système d'exploitation 64 bits sous x86-64 peut accéder à un maximum de 256 To d'espace d'adressage virtuel, bien que cela puisse être généré par les processeurs suivants, jusqu'à 16 EB. Notez que certains systèmes d'exploitation limitent davantage l'espace d'adressage et que la plupart des cartes mères ont des restrictions supplémentaires.


4
Pour un système d'exploitation, 32 bits par rapport à 64 bits SEULEMENT fait référence à la taille des pointeurs (ce que votre premier paragraphe décrit correctement). -1: Certains systèmes d'exploitation choisissent de verrouiller la taille entière par défaut à la taille du pointeur, mais ni Windows ni Linux ne le font. La précision mathématique entière est inchangée. NO OS largement utilisé modifie la précision en virgule flottante (comme le prétend le deuxième paragraphe). "float" ou "single" correspond à 32 bits, "double" à 64 bits, que le système d'exploitation utilise des pointeurs 32 bits ou 64 bits.
M. Fooz

Ah, je me suis clairement trompé, merci de
m'avoir

Aucun problème. -1 -> +1
M. Fooz

Cela vaut peut-être la peine d’éditer votre réponse pour indiquer la quantité de mémoire RAM accessible. Un système d'exploitation 32 bits sur un système ix86 avec PAE peut gérer jusqu'à 64 Go de RAM. Un système d'exploitation 64 bits sous x86-64 peut accéder à un maximum de 256 To d'espace d'adressage virtuel, bien que cela puisse être généré par les processeurs suivants, jusqu'à 16 EB. Notez que certains systèmes d'exploitation limitent davantage l'espace d'adressage et que la plupart des cartes mères ont des restrictions supplémentaires.
ChrisInEdmonton

Je voulais rester simple, car les chiffres sont généralement assez élevés pour être sans importance pour le moment, mais il n’est pas inutile de les coller maintenant.
Phoshi

14

Je ne suis pas sûr de pouvoir répondre à toutes vos questions sans écrire tout un essai (il y a toujours Google ...), mais vous n'avez pas besoin de concevoir vos applications différemment pour 64 bits. Je suppose que ce dont on parle, c’est que vous devez être conscient des choses telles que la taille des pointeurs n’est plus la même que celle d’intts. Et vous avez tout un tas de problèmes potentiels avec des hypothèses incorporées sur certains types de données sur quatre octets qui pourraient ne plus être vraies.

Cela risquerait de provoquer toutes sortes de problèmes dans votre application: sauvegarde / chargement à partir d'un fichier, itération de données, alignement des données, opérations bit à bit sur des données. Si vous essayez de porter une base de code existante ou que vous travaillez sur les deux, il est probable que vous aurez beaucoup de petits problèmes à résoudre.

Je pense que ceci est une question de mise en œuvre, plutôt que de conception. C'est-à-dire que je pense que le "design" de, disons, un paquet de retouche photo sera le même quelle que soit la taille des mots. Nous écrivons du code qui compile à la fois pour les versions 32 bits et 64 bits, et la conception ne diffère certainement pas entre les deux - c'est la même base de code.

Le gros problème fondamental de la technologie 64 bits réside dans le fait que vous avez accès à un espace d’adresses mémoire beaucoup plus important que la version 32 bits. Cela signifie que vous pouvez réellement mettre plus de 4 Go de mémoire dans votre ordinateur et que cela fasse réellement la différence.

Je suis sûr que d'autres réponses entreront dans les détails et les avantages plus que moi.

En termes de détection de la différence, il vous suffit de vérifier par programme la taille d'un pointeur (par exemple, sizeof (void *)). La réponse de 4 correspond à ses 32 bits et 8 à votre exécution dans un environnement 64 bits.


4
Si vous écrivez des programmes qui supposent que certains types de pointeurs ont la même taille que certains types d’intégraux, vous devez le faire. Cela est vrai depuis longtemps.
David Thornley

@ David: Vous avez absolument raison. Malheureusement, il existe une tonne de code qui fait exactement cela.

10

Un processus 32 bits a un espace d'adressage virtuel de 4 Go; cela pourrait être trop peu pour certaines applications. Une application 64 bits a un espace d'adressage pratiquement illimité (bien sûr, il est limité, mais vous n'atteindrez probablement pas cette limite).

Sur OSX, il y a d'autres avantages. Reportez-vous à l'article suivant . Pourquoi exécuter le noyau dans un espace d'adressage 64 bits (que votre application en exécute 64 ou 32) ou que votre application s'exécute dans un espace d'adressage 64 bits (alors que le noyau est toujours en version 32 bits) entraîne de bien meilleures performances. Pour résumer: si l’un est de 64 bits (noyau ou application, ou bien les deux bien sûr), le TLB ("translation lookaside buffer") ne doit pas être vidé chaque fois que vous passez du noyau à utiliser espace et retour (ce qui accélérera l’accès RAM).

Vous obtenez également des gains de performance lorsque vous travaillez avec des variables "long long int" (variables 64 bits comme uint64_t). Un processeur 32 bits peut additionner / diviser / soustraire / multiplier deux valeurs 64 bits, mais pas dans une opération matérielle unique. Au lieu de cela, il doit diviser cette opération en deux (ou plus) opérations 32 bits. Ainsi, une application qui fonctionne beaucoup avec des nombres 64 bits aura un gain de vitesse de pouvoir effectuer des calculs 64 bits directement dans le matériel.

Enfin, l’architecture x86-64 offre plus de registres que les architectures x86 classiques. Travailler avec des registres est beaucoup plus rapide que de travailler avec de la RAM et plus le nombre de registres du processeur est élevé, moins il est nécessaire de permuter les valeurs des registres en RAM et de revenir en registres.

Pour savoir si votre CPU peut fonctionner en mode 64 bits, vous pouvez consulter différentes variables sysctl. Par exemple, ouvrez un terminal et tapez

sysctl machdep.cpu.extfeatures

Si elle répertorie EM64T, votre CPU prend en charge un espace d'adressage de 64 bits selon la norme x86-64. Vous pouvez aussi chercher

sysctl hw.optional.x86_64

S'il indique 1 (vrai / activé), votre CPU prend en charge le mode x86-64 bits, s'il dit 0 (faux / désactivé), ce n'est pas le cas. Si le paramètre n'est pas trouvé du tout, considérez qu'il est faux.

Remarque: vous pouvez également extraire des variables sysctl à partir d'une application C native. Vous n'avez pas besoin d'utiliser l'outil de ligne de commande. Voir

man 3 sysctl

erreur: "machdep.cpu.extfeatures" est une clé inconnue

Je suppose qu’il ne s’appelle pas EM64T également, si vous n’avez pas la malchance d’avoir Intel.

9

Notez que addressspace peut être utilisé pour plus que de la mémoire (réelle). Il est également possible de mapper en mémoire des fichiers volumineux, ce qui peut améliorer les performances dans des configurations d’accès plus impaires, car la mise en cache de niveau de machine virtuelle plus puissante et plus efficace entre en jeu. Il est également prudent d’allouer des blocs de mémoire volumineux sur 64 bits, car susceptible de rencontrer une fragmentation de l’espace adresse qui ne lui permettra pas d’allouer un gros bloc.

Certaines des choses dites dans ce fil (comme le doublement des # registres) ne s'appliquent qu'à x86-> x86_64, pas à 64 bits en général. Tout comme le fait que sous x86_64, on garantisse SSE2, 686 opcodes et un moyen peu coûteux de faire de la PIC. Ces fonctionnalités ne concernent pas strictement les versions 64 bits, mais la suppression de l’héritage et la résolution des limitations connues de x86.

De plus, les gens citent souvent le doublement des registres comme étant la cause de l'accélération, alors que c'est plutôt l'utilisation par défaut de SSE2 qui fait l'affaire (accélération de la mémoire et autres fonctions similaires). Si vous activez le même ensemble pour x86, la différence est bien moindre. (*) (***)

N'oubliez pas non plus qu'une pénalité initiale est souvent impliquée, car la structure de données moyenne augmentera simplement parce que la taille d'un pointeur est plus grande. Cela a également des effets en cache, mais est plus significatif dans le fait que la moyenne memcpy () (ou quel que soit l'équivalent pour la copie de mémoire est dans votre langue) prendra plus de temps. Ce n'est que de l'ordre de quelques pour cent, mais les accélérations mentionnées ci-dessus le sont également.

Habituellement, le temps d’alignement est également plus important sur les architectures 64 bits (les enregistrements auparavant 32 bits deviennent souvent un mélange de valeurs 32 bits et 64 bits), ce qui fait exploser encore davantage les structures.

Globalement, mes tests simples indiquent qu’ils s’annuleront approximativement si les pilotes et les bibliothèques d’exécution sont totalement adaptés, ce qui ne donne aucune différence de vitesse significative pour l’application moyenne. Cependant, certaines applications peuvent devenir soudainement plus rapides (par exemple lorsqu'elles dépendent d'AES) ou plus lentes (une structure de données cruciale est constamment déplacée / scannée / parcourue et contient de nombreux pointeurs). Les tests portaient cependant sur Windows et l'optimalisation PIC n'était donc pas analysée.

Notez que la plupart des langages JIT-VM (Java, .NET) utilisent beaucoup plus de pointeurs en moyenne (en interne) que par exemple C ++. Leur utilisation de mémoire augmente probablement plus que pour le programme moyen, mais je n'ose pas assimiler cela directement à des effets de ralentissement (car ils sont vraiment complexes et géniaux et souvent difficiles à prédire sans mesurer)

Windows 64 bits utilise par défaut SSE2 pour la virgule flottante, ce qui semble accélérer les opérations simples et ralentir les opérations complexes (sin, cos, etc.).

(*) un fait peu connu est que le nombre de registres SSE double également en mode 64 bits

(**) Le Dr Dobbs a publié un bel article à ce sujet il y a quelques années.


8

Outre les problèmes évidents d'espace mémoire évoqués ici par la plupart des gens, je pense qu'il est intéressant d'examiner la notion d '"informatique large" dont Knuth (entre autres) a parlé récemment. La manipulation des bits permet de gagner en efficacité et les opérations sur les bits d'un mot de 64 bits vont beaucoup plus loin que celles d'un mot de 32 bits. En bref, vous pouvez faire plus d’opérations dans les registres sans avoir à frapper la mémoire, et du point de vue des performances, c’est une belle victoire.

Jetez un coup d’œil au volume 4, avant le fascicule 1A, pour quelques exemples des trucs sympas dont je parle.


7

Outre la possibilité d'adresser plus de mémoire, les x86_64 ont également plus de registres permettant au compilateur de générer du code plus efficace. L’amélioration des performances sera généralement assez faible cependant.

L'architecture x86_64 est rétro-compatible avec x86. Il est possible d'exécuter des systèmes d'exploitation 32 bits non modifiés. Il est également possible d'exécuter un logiciel 32 bits non modifié à partir d'un système d'exploitation 64 bits. Cela nécessitera cependant toutes les bibliothèques 32 bits habituelles. Ils peuvent avoir besoin d'être installés séparément.


Plus de registres, et une ABI repensée (passe fonction args dans le registre) est généralement une accélération de 10 à 15%, ce qui est plutôt correct. Il existe maintenant une ABI Linux x32 avec des pointeurs 32 bits, mais utilisant le mode long amd64 et les conventions d'appel args-in-registres. Vous bénéficiez donc de tous les avantages de l'amd64 en termes de vitesse, mais sans la charge supplémentaire liée à la nécessité de disposer de 64 bits pour chaque pointeur. C'est bon pour tout ce qui ne nécessite pas plus de 4 Go de mémoire (virtuelle).
Peter Cordes

6

Ce fil est déjà trop long, mais ...

La plupart des réponses mettent l'accent sur le fait que vous disposez d'un espace d'adressage 64 bits plus important, ce qui vous permet d'adresser davantage de mémoire. Pour environ 99% de toutes les applications, cela est totalement hors de propos. Gros cochon.

La vraie raison pour laquelle 64 bits est bon, ce n'est pas que les registres sont plus grands, mais ils sont deux fois plus nombreux! Cela signifie que le compilateur peut conserver davantage de vos valeurs dans le registre au lieu de les mettre en mémoire et de les charger dans quelques instructions plus tard. Si et quand un compilateur d'optimisation déroule vos boucles pour vous, il peut les dérouler environ deux fois plus, ce qui peut réellement améliorer les performances.

En outre, les conventions appelant / appelé de sous-programme pour 64 bits ont été définies pour conserver la plupart des paramètres transmis dans des registres au lieu que l'appelant les pousse sur la pile et que l'appelé les supprime.

Ainsi, une application C / C ++ "typique" obtiendra une amélioration de ses performances d'environ 10% ou 15% en recompilant simplement en 64 bits. (En supposant qu'une partie de l'application était liée au calcul. Bien sûr, cela n'est pas garanti; tous les ordinateurs attendent à la même vitesse. Votre kilométrage peut varier.)


Bien que le jeu d'instructions soit meilleur pour x64 que x86, ce sera généralement sans importance. Le code 64 bits peut également être plus lent que 32 bits, car les instructions peuvent être plus volumineuses, donc moins d’entre elles peuvent entrer dans le cache. (Le déroulement des boucles, BTW, est une technique très discutable de nos jours, car cela augmentera le nombre d'omissions manquantes dans le cache.) Là où je travaille, nous avons besoin de 64 bits pour un adressage mémoire plus important.
David Thornley

David, Les jeux d'instructions x64 et x86 sont presque identiques, à l'exception de la taille de l'opérande et de certains préfixes de registre. Avec IA64, ou Itanium, les codes 64 bits sont généralement 3x les codes x86 et accentuent le cache d'instructions exactement comme vous le dites. C'était un facteur important dans la raison pour laquelle cette architecture a lamentablement échoué. Mais avec x86, AMD64, EM64T, la croissance du code n’est généralement que de 10 à 20%.

Bien que x64 permette plus de registres adressables , je ne suis pas sûr de combien il augmente réellement le nombre de registres physiques disponibles - tous les processeurs x86 récents ont beaucoup (plus de 100) registres "fantômes", et utilisent "renommage de registre" + exécution spéculative pour permettre aux chemins de code indépendants de s'exécuter en parallèle dans une certaine mesure. En effet, si n chemins de code indépendants sont en cours d'exécution, il y a n fois plus de registres disponibles (jusqu'à ce que tous les registres shadow soient épuisés).

@j_random_hacker. Vous avez absolument raison de dire que ces astuces se déroulent sous l’architecture. Mais quel que soit le nombre de registres fantômes disponibles, si le programme doit fonctionner avec plus de 8 éléments de données et que seuls 8 registres sont exposés dans le jeu d'instructions, le compilateur doit générer les instructions de stockage / rechargement. Alors oui, X64 fait vraiment deux fois plus de registres "disponibles"

Mon expérience est que c'est beaucoup moins, et est compensé par le fait que le nombre de virages à déplacer est plus grand.
Marco van de Voort

6

Outre les avantages déjà mentionnés, voici quelques exemples concernant la sécurité:

  • Les processeurs x86_64 ont le bit no-execute dans leurs tables de page. Cela peut empêcher les exploits de sécurité causés par des dépassements de mémoire tampon. Les processeurs x86 32 bits ne prennent en charge cette fonctionnalité qu'en mode PAE.
  • Un plus grand espace d'adressage permet une meilleure randomisation du format d'espace d'adressage (ASLR), ce qui rend plus difficile l'exploitation des dépassements de mémoire tampon.
  • x86_64 caractéristiques du processeur, code indépendant de la position, c’est-à-dire accès aux données relatif au registre de pointeur d’instructions (RIP).

Un autre avantage qui me vient à l’esprit est que la quantité de mémoire contiguë virtuelle allouée vmalloc()dans le noyau Linux peut être plus importante en mode 64 bits.


5

Avec une machine 32 bits, vous n’avez que 4 294 967 295 octets de mémoire à adresser. Avec un ordinateur 64 bits, vous disposez de 1.84467441 × 10 ^ 19 octets de mémoire.

Wikipedia dit ceci

Les processeurs 64 bits calculent des tâches particulières (telles que les factorielles de grands chiffres) deux fois plus rapidement que dans des environnements 32 bits (cet exemple est dérivé de la comparaison entre une calculatrice Windows 32 bits et 64 bits; visible pour une factorielle de 100 000, par exemple. ). Cela donne une idée générale des possibilités théoriques des applications optimisées 64 bits.

Bien que les architectures 64 bits facilitent incontestablement l'utilisation de grands ensembles de données dans des applications telles que la vidéo numérique, l'informatique scientifique et les grandes bases de données, de nombreux débats ont eu lieu quant à savoir si leur mode de compatibilité 32 bits sera plus rapide que celui proposé à des prix comparables. Systèmes 32 bits pour d'autres tâches. Dans l'architecture x86-64 (AMD64), la plupart des applications et systèmes d'exploitation 32 bits peuvent s'exécuter en douceur sur du matériel 64 bits.

Les machines virtuelles Java 64 bits de Sun sont plus lentes à démarrer que leurs machines virtuelles 32 bits car Sun n'a implémenté le compilateur JIT "serveur" (C2) que pour les plates-formes 64 bits. [9] Le compilateur JIT "client" (C1), qui produit un code moins efficace mais se compile beaucoup plus rapidement, n’est pas disponible sur les plates-formes 64 bits.

Il convient de noter que la vitesse n'est pas le seul facteur à prendre en compte dans une comparaison de processeurs 32 bits et 64 bits. Des applications telles que le multitâche, les tests de contrainte et la mise en cluster (pour le calcul haute performance), HPC, peuvent être plus adaptées à une architecture 64 bits si le déploiement est correct. Pour cette raison, les clusters 64 bits ont été largement déployés dans de grandes organisations telles qu'IBM, HP et Microsoft.


2
La longueur du bus d'adresse physique est indépendante du fait qu'il s'agisse d'un processeur 32 ou 64 bits. Certains processeurs 32 bits possèdent des bus d'adresses supérieurs à 32 bits et aucun processeur 64 bits ne dispose d'un bus d'adresses 64 bits.

1
D'accord. En théorie, l'espace d'adressage est 2 ^ 64. En pratique, les fabricants de CPU utilisent des valeurs plus petites ... comme 2 ^ 40 ou 2 ^ 48.
Stu Thompson

5

Citation de Microsoft.com:

Dans le tableau suivant, les ressources maximales augmentées des ordinateurs basés sur les versions 64 bits de Windows et du processeur Intel 64 bits sont comparées aux ressources maximales 32 bits existantes.

MS-Table


2
Intéressant, mais il convient de noter que certaines versions de Windows 32 bits permettent davantage de mémoire PHYSICAL. Voir par exemple, en.wikipedia.org/wiki/…
ChrisInEdmonton

@ChrisInEdmonton, le système prend en charge plus de 4 Go ou de la mémoire, mais l'adresse de chaque processus est toujours limitée à 2 Go (3 Go avec une adresse étendue importante). Ainsi, même si votre système dispose de beaucoup de mémoire, cela n’aide toujours pas les programmes dont la mémoire est importante et les performances sont toujours inférieures à la version 64 bits. En outre, il a une plage d'adresses beaucoup plus petite pour ASLR et un fichier mappé en mémoire
phuclv

4

Kristof et Poshi ont exposé les principales différences techniques entre les systèmes d’exploitation 32 et 64 bits. L’expérience utilisateur est généralement très différente de la théorie. Les versions grand public 64 bits de Windows à ce jour (XP et Vista) présentent de grandes lacunes dans la prise en charge des pilotes. De nombreuses imprimantes, scanners et autres périphériques externes ne fonctionnent pas avec les versions 64 bits qui fonctionnent correctement avec les versions 32 bits. Ce sont des périphériques qui ont des pilotes 64 bits et qui ne fonctionneraient toujours pas. À ce stade, je vous recommanderais de rester à l'écart de tout produit grand public de type 64 bits de Microsoft jusqu'à ce que vous sachiez comment Windows 7 le gère, pour les vrais utilisateurs finaux, et pas seulement pour les plus gros geeks qui y ont actuellement accès. Donnez-lui au moins 6 mois et voyez ce que les gens vivent.


Il y a peut-être moins de pilotes, mais ce n'est pas si grave que ça en a l'air. J'utilise 64 bits depuis 2007 et je n'ai jamais eu de difficultés. Cela dit, je n'ai aucun appareil obscur ou ancien connecté.
RomanSt

1
Mon dernier en date, Vista 64 bits, était une toute nouvelle imprimante multifonctions HP, installée le mois dernier sur un système Dell âgé de 2 mois. Dell et HP ont tous deux abandonné et mon client m'a payé pour installer XP Pro et se débarrasser de Vista. Rien d'obscur à propos de l'une ou l'autre unité.
Kevin K

1
En règle générale, si vous achetez un ordinateur avec un système d'exploitation 64 bits, tout fonctionnera. Je ferais attention avant d'essayer de mettre à jour un ordinateur plus ancien, ou si j'avais une imprimante plus ancienne, ou si j'aimais mettre à niveau moi-même.
David Thornley

Le matériel souhaitant utiliser Works avec Windows ou certifié pour une utilisation avec les logos Windows doit offrir des pilotes 64 bits. Peut-être chercher ça la prochaine fois. Mais en effet, il arrive parfois que les fournisseurs ne se soucient pas du matériel grand public, car la plupart des consommateurs seront probablement encore en 32 bits.
Joey

2

Certains programmes de jeu utilisent une représentation bit-board . Les échecs, les dames et les othello, par exemple, ont une carte 8x8, c’est-à-dire 64 cases. Avoir au moins 64 bits dans un mot machine améliore donc considérablement les performances.

Je me souviens d’avoir lu un article sur un programme d’échecs dont la version 64 bits était presque deux fois plus rapide que la version 32 bits.


2

Les termes 32 bits et 64 bits désignent la manière dont un processeur d’ordinateur (également appelé CPU) traite les informations. Les versions 64 bits de Windows prennent en charge de grandes quantités de mémoire vive (RAM) plus efficacement que les systèmes 32 bits.

la vitesse peut être différente à mon avis


1

Un autre aspect de Microsoft Windows est qu’il existe depuis de nombreuses années l’API Win32 destinée aux systèmes d’exploitation 32 bits et non optimisée pour la compilation 64 bits. Lorsque j'écris des DLL pour mes applications, je compile généralement en Win32, qui n'est pas la version 64 bits. Avant Vista, il n’existait pas beaucoup de versions 64 bits réussies de Windows, où je travaille. Ma nouvelle machine dispose de 4 Go de RAM, mais j’utilise toujours Windows XP Pro 32 bits car c’est une version stable stable O / S par rapport à XP64 ou Vista.

Je pense que vous voudrez peut-être aussi regarder en arrière quand il y a eu le passage de 16 bits à 32 bits pour plus de détails sur les raisons pour lesquelles le passage peut être un gros problème pour certaines personnes. Les applications critiques qu'une entreprise peut exécuter sur un ordinateur de bureau, par exemple de petits logiciels de comptabilité, peuvent ne pas s'exécuter sur un système d'exploitation 64 bits. Il est donc nécessaire de conserver une machine héritée, virtuelle ou réelle.

Changer la taille d'une adresse peut avoir des conséquences importantes.


1

Dans la plupart des cas, vous ne remarquerez probablement pas de différence.

Vous devez disposer d'un processeur 64 bits (la plupart des processeurs au cours des dernières années) pour installer un système d'exploitation 64 bits.

Un système d'exploitation 64 bits présente quelques avantages:

  • Il vous permettra d’exécuter plus de 4 Go de RAM (le nombre maximal que vous pouvez adresser dans un système d’exploitation 32 bits est de 2 ^ 32 = 4 Go).
  • Il est utile pour travailler avec de grands ensembles de données (par exemple dans Excel) et certaines tâches de calcul intensives (par exemple, Photoshop et les gros fichiers).
  • Vous pouvez uniquement exécuter un programme 64 bits sur un système d'exploitation 64 bits, mais vous pouvez également exécuter un programme 32 bits sur les deux systèmes (gardez à l'esprit qu'un grand nombre de programmes sont les deux. Il n'y a donc pas trop de programmes 64 bits.) programmes).

Dans la plupart des scénarios, les programmes 64 bits utilisent un peu plus de mémoire, mais pour un ordinateur personnel, cela n'est généralement pas remarqué.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.