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?
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 ont 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 plus de 4 Go de RAM (dans la pratique, la plupart des systèmes d’exploitation 32 bits, mais pas tous, limitent également le nombre total de systèmes utilisables RAM à moins de 4 Go, mais pas tous. juste le maximum par application).
Tous les pointeurs prennent 8 octets au lieu de 4 octets. L'effet sur RAM utilisation est minime (car vous ne disposerez probablement pas d'une application remplie de giga-octets de pointeurs), mais dans le pire des cas théoriques, le cache de la CPU pourra contenir 1/2 fois plus d'indicateurs (ce qui fait qu'il soit effectivement 1/2 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 pour le partage de données entre les applications, avec le système d'exploitation et pour la communication 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 problème 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 de 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 tant d'applications à la fois que vous manquez de RAM (vous pouvez généralement le savoir, car votre ordinateur commence à devenir très lent et vous entendez le disque dur craquer). voulez un OS 64 bits (et suffisamment de RAM).
Vous pouvez exécuter des applications 32 bits (mais pas des pilotes) dans 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).
Qu'est-ce que 32 bits ou 64 bits ne pas implique:
Sur les systèmes x86, 32-bit vs 64-bit directement fait référence à la taille des pointeurs. C'est tout.
Il ne fait pas référence à la taille du type C int
. C’est décidé par l’implémentation particulière du compilateur, et la plupart des compilateurs les plus populaires choisissent int
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.
Directement il ne fait pas 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'adresse (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.
Fondamentalement, vous pouvez tout faire à une plus grande échelle:
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 il 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 un aperçu plus approfondi de comment cela fonctionne ici .
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 plus de mémoire. Vous constaterez donc que l'utilisation de 64 bits est beaucoup 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 plus détaillée des différences entre les processeurs, consultez cet excellent article de ArsTechnica .
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. Cet encombrement 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 gros moins de place 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 manquante 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.
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 essentiels 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 TB 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.
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 si vous travaillez sur les deux, il est probable que vous aurez beaucoup de petits ennuis à résoudre.
Je pense que c'est un problème de mise en œuvre, plutôt que de conception. C'est à dire. Je pense que le "design" de, disons, un logiciel de retouche photo sera le même quelle que soit la taille du texte. 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'adressage mémoire beaucoup plus important que celui de 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 une 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 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.
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. Voir l'article article suivant , pourquoi avoir le noyau exécuté dans un espace d'adressage 64 bits (que votre application fonctionne sous 64 ou 32) ou de l'exécuter dans un espace d'adressage 64 bits (alors que le noyau est toujours à 32 bits) conduit à une bien meilleure performance. Pour résumer: si l’un ou l’autre 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 up RAM accès).
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 le gain de vitesse nécessaire pour 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 RAM et plus le processeur a de registres, moins il est nécessaire de permuter les valeurs de registre en RAM et de revenir en registre.
Pour savoir si votre CPU peut fonctionner en mode 64 bits, vous pouvez consulter différentes variables sysctl. Par exemple. ouvrir un terminal et taper
sysctl machdep.cpu.extfeatures
Si elle répertorie EM64T, votre CPU prend en charge un espace d'adressage 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 depuis une application C native, sans avoir besoin d'utiliser l'outil de ligne de commande. Voir
man 3 sysctl
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 plus puissante et efficace au niveau des blocs VM niveau. car heapmanager est moins susceptible de rencontrer une fragmentation d’espace d’adresse qui ne lui permettra pas d’allouer un gros bloc.
Certaines des choses dites dans ce fil (comme le doublement des registres #) s'appliquent uniquement à 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 probablement l'utilisation par défaut de SSE2 qui fait l'affaire (accélération de la mémoire et fonctions similaires). Si vous activez le même ensemble pour x86, la différence est bien moindre. (*) (***)
N'oubliez pas non plus qu'il y a souvent une pénalité initiale en cause, car la structure de données moyenne augmentera simplement parce que la taille d'un pointeur est plus grande. Cela a aussi 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 Btw, 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, en fonction de l'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'optimisation 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
(**) Il y a quelques années, le Dr Dobbs avait publié un article intéressant dans Nice.
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 beaucoup en efficacité. Les opérations au niveau des bits sur un mot 64 bits vont beaucoup plus loin que sur un mot 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.
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.
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 plus de mémoire. Pour environ 99% de toutes les applications, cela est totalement hors de propos. Gros cochon.
Le réel raison 64-bit est bon 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 à peu près 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 "typique" en C/C++ 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.)
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.
Avec une machine 32 bits, vous ne disposez que de 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.
Les processeurs 64 bits calculent des tâches particulières (telles que des 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, il y a eu de nombreuses discussions pour savoir si leur mode de compatibilité 32 bits serait plus rapide que celui proposé à des prix comparables. Systèmes 32 bits pour d'autres tâches. Dans l'architecture x86-64 (AMD64), la majorité des systèmes d'exploitation et des applications 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 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 mieux 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.
Outre les avantages déjà mentionnés, voici quelques exemples concernant la sécurité:
Un autre avantage qui me vient à l’esprit est que la quantité de mémoire contiguë virtuelle allouée avec vmalloc()
dans le noyau Linux peut être plus importante en mode 64 bits.
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 carrément 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 ils 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. Personnellement, je vais installer la version 32 bits de Windows 7, car ma version 64 bits de Vista est un grammage de papier onéreux que j’ai arrêté d’utiliser il ya très longtemps et que je suis retourné à XP 32 bits.
Certains programmes de jeu utilisent un tableau de bits représentation. Les échecs, les dames et les othello, par exemple, ont une carte 8x8, c’est-à-dire 64 cases. Avoir au moins 64 bits dans une machine Word améliore donc considérablement les performances.
Je me souviens d'avoir lu un programme sur les échecs dont la version 64 bits était presque deux fois plus rapide que la version 32 bits.
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 gèrent 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
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:
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é.
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 dans 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 32 bits XP Pro en tant que système d'exploitation stable connu 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. Les petits progiciels de comptabilité ne peuvent pas fonctionner sur un système d'exploitation 64 bits et 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.