Sistemas de 32 bits vs. 64 bits.

219

¿Cuáles son las diferencias entre los sistemas de 32 y 64 bits?

Si ha usado ambos, ¿qué tipo de diferencias agudas ha experimentado?

¿Sería un problema utilizar programas de 32 bits en sistemas de 64 bits en algunos casos?

Mehper C. Palavuzlar
fuente
Hay muchas confusiones aquí, y en otras partes de la red, entre el direccionamiento físico (acceso a RAM), PEA afecta esto, la placa madre afecta esto y el direccionamiento lógico (memoria virtual por proceso). En un sistema operativo de 32 bits, la memoria virtual está limitada a 4 GB menos lo que el kernel reserva. Es independiente de la memoria RAM: puede tener 0,1 MB o 8 GB de memoria RAM y tendría exactamente 4 GB de memoria virtual (pero algunos reservados por kernel). PEA se puede usar para tener más RAM, pero no es una respuesta perfecta, ya que el kernel NO PUEDE acceder a todo.
ctrl-alt-delor

Respuestas:

262

Nota: estas respuestas se aplican a las CPU de PC estándar basadas en x86 (Intel y AMD) y Windows (como se configura normalmente para los usuarios finales). Otros chips de 32 o 64 bits, otros sistemas operativos y otras configuraciones de sistemas operativos pueden tener diferentes ventajas y desventajas.

Desde una perspectiva técnica, un sistema operativo de 64 bits le ofrece:

  • Permite que los procesos individuales aborden más de 4 GB de RAM cada uno (en la práctica, la mayoría, pero no todos los sistemas operativos de 32 bits, también limitan la RAM total del sistema utilizable a menos de 4 GB, no solo el máximo por aplicación).

  • Todos los punteros toman 8 bytes en lugar de 4 bytes. El efecto sobre el uso de RAM es mínimo (porque es probable que no tenga una aplicación llena de gigabytes de punteros), pero en el peor de los casos teóricos, esto puede hacer que la memoria caché de la CPU pueda contener 1/2 punteros (haciendo efectivamente será la mitad del tamaño). Para la mayoría de las aplicaciones, esto no es un gran problema.

  • Hay muchos más registros de CPU de propósito general en modo de 64 bits. Los registros son la memoria más rápida de todo su sistema. Solo hay 8 en modo de 32 bits y 16 registros de propósito general en modo de 64 bits. En las aplicaciones de computación científica que he escrito, he visto un aumento de rendimiento de hasta un 30% al compilar en modo de 64 bits (mi aplicación podría usar los registros adicionales).

  • La mayoría de los sistemas operativos de 32 bits realmente solo permiten que las aplicaciones individuales usen 2 GB de RAM, incluso si tiene 4 GB instalados. Esto se debe a que los otros 2 GB de espacio de direcciones están reservados para compartir datos entre aplicaciones, con el sistema operativo y para comunicarse con los controladores. Windows y Linux le permitirán ajustar este compromiso para que sea de 3 GB para aplicaciones y 1 GB compartido, pero esto puede causar problemas para algunas aplicaciones que no esperan el cambio. También creo que podría dañar una tarjeta gráfica que tiene 1 GB de RAM (pero no estoy seguro). Un sistema operativo de 64 bits puede ofrecer aplicaciones individuales de 32 bits más cercanas a los 4 GB completos para jugar.

Desde la perspectiva de un usuario:

  • La velocidad de la aplicación suele ser más rápida para una aplicación de 64 bits en un sistema operativo de 64 bits en comparación con la versión de 32 bits de la aplicación en un sistema operativo de 32 bits, pero la mayoría de los usuarios no verán esta velocidad. La mayoría de las aplicaciones para usuarios normales realmente no aprovechan los registros adicionales o los beneficios se ven compensados ​​por punteros más grandes que llenan el caché.

  • Si tiene alguna aplicación de memoria (como editores de fotos, procesamiento de video, computación científica, etc.), si tiene (o puede comprar) más de 3 GB de RAM, y puede obtener una versión de 64 bits de la aplicación, La elección es fácil: use el sistema operativo de 64 bits.

  • Algunos hardware no tiene controladores de 64 bits. Verifique su placa base, todas las tarjetas enchufables y todos los dispositivos USB antes de hacer el cambio. Tenga en cuenta que en los primeros días de Windows Vista, hubo muchos problemas con los controladores. Estos días las cosas son generalmente mejores.

  • Si ejecutas tantas aplicaciones a la vez que te estás quedando sin memoria RAM (por lo general, puedes decir esto porque tu computadora comienza a ser muy lenta y escuchas el crujido de la unidad de disco duro), entonces querrás un sistema operativo de 64 bits. (y suficiente RAM).

  • Puede ejecutar aplicaciones de 32 bits (pero no controladores) en Windows de 64 bits sin problemas. La peor ralentización que he medido para una aplicación de 32 bits en Windows de 64 bits es aproximadamente el 5% (lo que significa que si tomó 60 segundos hacer algo en Windows de 32 bits, tomó como máximo 60 * 1.05 = 65 segundos con la misma aplicación de 32 bits en Windows de 64 bits).

