2008-08-18 17 views
10

Sé que .NET es JIT compilado en la arquitectura que está ejecutando justo antes de que se ejecute la aplicación, pero ¿el compilador JIT optimiza para la arquitectura de 64 bits?64bit .NET Ajuste de rendimiento

¿Hay algo que deba hacerse o tenga en cuenta al programar una aplicación que se ejecutará en un 64bit system? (es decir, ¿usará Int64 mejorar el rendimiento y el compilador JIT hará que Int64 funcione automáticamente en sistemas de 32 bits?)

Respuesta

14

El 64bit JIT is different del uno para 32 bits, así que esperaría algunas diferencias en la salida, pero no cambiaría a 64 bits solo por eso, y no esperaría ganar mucha velocidad (si hay) en la CPU tiempo cambiando a 64 bits.

Notará una gran mejora en el rendimiento si su aplicación usa mucha memoria y la PC tiene suficiente RAM para mantenerse al día. Descubrí que las aplicaciones .NET de 32 bits tienden a comenzar a eliminar las excepciones de memoria cuando se usan 1,6 gb en uso, pero comienzan a agitar el disco debido a paging mucho antes de eso, por lo que terminas siendo E/S encuadernado.

Básicamente, si su cuello de botella es CPU, entonces es poco probable que 64bit ayude. Si su cuello de botella es memoria, entonces debería ver una gran mejora.

¿El uso de Int64 mejorar el rendimiento y el compilador JIT se hará de forma automática el trabajo Int64 en sistemas de 32 bits

Int64 ya funciona tanto en sistemas de 32 y 64 bits, pero va a ser más rápido que se ejecuta en 64 bits. Entonces, si en su mayoría se trata de números cruzados con Int64, la ejecución en un sistema de 64 bits debería ser útil.

Lo más importante es measure su rendimiento.

0

Los cuellos de botella de rendimiento serán los mismos independientemente de si la arquitectura es de 32 o 64 bits. Los problemas de rendimiento tienden a ser el resultado de los algoritmos subóptimos —, la elección entre los tipos de 32 y 64 bits no afectará significativamente el rendimiento.

Lo más importante, no intente mejorar el rendimiento de algo antes de haberlo medido. En particular, debe perfilar el código para determinar dónde se encuentran los cuellos de botella de su rendimiento.

9

This es un buen artículo sobre el tema, por una de las personas que trabajaron en el JIT de 64 bits. Básicamente, a menos que necesite absolutamente el espacio de direcciones que puede ofrecer 64 bits, o necesita hacer operaciones matemáticas de 64 bits, es probable que pierda rendimiento. Como los punteros son más grandes, la memoria caché se reduce a la mitad, por ejemplo.

6

He notado que 64 bits son mucho más lentos.

Como se ha indicado, el compilador JIT de 64 bits se comporta de forma diferente al compilador JIT x86. El compilador x86 aprovechará algunas optimizaciones que el x64 no hace.

Por ejemplo, en .NET 3.5, el JIT de 32 bits inline llamadas de función con estructuras como argumentos, pero el JIT de 64 bits no.

En el código de producción que he visto x86 construye corriendo hasta un 20% más rápido que x64 construye (sin otros cambios)

3

En resumen, el uso de 64 bits sólo si

  1. Es necesario la memoria extra y no hay forma de evitarla.
  2. programa, p. aplicaciones científicas y necesitan la mayor precisión matemática

En todos los demás aspectos, a partir de hoy, el compilador de 64 bits en .NET está a un paso de bajar.

Las optimizaciones de rendimiento realizadas en los compiladores .NET son un gran problema.