2009-04-28 13 views
6

No estoy seguro de entenderlo correctamente: ¿un sistema operativo de 64 bits ejecuta/compila código más rápido que un sistema operativo de 32 bits en el mismo sistema?¿Hay alguna ventaja para desarrollar en un sistema operativo de 64 bits?

Estamos usando sistemas operativos de 64 bits donde estoy y parece que solo causa problemas de compatibilidad con el software heredado y propietario. (Estamos ejecutando Ubuntu 9.04 Jaunty amd64)

Respuesta

18

Restringiré esta respuesta a x86-32 (IA-32) frente a x86-64 (AMD64), ya que creo que esa es la pregunta que realmente está haciendo.

En el nivel del procesador, hay algunas ventajas. La primera y más obvia es la expansión de la memoria virtual por proceso a un rango mucho más amplio de 48 bits. (Se permite 64 en la arquitectura, pero no es obligatorio, si la memoria funciona). Esto permite que las aplicaciones utilicen una gran cantidad de la memoria del sistema disponible para ellos, así como la apertura de mucho espacio para cosas como archivos mapeados en memoria que operan en memoria virtual que no está vinculada a la memoria real. También abre un montón de espacio para que funcione el sistema operativo en cuestión, ya que no tiene que compartir su límite de 4 GB para sus datos. En resumen, las aplicaciones y el sistema operativo pueden hacer un mejor uso de los recursos de su máquina.

Además, la arquitectura AMD64 resuelve uno de los mayores problemas del IA-32, que es la absoluta falta de registros. De hecho, dobla los registros disponibles, lo que es una gran ganancia para algunos tipos de código. (En realidad es una ganancia para casi CUALQUIER código, pero algunas aplicaciones sufren el costo de memoria aumentado de 64 bits y se igualan).

En el lado de Windows, MS lo ha tomado como una oportunidad para romper un montón de problemas históricos de compatibilidad. No es una ruptura limpia del viejo mundo, pero es un comienzo. No creo que Linux tenga los mismos problemas para empezar, y no tengo mucha perspectiva para ofrecer sobre sus ventajas de 64 bits.

1

Agilizará la compilación si su proceso de compilación está ligado a la memoria y utiliza su sistema operativo de 64 bits para aumentar la cantidad de memoria utilizable por su sistema.

6

(Como los comentaristas en cuenta que esta respuesta es más bien genérica, algunos de estos puntos no se aplican a Intel/AMD fichas.)

La respuesta es: varía, por varias razones:

  • Con instrucciones de ancho mayor, obtendrá más expresividad (ya sea una mayor variedad de instrucciones o una mayor capacidad para codificar datos en esas instrucciones directamente), lo que puede significar un número reducido de instrucciones que fluyen a través de la máquina, que generalmente es un triunfo: así que ++ 64bit aquí.

  • Pero a veces las instrucciones más grandes pueden tomar más ciclos para decodificar y ejecutar, porque pueden ser más complejos. Entonces un posible --64bit aquí.

  • Además, debe transferir estas instrucciones hacia y desde la CPU: las instrucciones de 64 bits son el doble de grandes que las de 32 bits, lo que significa más tráfico hacia y desde la memoria y las memorias caché. Las CPU están estructuradas para mejorar una gran parte de este costo, pero aquí es un bit leve de 64 bits.

  • Más registros están generalmente disponibles en conjuntos de instrucciones más amplios, lo que causa menos tráfico de datos hacia y desde la pila o la memoria. Así que ++ 64bit aquí.

  • Y como todos sin duda van a mencionar, usted tiene la capacidad de direccionar más memoria.

  • (Casi se olvidó este) el tamaño nativo "largo" o "int" puede subir, dependiendo de la arquitectura, lo que significa que las estructuras de datos basadas en estos se vuelven más grandes. Más grande = más memoria para moverse, lo que significa una mayor espera posible en el movimiento de datos: - 64 bits si no tienes cuidado.

Según su arquitectura, se pueden aplicar muchas otras inquietudes. Puede estar seguro de que el procesador y los proveedores de compiladores están trabajando para eliminar los "-" s anteriores y aumentar los "++".

+3

Por supuesto, ninguno de los primeros tres puntos afecta a los sistemas basados ​​en x86, ya que x86 proporciona una codificación de instrucciones de longitud variable, con instrucciones entre 1 y 17 bytes. Podría ser incluso más de 17 hoy en día. – Promit

11