Lo que hace 32 bits contra 64 bits no implicar:

En sistemas x86, de 32 bits frente a 64 bits directamente se refiere al tamaño de los punteros. Eso es todo.

  • No se refiere al tamaño de la C int tipo. Eso se decide por la implementación particular del compilador, y la mayoría de los compiladores populares eligen 32 bits int en sistemas de 64 bits.

  • No es asi directamente consulte el tamaño de los registros normales que no son punteros. Sin embargo, el uso de registros aritméticos de 64 bits requiere que la aplicación y el sistema operativo también se ejecuten en el modo de puntero de 64 bits.

  • No es asi directamente Consulte el tamaño del bus de direcciones físicas. Por ejemplo, un sistema con líneas de caché de 64 bits de ancho y un máximo de 512GiB de memoria solo necesita 33 bits en su bus de direcciones (es decir, log2(512*1024**3) - log2(64) = 33 ).

  • No se refiere al tamaño del bus de datos físicos: está más relacionado con los costos de fabricación (número de pines en el zócalo de la CPU) y el tamaño de las líneas de caché.

Mr Fooz
fuente
8
Muy buena respuesta. Especialmente porque notó que en realidad no hay un límite de memoria RAM de 4 gb, sino un límite de uso de memoria de proceso. Solo para su información, creo que debería echar un vistazo a este enlace: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN
Breakthrough
8
Son aplicaciones que no funcionan en una ventana de 64 bits: aplicaciones de 16 bits / aquellas que usan controladores de modo kernel de 32 bits o sin signo. Eso es mucho para un adicto al software como yo ...
fluxtendu
1
@flextendu, dados los requisitos de rendimiento de esos programas antiguos, es casi seguro que pueda ejecutarlos en una máquina virtual. Con el reproductor VMware, Virtual PC y Virtual Box, no hay razón para no probar uno de ellos, si tiene una licencia de Windows de 32 bits. Si no quieres meterte con eso, es probable que funcionen también en "Modo Windows XP".
Mark Booth
6
Por cierto, las aplicaciones de 32 bits no utilizarán más de 2 GiB de RAM a menos que se habilite un indicador específico en su manifiesto. Fuente: blogs.technet.com/b/markrussinovich/archive/2008/11/17/…
Hello71
Sí, estoy seguro de que Hello71 se ha topado con algo muy importante que no se trata aquí: la mayoría de las aplicaciones de 32 bits nunca aprovecharán directamente la RAM adicional. Creo que vale la pena mencionarlo, ¿no?
Django Reinhardt
107

Básicamente puedes hacer todo a una escala mayor:

  1. RAM por sistema operativo: Límite de RAM de 4 GB en x86 para el sistema operativo (la mayoría de las veces)
  2. RAM por proceso: Límite de RAM de 4GB en x86 para procesos (siempre). Si cree que esto no es importante, intente ejecutar una gran aplicación de base de datos MSSQL. Utilizará & gt; 4GB en sí mismo si lo tienes disponible y corres mucho mejor.
  3. Direcciones: Las direcciones son de 64 bits en lugar de 32 bits, lo que le permite tener programas "más grandes" que utilizan más memoria.
  4. Manijas disponibles para programas: Puede crear más manejadores de archivos, procesos, ... Ejemplo en Windows x64 puede crear & gt; 2000 hilos por proceso, pero en x86 más cerca de unos pocos cientos.
  5. Programas más amplios disponibles: Desde un x64 puede ejecutar programas tanto x86 como x64. (Ejemplo de ventanas: wow64, windows 32 en la emulación de windows 64)
  6. Opciones de emulación: Desde un x64 puede ejecutar máquinas virtuales x86 y x64.
  7. Más rápido: Algunos cálculos son más rápidos en una CPU de 64 bits
  8. Dividiendo múltiples recursos del sistema: Una gran cantidad de memoria RAM es muy importante cuando desea ejecutar al menos una VM que divide los recursos de su sistema.
  9. Programas exclusivos disponibles: Varios programas nuevos solo soportan x64. Ejemplo de intercambio 2007.
  10. Futuro x86 obsoleto ?: Con el tiempo, se utilizarán cada vez más 64 bits y más y más x86 no se utilizarán. Por lo tanto, los proveedores solo admitirán 64 bits más y más.

Los 2 grandes tipos de arquitecturas de 64 bits son las arquitecturas x64 y IA64. Pero x64 es el más popular por mucho.

x64 puede ejecutar comandos x86 así como comandos x64. IA64 también ejecuta comandos x86, pero no hace extensiones SSE. Hay hardware dedicado en Itanium para ejecutar instrucciones x86; Es un emulador, pero en hardware.

Como mencionó @Phil, puede obtener una mirada más profunda de como funciona aqui .

