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?
64-bit
operating-systems
32-bit
computer-architecture
cpu-architecture
Mehper C. Palavuzlar
la source
la source
Réponses:
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
int
type C. Cela est décidé par l’implémentation particulière du compilateur, et la plupart des compilateurs les plus populaires choisissentint
les 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.
la source
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 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 .
la source
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 .
la source
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.
la source
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:
la source
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.
la source
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
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
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
la source
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.
la source
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.
la source
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.
la source
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.)
la source
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
vmalloc()
dans le noyau Linux peut être plus importante en mode 64 bits.la source
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
la source
Citation de Microsoft.com:
la source
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.
la source
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.
la source
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
la source
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.
la source
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é.
la source