Como regla general, el desarrollo o uso de un sistema operativo de 64 bits, en cualquier contexto, será más lento que el mismo sistema operativo de 32 bits. Debido a que todos los punteros son dos veces más grandes, es mucho más probable que explote la memoria caché y que quepan menos datos en la memoria RAM. Eso ralentiza considerablemente tu aplicación. Normalmente solo usaría sistemas de 64 bits cuando sus aplicaciones necesiten abordar más de 2 a 3 GB de datos simultáneamente, algo muy común en la informática científica y en algunas situaciones de bases de datos, pero por lo demás es extremadamente raro. Esta es la razón por la cual Apple no aboga por la compilación incondicional de aplicaciones PowerPC en modo de 64 bits, por ejemplo: el costo debido a falta de memoria caché y la falta de memoria son lo suficientemente altos como para que 64 bits solo tenga sentido cuando realmente puede aprovechar el Espacio de 64 bits.

Pero x86 v. AMD64, que es lo que realmente estás preguntando (ya que estás hablando de Ubuntu), es una bestia muy especial. AMD64 no solo extiende todos los punteros a 64 bits; arregla muchas, muchas deficiencias en la arquitectura x86, doblando el número de GPR, simplificando las instrucciones para ser más amigable con los diseños de CPU modernos, y más. Debido a esto, en las plataformas AMD64 solo, con frecuencia verá un aumento sustancial en el rendimiento yendo a 64 bits.

Hay otra área donde, en el desarrollo de software, tiene sentido ir a 64 bits: necesita ejecutar muchas máquinas virtuales. Ejecutar un par de máquinas virtuales puede hacerte pasar fácilmente la barrera de memoria de 3 GB del sistema operativo, haciendo que usarlas sea muy doloroso. (Funcionará debido a una tecnología llamada PAE, o Extensiones de direccionamiento paginado, que Intel inventó para cerrar la brecha entre los sistemas de 32 bits y los sistemas de 64 bits, pero el resultado es lento, doloroso para trabajar como desarrollador, y no muy bien soportado en Windows.) Ir a un sistema operativo de 64 bits puede proporcionar enormes beneficios.

+0

Esto refleja lo que he escuchado de personas que miden el rendimiento para la vida. El tamaño extra de punteros y el menor número de éxitos de caché realmente impacta el rendimiento. Hay un pequeño pero notable éxito al ejecutar aplicaciones de 64 bits. –

+3

El límite es de 2 a 3 GB dependiendo del sistema operativo, no de 4. Recuerde que todos los sistemas operativos principales toman una porción de 1 o 2 GB de la parte superior de su espacio virtual para su propio uso. En cuanto a PowerPC, la arquitectura Power tiene algunos caprichos extraños en el modo de 64 bits que hacen que sea más rápido ejecutar en modo de 32 bits. No se trata solo de tamaños de puntero. – Promit

+0

@Promit Estás por supuesto correcto en los límites; Los he arreglado. Re. PowerPC difícil, aunque estoy de acuerdo en que la arquitectura tiene "peculiaridades", la situación era similar en SPARC v. UltraSPARC y MIPS de 32 bits v. 64 bits de MIPS. Demonios, yendo para otro lado, es por lo que ARM tiene THUMB, MIPS tiene MIPS16e, y Hitachi SuperH funciona sorprendentemente bien: soplar el caché realmente duele. –

3

Tengo esta base de datos de 5GBytes que necesita ser convertida. En un sistema de 64 bits, acabo de poner todos los datos en colecciones. En el sistema de 32 bits, tuve que pensar en el orden en que cargar y convertir. El problema no es el tiempo de ejecución, es el tiempo de ingeniería. Cambiar a 64 bits ahorra semanas de tiempo de desarrollo.

Los problemas de compatibilidad: eso no es un error, eso es una característica. Te muestra quién ha escrito un software limpio.

2

También existen algunas ventajas de seguridad al usar sistemas operativos de 64 bits. Se han producido algunos exploits de desbordamiento de búfer que eluden la asignación al azar del diseño de espacio de direcciones por fuerza bruta. En un sistema operativo de 64 bits, simplemente hay demasiadas direcciones para que este tipo de ataque tenga éxito.

1

Espero que sea un poco más lento, tuve esa experiencia con FC10. No tengo razones reales, pero definitivamente no es el problema de sizeof (puntero). (*)

Mi corazonada es que simplemente se trata de controladores menos optimizados o conjuntos de chips modificados.

también NTFS-3G fue divertido menores de 64 bits, mientras trabajaba bajo 32 bits (la misma distribución, mismo núcleo misma partición, simplemente "colgado" en algunas circunstancias)

(*) la mayor parte de compilación es disco enlazado, no vinculado a la CPU. Además, hay otras mejoras en la arquitectura x86_64 que cancelan ese hecho (mejor PIC, más regs, predeterminado en SSE2, predeterminado en 686 cmov). A menos que su aplicación no haga más que mover aleatoriamente pequeños bloques.

Cuestiones relacionadas