Brian R. Bondy
fuente
1
Um IA64 ejecuta comandos x86. Sin embargo, no hace extensiones SSE. Hay hardware dedicado en Itanium para ejecutar instrucciones x86; Es un emulador, pero en hardware.
tzot
2
Hace unos años, Raymond Chen publicó sobre el "límite" de 2000 hilos, y es más o menos una leyenda urbana: blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
bk1e
Upvote para Arstechnica por su explicación.
Avihu Turzion
2
El límite de RAM de 4 GB no es del todo cierto (más bien es un límite artificial puesto en los sistemas domésticos de Windows), verifique PAE . Con la mayoría del hardware actualizado, un kernel PAE de Linux (que es el que se usa de forma predeterminada para 32 bits) puede ocuparse de más de 4 GB. Lo mismo se aplica a FreeBSD y NetBSD.
Izzy
Los sistemas de 32 bits no pueden usar más de 4 GB (primer punto) debido a esas "direcciones" (tercer punto). Porque el número más alto de 32 bits es 4.294.967.296 (= 4 GB). Así que tus puntos primero y tercero son los MISMOS. Puedes quitar el tercer punto. :)
Jet
46

El mayor impacto que las personas notarán en este momento es que una PC de 32 bits solo puede gestionar un máximo de 4 GB de memoria. Cuando saque la memoria asignada para otros usos por el sistema operativo, su PC probablemente solo mostrará alrededor de 3.25GB de memoria utilizable. Mover a 64 bits y este límite desaparece.

Si estás haciendo un desarrollo serio, entonces esto podría ser muy importante. Intenta ejecutar varias máquinas virtuales y pronto te quedarás sin memoria. Es más probable que los servidores necesiten la memoria adicional, por lo que encontrará que el uso de 64 bits es mucho mayor en los servidores que en los escritorios. La ley de Moore garantiza que tendremos cada vez más memoria en las máquinas, por lo que en algún punto, los equipos de escritorio también cambiarán a 64 bits como estándar.

Para obtener una descripción mucho más detallada de las diferencias de procesador, consulte este excelente artículo de ArsTechnica .


fuente
7
La plataforma de 32 bits y la limitación de 4 GB son de algún modo un nombre inapropiado y es (fue) principalmente una elección arquitectónica del sistema operativo / límite de diseño. Realmente, el 4GB de 32 bits está realmente en un límite en un espacio VA de proceso. La dirección física admite 36 bits en las CPU Intel de 32 bits
Tall Jeff
1
Usted hace un buen punto que es ciertamente cierto. Pero el impacto en el mundo real de los usuarios de PC es que la máquina no va a utilizar los 4 GB completos que pagaron. Mi padre tuvo este problema y todavía está confundido de que los 4GB que pagó no pueden usarse por completo.
2
Aprecie su punto, pero solo tratando de entender la idea de que la solución no está en el procesador o de 64 bits, solo se trata de un diseño de sistema operativo ligeramente mejorado. Esto se aborda, por ejemplo, en las versiones empresariales de Windows incluso en versiones de 32 bits. Permite 64GB de RAM.
Tall Jeff
Técnicamente, el límite no desaparece. Se mueve más allá hacia donde no es práctico / imposible instalar tanta RAM en una máquina en cualquier momento de la próxima década.
Ver mi comentario sobre PAE arriba: el límite de 4GB no es verdadero para todo el sistema, pero solo se aplica a procesos individuales (ningún proceso puede acceder a 4GB y hasta a sí mismo), pero todo el sistema, es decir, todos los procesos juntos, puede con PAE habilitado). Entonces, a menos que uno tenga aplicaciones que se beneficien de poder acceder a 4GB en adelante (como editores / convertidores de video con grandes archivos de video) y 8GB + instalado, no debería hacer mucha diferencia si usas 32bit o 64bit.
Izzy
31

Nada es gratis: aunque las aplicaciones de 64 bits. puede acceder a más memoria que a aplicaciones de 32 bits, la desventaja es que necesitar más memoria. Todos esos punteros que solían necesitar 4 bytes, ahora necesitan 8. Por ejemplo, el requisito predeterminado en Emacs es un 60% más de memoria cuando se construye para una arquitectura de 64 bits. Esta huella adicional afecta al rendimiento en todos los niveles de la jerarquía de la memoria: los ejecutables más grandes tardan más en cargarse desde el disco, los conjuntos de trabajo más grandes causan más paginación y los objetos más grandes significan menos ajuste en los cachés del procesador. Si piensa en una CPU con un caché L1 de 16K, una aplicación de 32 bits puede funcionar con 4096 punteros antes de que se pierda y vaya a la caché L2, pero una aplicación de 64 bits tiene que alcanzar la caché L2 solo 2048.

En x64, esto se ve mitigado por otras mejoras arquitectónicas como más registros, pero en PowerPC si su aplicación no puede usar & gt; 4G es probable que se ejecute más rápido en "ppc" que en "ppc64". Incluso en Intel hay cargas de trabajo que se ejecutan más rápido en x86, y pocas se ejecutan más de un 5% más rápido en x64 que en x86.

James
fuente
2
Esta respuesta sugiere que PowerPC64 no es tan bueno como x86-64. La verdad es que powerpc64 no mejoró powerpc, ya que powerpc no se rompió.
ctrl-alt-delor
3
Linux ahora tiene un ABI x32, con todos los beneficios de velocidad de x86-64 (más registros, ABI rediseñado), pero con punteros de 32 bits. +1 por señalar que los beneficios del modo de 64 bits no provienen del aumento de ancho real, sino de la posibilidad de dejar caer gran parte del equipaje que estaba frenando la arquitectura. Los registros de 64 bits tienen valor para algunas aplicaciones, pero el espacio de puntero de 64 bits es menos necesario.
Peter Cordes
19

