Pregunta

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

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

¿Fue útil?

Solución

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

En el nivel del procesador, hay algunas ventajas. Lo primero y más obvio es la expansión de la memoria virtual por proceso a un rango mucho más amplio de 48 bits. (64 está permitido en la arquitectura, pero no es obligatorio, si la memoria sirve). Eso permite que las aplicaciones usen mucha más memoria del sistema disponible para ellos, así como abrir mucho espacio para cosas como los archivos de memoria asignada que operan en Memoria virtual que no está vinculada a la memoria real. También abre una gran cantidad de espacio para que el SO en cuestión funcione, 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 problemas más grandes de IA-32, que es la falta absoluta de registros. De hecho, duplica 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 aumento en el costo de la memoria de 64 bits y se iguala).

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 con el viejo mundo, pero es un comienzo. Para empezar, no creo que Linux tenga los mismos problemas, y no tengo mucha perspectiva para ofrecer sobre sus ventajas de 64 bits.

Otros consejos

Como regla general, el desarrollo (o el 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 de repente dos veces más grandes, es mucho más probable que se descargue la memoria caché, y puede incluir menos datos en la RAM. Eso ralentiza considerablemente su 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 computación científica y en algunas situaciones de bases de datos, pero por lo demás, extremadamente raro. Por esta razón, Apple no recomienda compilar incondicionalmente las aplicaciones PowerPC en modo de 64 bits, por ejemplo: el costo debido a las faltas de memoria caché y la falta de memoria son lo suficientemente altos como para que el hecho de ir de 64 bits solo tenga sentido cuando realmente pueda aprovechar las ventajas de 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; corrige muchas, muchas deficiencias en la arquitectura x86, duplicando el número de GPR, simplificando las instrucciones para que sean más amigables con los diseños modernos de CPU, y más. Debido a esto, solo en plataformas AMD64 , con frecuencia verá un aumento sustancial en el rendimiento al ir a 64 bits.

Hay otra área en la que, en el desarrollo de software, tiene sentido ir a 64 bits: necesita ejecutar muchas máquinas virtuales. La ejecución de un par de máquinas virtuales puede superar fácilmente la barrera de memoria de 3 GB del sistema operativo, lo que hace que su uso 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.

(Como señalan los comentaristas, esta respuesta es un tanto genérica, algunos de estos puntos no se aplican a los chips intel / amd).

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

  • Con instrucciones de mayor ancho, obtendrás 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 ellas. la máquina, que generalmente es una victoria: así que ++ 64 bits aquí.

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

  • Además, necesita transferir estas instrucciones hacia y desde la CPU: las instrucciones de 64 bits son dos veces más grandes que las instrucciones de 32 bits, lo que significa más tráfico hacia y desde la memoria y los cachés. Las CPU están estructuradas para mejorar mucho este costo, pero es un ligero --64 bits aquí.

  • Por lo general, más registros están 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 ++ 64 bits aquí.

  • Y, como sin duda todos lo mencionarán, tienes la capacidad de dirigir más memoria.

  • (Casi lo olvidé) el nativo " long " o " int " El tamaño puede aumentar, dependiendo de la arquitectura, lo que significa que las estructuras de datos basadas en éstas se hacen más grandes. Mayor = más memoria para moverse, lo que significa una mayor posibilidad de espera en el traslado de datos: --64 bits si no tienes cuidado.

Dependiendo de su arquitectura, muchas otras preocupaciones pueden aplicarse también. Puede estar seguro de que los proveedores de procesadores y compiladores están trabajando sin descanso para reducir los " - " - < " ;, y aumente los " ++ " s.

Tengo esta base de datos de 5GByte que necesita conversión. En un sistema de 64 bits, solo puse todos los datos en colecciones. En el sistema de 32 bits, tuve que pensar en el orden en el cual 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, es una característica. Te muestra quién ha escrito un software limpio.

También hay algunas ventajas de seguridad al usar sistemas operativos de 64 bits. Ha habido algunos ataques de desbordamiento de búfer que evitan la aleatorización del diseño del 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.

Acelerará 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 que puede utilizar su sistema.

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

Mi propio presentimiento es que simplemente se trata de controladores menos optimizados o chipsets modificados.

También NTFS-3g fue divertido bajo 64 bits, mientras que funcionó bajo 32 bits (la misma distribución, la misma partición del kernel, simplemente se "colgó" en algunas circunstancias)

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top