x64 ventaja son software sobre sistemas sistema saber que puede programa procesador pasa operativos operativo nada mejor los instalo instalar entre diferencia desventajas descargar como cambiar arquitectura performance 64bit 32-bit 128bit

performance - ventaja - ¿Son los programas de 64 bits más grandes y más rápidos que las versiones de 32 bits?



ventaja de un procesador de 64 bits sobre uno de 32 bits (8)

Supongo que me estoy enfocando en x86, pero en general estoy interesado en el cambio de 32 a 64 bits.

Lógicamente, puedo ver que las constantes y punteros, en algunos casos, serán más grandes, por lo que es probable que los programas sean más grandes. Y el deseo de asignar memoria a los límites de palabras para la eficiencia significaría más espacio en blanco entre las asignaciones.

También he escuchado que el modo de 32 bits en el x86 tiene que vaciar su caché cuando se cambia de contexto debido a la posible superposición de espacios de direcciones 4G.

Entonces, ¿cuáles son los beneficios reales de 64 bits?

Y como pregunta complementaria, ¿128 bit sería aún mejor?

Editar:

Acabo de escribir mi primer programa de 32/64 bits. Hace listas enlazadas / árboles de objetos de 16 bytes (versión 32b) o de 32 bytes (versión 64b) y imprime mucho en stderr, no es un programa realmente útil, y no es algo típico, pero es el primero.

Tamaño: 81128 (32b) v 83672 (64b), por lo que no hay mucha diferencia

Velocidad: 17s (32b) v 24s (64b) - ejecutándose en sistema operativo de 32 bits (OS-X 10.5.8)

Actualizar:

Observo que se está desarrollando un nuevo híbrido x32 ABI (Application Binary Interface) que es 64b pero usa 32b punteros. Para algunas pruebas da como resultado un código más pequeño y una ejecución más rápida que 32b o 64b.

https://sites.google.com/site/x32abi/


A menos que necesite acceder a más memoria que el direccionamiento 32b le permitirá, los beneficios serán pequeños, en su caso.

Cuando se ejecuta en una CPU de 64b, se obtiene la misma interfaz de memoria sin importar si está ejecutando código 32b o 64b (está utilizando la misma memoria caché y el mismo BUS).

Si bien la arquitectura x64 tiene algunos registros más que permiten optimizaciones más sencillas, esto a menudo se ve contrarrestado por el hecho de que los punteros ahora son más grandes y el uso de estructuras con punteros genera un mayor tráfico de memoria. Estimo que el aumento en el uso general de la memoria para una aplicación 64b en comparación con una 32b es alrededor del 15-30%.


Además de tener más registros, 64-bit tiene SSE2 por defecto. Esto significa que puedes realizar algunos cálculos en paralelo. Las extensiones de SSE también tenían otros extras. Pero supongo que el principal beneficio es no tener que verificar la presencia de las extensiones. Si es x64, tiene SSE2 disponible. ... Si mi memoria me sirve correctamente.


Cualquier aplicación que requiera uso de CPU como transcodificación, rendimiento de visualización y reproducción de medios, ya sea de audio o visual, sin duda requerirá (en este punto) y se beneficiará del uso de 64 bits frente a 32 bits debido a la capacidad de la CPU para lidiar con cantidad de datos que se arrojan sobre él. No es tanto una cuestión de espacio de direcciones, ya que es la forma en que se tratan los datos. Un procesador de 64 bits, con un código de 64 bits, funcionará mejor, especialmente con cosas matemáticamente difíciles como la transcodificación y los datos VoIP; de hecho, cualquier tipo de aplicaciones ''matemáticas'' deberían beneficiarse con el uso de CPU y sistemas operativos de 64 bits. Prueba que estoy equivocado.


En el caso específico de x68 a x68_64, el programa de 64 bits tendrá aproximadamente el mismo tamaño, si no es un poco más pequeño, usará un poco más de memoria y se ejecutará más rápido. Sobre todo esto se debe a que x86_64 no solo tiene registros de 64 bits, sino que también tiene el doble. x86 no tiene suficientes registros para hacer que los lenguajes compilados sean tan eficientes como podrían ser, por lo que el código x86 gasta muchas instrucciones y el ancho de banda de memoria intercambia datos entre los registros y la memoria. x86_64 tiene mucho menos de eso, por lo que requiere menos espacio y funciona más rápido. Las instrucciones de vector de coma flotante y de intercambio de bits también son mucho más eficaces en x86_64.