Un sistema operativo de 64 bits puede utilizar más memoria RAM. Eso es todo, en la práctica. Vista / 7 de 64 bits usa funciones de seguridad más sofisticadas para ubicar componentes vitales en la RAM, pero eso no es realmente "notable" como tal.

De ChrisInEdmonton:

Un sistema operativo de 32 bits en un ix86   Sistema con PAE puede atender hasta 64   GB de RAM. Un sistema operativo de 64 bits.   en x86-64 puede acceder hasta 256 TB de   espacio de direcciones virtuales, aunque esto puede   plantearse en procesadores posteriores, hasta   a 16 EB. Tenga en cuenta que algunos operativos   Los sistemas limitan el espacio de direcciones   Además, y la mayoría de las placas base   tienen restricciones adicionales.

Phoshi
fuente
4
Para un sistema operativo, 32 bits frente a 64 bits SOLAMENTE se refiere al tamaño de los punteros (lo que se describe correctamente en el primer párrafo). -1: Algunos sistemas operativos eligen bloquear el tamaño de entero predeterminado al tamaño del puntero, pero ni Windows ni Linux lo hacen. La precisión matemática entera no se modifica. El sistema operativo NO ampliamente utilizado cambia la precisión del punto flotante (lo que afirma el segundo párrafo). "float" o "single" es de 32 bits, "double" es de 64 bits, independientemente de si el sistema operativo utiliza punteros de 32 bits o de 64 bits.
Mr Fooz
Ah, estaba claramente equivocado, gracias por aclarar eso :)
Phoshi
No hay problema. -1 - & gt; +1
Mr Fooz
Puede valer la pena editar su respuesta para indicar la cantidad de RAM que se puede acceder. Un sistema operativo de 32 bits en un sistema ix86 con PAE puede direccionar hasta 64 GB de RAM. Un sistema operativo de 64 bits en x86-64 puede acceder a un espacio de direcciones virtuales de hasta 256 TB, aunque esto se puede aumentar en procesadores posteriores, hasta 16 EB. Tenga en cuenta que algunos sistemas operativos limitan aún más el espacio de direcciones, y la mayoría de las placas madre tendrán restricciones adicionales.
ChrisInEdmonton
Quería que fuera sencillo, ya que los números son principalmente Lo suficientemente alto como para ser irrelevante en este momento, pero no puede hacer daño pegarlos ahora.
Phoshi
14

No estoy seguro de poder responder a todas sus preguntas sin escribir un ensayo completo (siempre hay Google ...), pero no necesita diseñar sus aplicaciones de manera diferente para 64 bits. Supongo que a lo que se hace referencia es que hay que tener en cuenta que los tamaños de los punteros ya no son del mismo tamaño que los ints. Y tiene una gran cantidad de problemas potenciales con suposiciones incorporadas sobre ciertos tipos de datos que tienen cuatro bytes de longitud que pueden no ser más verdaderos.

Es probable que esto haga tropezar todo tipo de cosas en su aplicación: todo desde guardar / cargar archivos, iterar a través de datos, alineación de datos, hasta operaciones bitwise de datos. Si tiene una base de código existente que está intentando portar, o trabaja en ambos, es probable que tenga un montón de pequeñas cosillas para trabajar.

Creo que este es un problema de implementación, en lugar de un diseño. Es decir. Creo que el "diseño" de, por ejemplo, un paquete de edición de fotos será el mismo, independientemente del tamaño de la palabra. Escribimos código que se compila en versiones de 32 bits y de 64 bits, y el diseño no difiere entre los dos, es el mismo código base.

El "gran problema" fundamental en 64 bits es que usted obtiene acceso a un espacio de direcciones de memoria mucho mayor que 32 bits. Esto significa que realmente puede inyectar más de 4Gb de memoria en su computadora y hacer que haga una diferencia.

Estoy seguro de que otras respuestas irán a los detalles y beneficios más que yo.

En cuanto a la detección de la diferencia, entonces, programáticamente, solo verifica el tamaño de un puntero (por ejemplo, sizeof (void *)). La respuesta de 4 significa sus 32 bits y 8 significa que se está ejecutando en un entorno de 64 bits.

Greg Whitfield
fuente
4
Si escribe programas que asuman casualmente que ciertos tipos de punteros son del mismo tamaño que ciertos tipos integrales, háganlo. Esto ha sido cierto durante mucho tiempo.
David Thornley
@David: Tienes toda la razón. Desafortunadamente, hay una tonelada de código que hace exactamente eso.
10

Un proceso de 32 bits tiene un espacio de direcciones virtuales de 4 GB; Esto podría ser muy poco para algunas aplicaciones. Una aplicación de 64 bits tiene un espacio de direcciones prácticamente ilimitado (por supuesto, es limitado, pero lo más probable es que no llegue a este límite).

