2010-07-27 24 views
15

¿Cuál es la fuente de la ventaja del rendimiento Las aplicaciones de 64 bits tienen aplicaciones de más de 32 bits? Supongo que hay una ventaja de rendimiento porque programas como WinRAR lo anuncian.Ventajas de rendimiento de 64 bits

Además, ¿podemos obtener estas ventajas de rendimiento simplemente cambiando a un compilador de 64 bits, o hay algún cambio en el código que deba realizarse?

Las respuestas relacionadas con el código no administrado y administrado son bienvenidas.

Respuesta

4

Con el fin de aprovechar las ventajas de la arquitectura de 64 bits de la última CPU de lo que tiene que:

  • uso de una CPU de 64 bits y OS
  • desarrollan específicamente para 64 bits usando una API de 64 bits - la imple La mentación tiene que ir hasta el código más básico que trabaja con los registros de la CPU (normalmente escrito en ensamblador) para aprovechar los registros adicionales.
  • desarrolla una aplicación que realmente se beneficiará de los registros adicionales: WinRAR es una aplicación que aprovechará al máximo los registros adicionales porque implica mucho cálculo con algoritmos complejos. Si, en cambio, escribe una aplicación con algoritmos muy simples, no requerirá espacio de direcciones de registro adicional y no funcionará más rápido en 64 bit
  • tenga en cuenta también que cuando utiliza un registro de CPU incluso si no utiliza el todo el espacio de direcciones para un valor, ocupará tanto espacio (= 64bits) ... por lo tanto, escribir una pequeña aplicación en 64 bits con el objetivo de obtener un código optimizado simplemente no funcionará ... esa aplicación ocupará el doble de RAM que si se desarrollara por debajo de 32 bit y puede ser aún más lento. La programación en 64 bits tiene sentido para aplicaciones que usan algoritmos pesados ​​o que necesitan asignar grandes cantidades de memoria (4Gb es el límite para una aplicación de 32 bits).
+2

¿Por qué la aplicación ocuparía el doble de RAM? En cuanto al espacio de registro, siempre puede usar las partes superior e inferior de un registro de 64 bits por separado. Por lo tanto, el uso juicioso de los registros debería resolver ese problema de forma natural. – TripShock

+2

Sí, el doble de espacio es básicamente el peor de los casos. Pero incluso si necesita trabajar con valores mucho más pequeños que 32 bits como valores representados en un máximo de 16 bits, aún desperdicia la mitad del espacio de registro que si estuviera trabajando en una CPU de 32 bits. Y, en general, cuanto más grande es el registro, mayor es el desperdicio de memoria. De todos modos, imaginando que escribes tu código en algo más que ensamblador, estás a merced de las optimizaciones hechas por tu compilador ... y hay casos en que incluso un compilador óptimo hará que tu código use el doble de la memoria necesaria en la arquitectura de 32 bits –

+3

@TripShock ... lea aquí para obtener más pruebas: http://en.wikipedia.org/wiki/64_bit#Pros_and_cons :) –

1

Según tengo entendido, en la mayoría de los casos, no hay ganancia de rendimiento como tal, aparte de la posibilidad de utilizar más memoria. (Aunque podría ofrecer un mayor rendimiento si trabaja mucho con tipos de datos de 64 bits, por ejemplo).

4

¿Cuándo dejaron de mentir en los anuncios? ¿Me he perdido algo? ;-)

La principal ventaja de rendimiento es que en los sistemas de 64 bits, puede asignar más de 4 GB de RAM (en realidad en la mayoría de los sistemas que son más de 2 GB) sin intercambio. Esa es una gran ventaja de velocidad si la necesita.

Así que 64 bits ofrece una ventaja si tiene aplicaciones que necesitan mucha RAM (procesamiento de imágenes/video/audio, simulaciones mundiales/universales).

Además de eso, las CPU de 64 bits también tienen comandos que operan en tipos de datos de 64 bits (por lo que no es necesario emular aquellos con tipos de 32 bits). Eso también es una ventaja, pero a) no es tan grande porque los algoritmos necesitan usar esos tipos y la mayoría no b) son aún más lentos que los tipos de 32 bits (pero más rápidos que la emulación).

Para hacerte una idea, aquí hay una vieja broma de un tipo de superordenador: "Se tarda un día en cargar los datos de los discos, luego el programa tarda cinco minutos en procesar los datos y luego necesitamos otro día para guardarlos. el resultado para el disco ". Leer datos de la RAM es entre 1000 y 1000000 veces más rápido que un acceso al disco.

Así que en general, para el usuario promedio, un sistema de 64 bits tiene poca o ninguna ventaja.

+0

Su respuesta trae la segunda parte de mi pregunta al primer plano ... ¿tenemos que hacer cambios en el código para optimizar para 64 bits? Porque si el único cambio que se necesita es el uso de tipos de datos de 64 bits, en realidad no necesitamos cambiar el código para eso, porque los compiladores de 64 bits convierten automáticamente tipos como int a 64 bits (porque su tamaño es ligado al tamaño de la palabra). Pero también he leído en alguna parte que los cambios en el código son necesarios para obtener los beneficios completos de 64 bits ... ¿qué cambia exactamente? – TripShock

+0

La mayoría del código usa un tamaño de tipo específico en lugar de plain int. Además, incluso en sistemas de 64 bits, 'int' suele ser de 32 bits porque una gran cantidad de código depende de que sea de 32 bits. 'long' es otra cuestión, pero hay opciones de compilación para hacerlo de 32 bits y' long long' de 64 bits. Dicho esto, ¿cuál es la ventaja de usar un contador de bucle de 64 bits que generalmente está muy por debajo de 100000? –

+0

Así que mi conclusión es: si tienes un problema específico (como vadear muchos datos) y tienes un algoritmo que puede hacer uso de tipos enormes, entonces importa. Piense en la manipulación elegante de gráficos en tiempo real para demostraciones o juegos. Su sistema operativo no será más rápido * y * necesitará mucha más memoria RAM (ya que cada puntero necesitará el doble de bytes). –

16

La arquitectura x64 duplica el número de registros de propósito general disponibles en la arquitectura x86, de modo que los compiladores pueden guardar más datos en registros de CPU (muy rápidos) que en RAM (relativamente lenta).

+2

registros extra es enorme. Los modos de direccionamiento adicionales pueden ayudar (RIP). Y estos benefician a todos los códigos con una recompilación simple. x86 siempre ha sido criticado por el bajo recuento de registros. – phkahler

+0

en realidad es más del doble, porque tiene ESP/RSP que no se puede utilizar como propósito general, por lo que el número de GPR de 6 a 14 (7 a 15 si no utiliza un puntero de marco EBP) –

1

Algunas buenas respuestas aquí.

Como se dijo, puede acceder a la memoria RAM ilimitada, lo que ayudará al rendimiento si lo necesita.

Humildemente agregaría que si no lo necesita, pero utilícelo de todos modos, dañará el rendimiento.

Nunca perder de vista una de las leyes más antiguas de la ciencia:

naturaleza aborrece el vacío

+0

Puede No se puede acceder a la memoria RAM ilimitada. Hay un límite: http://en.wikipedia.org/wiki/64-bit#Limitations –

+1

@John: Ya sabes a qué me refiero. –

Cuestiones relacionadas