Sin embargo, en general, el código de 64 bits no es necesariamente más rápido, y generalmente es más grande, tanto para el uso del código como de la memoria en tiempo de ejecución.


Independientemente de los beneficios, le sugiero que siempre compile su programa para el tamaño de palabra predeterminado del sistema (32 bits o 64 bits), ya que si compila una biblioteca como un binario de 32 bits y lo proporciona en un 64 bits sistema, forzará a cualquiera que quiera vincularse con su biblioteca a proporcionar su biblioteca (y cualquier otra dependencia de biblioteca) como un binario de 32 bits, cuando la versión de 64 bits esté disponible por defecto. Esto puede ser bastante molesto para todos. En caso de duda, proporcione ambas versiones de su biblioteca.

En cuanto a los beneficios prácticos de 64 bits ... lo más obvio es que obtienes un espacio de direcciones más grande, así que si mmap un archivo, puedes abordar más de una vez (y cargar archivos más grandes en la memoria). Otra ventaja es que, suponiendo que el compilador realiza un buen trabajo de optimización, muchas de sus operaciones aritméticas se pueden paralelizar (por ejemplo, colocar dos pares de números de 32 bits en dos registros y realizar dos adiciones en una sola operación de agregar), y grandes los cómputos numéricos se ejecutarán más rápidamente. Dicho esto, todo lo de 64 bits frente a 32 bits no te ayudará con la complejidad asintótica en absoluto, así que si estás buscando optimizar tu código, probablemente deberías mirar los algoritmos en lugar de los factores constantes como este.

EDITAR :
Por favor, ignore mi afirmación sobre la adición paralelizada. Esto no lo realiza una declaración add ordinaria ... Estaba confundiendo eso con algunas de las instrucciones vectorizadas / SSE. Un beneficio más preciso, aparte del espacio de direcciones más grande, es que hay registros de propósito más general, lo que significa que se pueden mantener más variables locales en el archivo de registro de la CPU, que es mucho más rápido de acceder, que si coloca las variables en el pila de programas (que generalmente significa ir a la caché L1).


La única justificación para mover su aplicación a 64 bits es la necesidad de más memoria en aplicaciones como grandes bases de datos o aplicaciones ERP con al menos 100s de usuarios concurrentes, donde el límite de 2 GB se excederá bastante rápido cuando las aplicaciones guarden en caché para un mejor rendimiento. Este es el caso especialmente en el sistema operativo Windows donde entero y largo aún es de 32 bits (tienen la nueva variable _int64. Solo los punteros son de 64 bits. De hecho, WOW64 está altamente optimizado en Windows x64, por lo que las aplicaciones de 32 bits se ejecutan con baja penalización en Windows de 64 bits OS. Mi experiencia en Windows x64 es una versión de aplicación de 32 bits ejecutada 10-15% más rápido que 64 bit ya que en el caso anterior al menos para bases de datos de memoria patentadas puede usar puntero aritmático para mantener b-tree (la mayoría de los sistemas de base de datos con procesador intensivo) Aplicaciones intensivas de compilación que requieren decimales grandes para una mayor precisión no permitida por el doble en el sistema operativo de 32-64 bits. Estas aplicaciones pueden usar _int64 en forma nativa en lugar de emulación de software.Por supuesto, las bases de datos grandes basadas en disco también mostrarán mejorías de más de 32 bits debido a a la capacidad de usar memoria grande para el almacenamiento en caché de planes de consulta, etc.


Por lo general, veo una mejora de velocidad del 30% para el código de cálculo intensivo en x86-64 en comparación con x86. Probablemente esto se deba al hecho de que tenemos registros de propósito general de 16 x 64 bits y 16 registros SSE en lugar de registros de propósito general de 8 x 32 bits y 8 registros SSE. Esto es con el compilador ICC de Intel (11.1) en un Linux x86-64. Los resultados con otros compiladores (por ejemplo, gcc) o con otros sistemas operativos (por ejemplo, Windows) pueden ser diferentes, por supuesto.


Se transfieren más datos entre la CPU y la RAM para cada recuperación de memoria (64 bits en lugar de 32), por lo que los programas de 64 bits pueden ser más rápidos siempre que estén escritos para que puedan aprovecharlos adecuadamente.