En OSX hay otras ventajas. Ver el siguiente artículo ¿Por qué hacer que el kernel se ejecute en un espacio de direcciones de 64 bits (independientemente de si su aplicación se ejecuta en 64 o 32) o que su aplicación se ejecute en un espacio de direcciones de 64 bits (mientras que el kernel es de 32 bits) conduce a un rendimiento mucho mejor? Para resumir: si alguno de ellos es de 64 bits (kernel o aplicación, o ambos por supuesto), no se debe vaciar el TLB ("buffer de traducción al lado") siempre que cambie del kernel para usar espacio y retroceso (que acelerará acceso a la memoria RAM).

También tiene mejoras de rendimiento cuando trabaja con variables "long long int" (variables de 64 bits como uint64_t). Una CPU de 32 bits puede agregar / dividir / restar / multiplicar dos valores de 64 bits, pero no en una sola operación de hardware. En su lugar, necesita dividir esta operación en dos (o más) operaciones de 32 bits. Por lo tanto, una aplicación que funciona mucho con números de 64 bits tendrá una ganancia de velocidad de poder hacer matemáticas de 64 bits directamente en hardware.

Por último, pero no menos importante, la arquitectura x86-64 ofrece más registros que las arquitecturas clásicas x86. Trabajar con registros es mucho más rápido que trabajar con RAM y, cuanto más registros tiene la CPU, es menos frecuente que cambie los valores de registro a RAM y luego a registros.

Para saber si su CPU puede ejecutarse en modo de 64 bits, puede mirar varias variables de sysctl. P.ej. abre una terminal y escribe

sysctl machdep.cpu.extfeatures

Si enumera EM64T, su CPU admite espacio de direcciones de 64 bits según el estándar x86-64. También puedes buscar

sysctl hw.optional.x86_64

Si dice 1 (verdadero / habilitado), su CPU admite el modo de Bit x86-64, si dice 0 (falso / deshabilitado), no lo hace. Si no se encuentra la configuración, considere que es falso.

Nota: también puede obtener variables de sysctl desde una aplicación C nativa, sin necesidad de usar la herramienta de línea de comandos. Ver

man 3 sysctl
Mecki
fuente
error: "machdep.cpu.extfeatures" es una clave desconocida
Supongo que no se llama EM64T, también, si no eres lo suficientemente desafortunado como para tener inteligencia.
9

Tenga en cuenta que el espacio de direcciones se puede utilizar para más memoria (real). También se puede asignar memoria a los archivos grandes, lo que puede mejorar el rendimiento en patrones de acceso más impares debido a que se activa el almacenamiento en caché a nivel de VM a nivel de bloque más potente y eficiente. Es probable que encuentre una fragmentación en el espacio de direcciones que no le permita asignar un bloque grande.

Algunas de las cosas que se dicen en este hilo (como la duplicación de # registros) solo se aplican a x86- & gt; x86_64, no a 64 bits en general. Al igual que el hecho de que bajo x86_64 uno garantizado tiene SSE2, 686 códigos de operación y una forma barata de hacer PIC. Estas características no son estrictamente de 64 bits, sino de eliminar el legado y remediar las limitaciones conocidas de x86

Además, con bastante frecuencia, la gente apunta a que la duplicación de registros sea la causa de la aceleración, mientras que es más probable que el uso predeterminado de SSE2 sea el truco (aceleración de memcpy y funciones similares). Si habilitas el mismo conjunto para x86, la diferencia es mucho menor. (*) (***)

También tenga en cuenta que a menudo hay una penalización inicial porque la estructura de datos promedio aumentará simplemente porque el tamaño del puntero es mayor. Esto también tiene efectos de caché, pero es más perceptible en el hecho de que el promedio de memcpy () (o lo que sea el equivalente para la copia de memoria en su idioma) tomará más tiempo. Esto es solo en la magnitud de unos pocos por ciento por cierto, pero las aceleraciones mencionadas anteriormente también están en esa magnitud.

Por lo general, la sobrecarga de alineación también es mayor en las arquitecturas de 64 bits (los registros de 32 bits anteriormente solo se convierten a menudo en una combinación de valores de 32 y 64 bits), lo que hace que las estructuras exploten aún más.

En general, mis pruebas simples indican que se cancelarán aproximadamente entre sí, si los controladores y las bibliotecas de tiempo de ejecución se han adaptado por completo, sin una diferencia de velocidad significativa para la aplicación promedio. Sin embargo, algunas aplicaciones pueden volverse repentinamente más rápidas (por ejemplo, al depender de AES) o más lentas (la estructura de datos crucial se mueve constantemente / escanea / recorre y contiene muchos punteros). Sin embargo, las pruebas se realizaron en Windows, por lo que la optimización de PIC no se comparó.

Tenga en cuenta que la mayoría de los lenguajes JIT-VM (Java, .NET) usan una cantidad significativamente mayor de punteros en promedio (internamente) que, por ejemplo, C ++. Probablemente su uso de memoria aumente más que para el programa promedio, pero no me atrevo a igualar eso directamente a los efectos de ralentización (ya que son bestias realmente complejas y funky y, a menudo, difíciles de predecir sin medir)

(*) un hecho poco conocido es que el número de registros SSE también se duplica en el modo de 64 bits

(**) El Dr. Dobbs tenía un buen artículo al respecto hace unos años.

Marco van de Voort
fuente
8

Además de los problemas obvios de espacio de memoria que la mayoría de la gente está mencionando aquí, creo que vale la pena considerar la noción de "computación de palabra amplia" de la que Knuth (entre otros) ha estado hablando últimamente. Se pueden obtener muchas eficiencias a través de la manipulación de bits, y las operaciones a nivel de bits en una palabra de 64 bits van mucho más allá que en una palabra de 32 bits. En resumen, puede hacer más operaciones en los registros sin tener que golpear la memoria, y desde una perspectiva de rendimiento, es una gran ganancia.

Echa un vistazo a Volume 4, pre-Fascicle 1A para ver algunos ejemplos de los trucos geniales de los que estoy hablando.


fuente
7

Aparte de la capacidad de direccionar más memoria, x86_64 también tiene más registros que permiten al compilador generar código más eficiente. Sin embargo, la mejora del rendimiento suele ser bastante pequeña.

La arquitectura x86_64 es compatible hacia atrás con x86. Es posible ejecutar sistemas operativos de 32 bits sin modificar. También es posible ejecutar software de 32 bits sin modificar desde un sistema operativo de 64 bits. Sin embargo, eso requerirá todas las bibliotecas de 32 bits habituales. Es posible que deban instalarse por separado.

Kristof Provost
fuente
Más registros, y un ABI rediseñado (función de paso args en el registro) suele ser una aceleración del 10 al 15%, lo cual es bastante decente. Ahora hay una ABI de Linux x32 con punteros de 32 bits, pero con el uso del modo largo amd64 y las convenciones de llamada args-in-registers. Así que tiene todos los beneficios de velocidad de amd64, pero sin la sobrecarga de necesitar 64bits para cada puntero. Es bueno para todo lo que no necesita & gt; 4GB de memoria (virtual).
Peter Cordes
6

Este hilo ya es demasiado largo, pero ...

La mayoría de las respuestas se centran en el hecho de que tiene un espacio de direcciones de 64 bits más grande, por lo que puede dirigir más memoria. Para aproximadamente el 99% de todas las aplicaciones, esto es totalmente irrelevante. Grito grande

los real razón de 64 bits es bueno es no que los registros son más grandes, pero hay el doble de ellos! Eso significa que el compilador puede mantener más de sus valores en el registro en lugar de pasarlos a la memoria y volver a cargarlos en unas pocas instrucciones más adelante. Si y cuando un compilador optimizado está desenrollando sus bucles por usted, puede desenrollarlos aproximadamente el doble, lo que realmente puede ayudar al rendimiento.

Además, las convenciones de la persona que llama / llamada de la subrutina para 64 bits se han definido para mantener la mayoría de los parámetros pasados ​​en los registros en lugar de que la persona que llama los inserte en la pila y la persona que los llama los saque.

Por lo tanto, una aplicación "típica" de C / C ++ obtendrá aproximadamente un 10% o un 15% de mejora en el rendimiento con solo la compilación de 64 bits. (Suponiendo que una parte de la aplicación estuviera vinculada a un proceso informático. Por supuesto, esto no está garantizado; todas las computadoras esperan la misma velocidad. Su millaje puede variar).

Die in Sente
fuente
Si bien el conjunto de instrucciones es mejor para x64 que para x86, normalmente no será importante. El código de 64 bits puede ser más lento que el de 32 bits, también, porque las instrucciones pueden aumentar de tamaño, por lo que menos de ellos caben en el caché. (Desenrollar bucles, por cierto, es una técnica muy cuestionable en la actualidad, ya que aumentará el número de fallos de caché). Donde trabajo, necesitamos 64 bits para aumentar el direccionamiento de la memoria.
David Thornley
David, los conjuntos de instrucciones x64 y x86 son casi idénticos, excepto por el tamaño del operando y algunos prefijos de registro. Con IA64, también conocido como Itanium, también conocido como Itanic, los códigos de 64 bits suelen ser 3 veces los códigos x86, y enfatizan la memoria caché de instrucciones exactamente como lo dices. Ese fue un factor importante en la razón por la que esa arquitectura fracasó miserablemente. Pero con x86, también conocido como AMD64, también conocido como EM64T, el crecimiento del código suele ser solo del 10-20%.
Aunque x64 hace más registros. direccionable , No estoy seguro de cuánto aumenta realmente el número de registros físicos disponible - todos los procesadores x86 recientes tienen muchos registros "sombra" (& gt; 100), y usan el "cambio de nombre de registro" + ejecución especulativa para permitir que las rutas de código independientes se ejecuten en paralelo hasta cierto punto. En efecto, si se ejecutan n rutas de código independientes, n veces más registros estarán disponibles (hasta que se agoten todos los registros ocultos).
@j_random_hacker. Tienes toda la razón en que esos trucos se desarrollan debajo de la arquitectura. Pero no importa cuántos registros sombra estén disponibles, si el programa necesita trabajar con más de 8 elementos de datos y solo 8 registros están expuestos en el conjunto de instrucciones, el compilador debe generar las instrucciones de almacenamiento / recarga. Así que sí, X64 realmente hace el doble de registros "disponibles"
Mi experiencia es que esto es mucho menor, y se ve contrarrestado por el hecho de que el promedio de memblock a mover es más grande
Marco van de Voort
5

Con una máquina de 32 bits, solo tiene 4,294,967,295 bytes de memoria por dirección. Con una máquina de 64 bits tiene 1.84467441 × 10 ^ 19 bytes de memoria.

Wikipedia dice esto

Los procesadores de 64 bits calculan tareas particulares (como factoriales de grandes cifras) el doble de rápido que trabajar en entornos de 32 bits (el ejemplo dado se deriva de la comparación entre la calculadora de Windows de 32 bits y 64 bits; notable para factorial de, por ejemplo, 100 000 ). Esto da una sensación general de las posibilidades teóricas de las aplicaciones optimizadas de 64 bits.

Si bien las arquitecturas de 64 bits facilitan indiscutiblemente el trabajo con grandes conjuntos de datos en aplicaciones como video digital, computación científica y grandes bases de datos, ha habido un considerable debate sobre si ellos o sus modos de compatibilidad de 32 bits serán más rápidos que los de precio comparable. Sistemas de 32 bits para otras tareas. En la arquitectura x86-64 (AMD64), la mayoría de los sistemas operativos y aplicaciones de 32 bits pueden ejecutarse sin problemas en el hardware de 64 bits.

Las máquinas virtuales Java de 64 bits de Sun tienen un inicio más lento que las máquinas virtuales de 32 bits porque Sun solo ha implementado el compilador JIT (C2) "servidor" para plataformas de 64 bits. [9] El compilador JIT "cliente" (C1), que produce un código menos eficiente pero que se compila mucho más rápido, no está disponible en plataformas de 64 bits.

Cabe señalar que la velocidad no es el único factor a considerar en una comparación de procesadores de 32 y 64 bits. Las aplicaciones como multitarea, pruebas de estrés y agrupación en clústeres (para computación de alto rendimiento), HPC, pueden ser más adecuadas para una arquitectura de 64 bits si se implementa correctamente. Los clústeres de 64 bits se han implementado ampliamente en grandes organizaciones como IBM, HP y Microsoft, por este motivo.

Mark Cidade
fuente
2
La longitud del bus de direcciones físicas es independiente de si se trata de un procesador de 32 o 64 bits. Algunos procesadores de 32 bits tienen buses de direcciones de más de 32 bits, y ningún procesador de 64 bits tiene un bus de direcciones de 64 bits.
1
Convenido. En teoría, el espacio de direcciones es 2 ^ 64. En la práctica, los fabricantes de CPU están usando valores más pequeños ... como 2 ^ 40 o 2 ^ 48.
Stu Thompson
5

Aparte de las ventajas ya mencionadas, aquí hay algunas más sobre seguridad:

  • x86_64 cpus tienen el bit de no ejecución en sus tablas de páginas. Es decir. Esto puede evitar explotaciones de seguridad causadas por desbordamientos de búfer. Las CPUs de 32 bits x86 solo admiten esta función en el modo PAE.
  • Un mayor espacio de direcciones permite una mejor aleatorización del diseño del espacio de direcciones (ASLR), lo que dificulta la explotación de los sobrecargas de búfer.
  • x86_64 cpus función código independiente de la posición, es decir, acceso a datos en relación con el registro de puntero de instrucción (RIP).

Otra ventaja que viene a la mente es que la cantidad de memoria contigua virtual asignada con vmalloc() en el kernel de Linux puede ser mayor en modo de 64 bits.

knweiss
fuente
5

Cita de Microsoft.com:

En la siguiente tabla, el aumento   recursos máximos de las computadoras que   se basan en versiones de 64 bits de   Windows y el procesador Intel de 64 bits.   Se comparan con los existentes de 32 bits.   máximos de recursos.

MS-Table

Mehper C. Palavuzlar
fuente
2
Interesante, pero vale la pena señalar que algunas versiones de Windows de 32 bits permiten más memoria FÍSICA. Ver por ejemplo, en.wikipedia.org/wiki/…
ChrisInEdmonton
@ChrisInEdmonton el sistema admite más de 4GB o memoria, pero la dirección para cada proceso todavía está limitada a 2GB (3GB con dirección de gran tamaño). Entonces, incluso si su sistema tiene mucha memoria, todavía no ayuda a los programas que tienen mucha memoria, y el rendimiento aún está por detrás de la versión de 64 bits. Además, tiene un rango de direcciones mucho más pequeño para ASLR y para el archivo asignado en memoria
phuclv
4

Kristof y Poshi han declarado que las principales diferencias técnicas entre el sistema operativo de 32 y 64 bits es que la experiencia del usuario suele ser muy diferente a la teoría. Las versiones de 64 bits para el consumidor de Windows hasta la fecha (XP y Vista) tienen grandes agujeros en el soporte de sus controladores. He tenido muchas impresoras, escáneres y otros dispositivos externos que no funcionan con las versiones de 64 bits que funcionan bien con las versiones de 32 bits. Estos son dispositivos que tenían controladores de 64 bits y aún no funcionan. En este punto, le recomendaría que se mantenga alejado de cualquier cosa basada en el consumidor que sea de 64 bits de Microsoft hasta que sepa cómo Windows 7 se encarga de esto, de los usuarios finales reales, no solo de los geeks uber que tienen acceso actualmente. Dale al menos 6 meses y mira lo que la gente está experimentando. Personalmente, instalaré la versión de 32 bits de Windows 7, ya que mis versiones de Vista de 64 bits son un peso de papel costoso que dejé de usar hace eones y volví a XP de 32 bits.

Kevin K
fuente
Puede haber menos controladores, pero en realidad no es tan malo como lo hace sonar. He estado corriendo 64 bits desde 2007 y nunca he tenido ninguna dificultad. Dicho esto, no tengo ningún dispositivo antiguo o oscuro conectado.
RomanSt
1
Mi más reciente con Vista 64 bit fue una impresora multifunción HP completamente nueva el mes pasado en un sistema Dell de 2 meses. Tanto Dell como HP se dieron por vencidos, y mi cliente me pagó para instalar XP Pro y deshacerme de Vista. Nada oscuro sobre ninguna de las unidades.
Kevin K
1
Normalmente, si compra una computadora con un sistema operativo de 64 bits, todo funcionará. Tendré cuidado antes de intentar actualizar una computadora más antigua, o si tuviera una impresora más antigua, o si quisiera actualizar por mi cuenta.
David Thornley
Hardware que quiere blandir el Funciona con Windows o Certificado para su uso con Windows logos debe oferta de controladores de 64 bits. Tal vez busque eso la próxima vez. Pero, de hecho, a veces los proveedores no se preocupan por el hardware del consumidor, ya que la mayoría de los consumidores probablemente todavía estarán en 32 bits.
Joey
2

Algunos programas de juego usan un tablero de bits representación. Ajedrez, damas y othello, por ejemplo, tienen un tablero de 8x8, es decir, 64 cuadrados, por lo que tener al menos 64 bits en una palabra de máquina ayuda significativamente al rendimiento.

Recuerdo haber leído sobre un programa de ajedrez cuya construcción de 64 bits era casi el doble de rápida que la versión de 32 bits.

Hugh Allen
fuente
2

El término 32 bits y 64 bits se refiere a la forma en que un procesador de computadora (también llamado CPU) maneja la información. Las versiones de Windows de 64 bits manejan grandes cantidades de memoria de acceso aleatorio (RAM) de manera más efectiva que los sistemas de 32 bits.

la velocidad puede ser diferente en mi opinión

LestiWulan
fuente
1

Otro punto a este respecto con respecto a Microsoft Windows es que durante muchos años ha habido la API Win32, que está diseñada para sistemas operativos de 32 bits y no está optimizada para la compilación de 64 bits. Cuando escribo algunos archivos DLL para mis aplicaciones, generalmente compilo en Win32, que no es la versión de 64 bits de las cosas. Antes de Vista, no ha habido muchas versiones exitosas de Windows de 64 bits. Creo que en el lugar donde trabajo, mi nueva máquina tiene 4 GB de RAM, pero sigo usando Windows XP Pro de 32 bits, ya que se conoce como O / S relativa a XP64 o Vista.

Creo que también querrá mirar hacia atrás cuando hubo un cambio de 16 bits a 32 bits para obtener más detalles sobre por qué el cambio puede ser una gran cosa para algunas personas. Las aplicaciones de misión crítica que una empresa puede ejecutar en un escritorio, por ejemplo. Es posible que los pequeños paquetes de contabilidad no se ejecuten en un sistema operativo de 64 bits y, por lo tanto, existe la necesidad de mantener una máquina heredada, virtual o real.

Cambiar el tamaño de una dirección puede tener grandes ramificaciones y repercusiones.

JB King
fuente
1

Para la mayoría de los propósitos prácticos, probablemente no notará una diferencia.

Debe tener una CPU de 64 bits (la mayoría de las CPU en los últimos años) para instalar un sistema operativo de 64 bits.

Hay algunas ventajas para un sistema operativo de 64 bits:

  • Le permitirá ejecutar más de 4GB de RAM (el número máximo que puede abordar en un sistema operativo de 32 bits es 2 ^ 32 = 4GB)
  • Es útil para trabajar con grandes conjuntos de datos (por ejemplo, en Excel) y ciertas tareas de computación intensiva (por ejemplo, Photoshop y archivos grandes)
  • Solo puede ejecutar un programa de 64 bits en un sistema operativo de 64 bits, pero puede ejecutar un programa de 32 bits en ambos (tenga en cuenta que muchos programas vienen con ambos, por lo que no hay demasiados solo 64 bits) programas).

En la mayoría de los escenarios, los programas de 64 bits usan un poco más de memoria, pero para una computadora personal, esto generalmente no se nota.

cyberx86
fuente