Pregunta

Yo sé eso .NET es JIT compilado para la arquitectura que está ejecutando justo antes de que se ejecute la aplicación, pero ¿el compilador JIT se optimiza para la arquitectura de 64 bits?

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

¿Fue útil?

Solución

El JIT de 64 bits es diferente del de 32 bits, por lo 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 es que hay alguna) en el tiempo de CPU al cambiar a 64 bits.

Notarás una gran mejora en el rendimiento si tu aplicación usa mucha memoria y la PC tiene suficiente RAM para seguir el ritmo.Descubrí que las aplicaciones .NET de 32 bits tienden a comenzar a generar excepciones de falta de memoria cuando llegas a alrededor de 1,6 GB en uso, pero comienzan a dañar el disco debido a paginación mucho antes de eso, por lo que terminas vinculado a E/S.

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

¿El uso de Int64 mejorará el rendimiento y el compilador JIT hará que Int64 funcione automáticamente en sistemas de 32 bits?

Int64 ya funciona en sistemas de 32 y 64 bits, pero será más rápido en 64 bits.Entonces, si principalmente haces cálculos numéricos con Int64, ejecutarlo en un sistema de 64 bits debería ser útil.

Lo más importante es medida tu actuación.

Otros consejos

Este es un buen artículo sobre el tema, escrito por una de las personas que trabajó en el JIT de 64 bits.Básicamente, a menos que necesite absolutamente el espacio de direcciones que pueden ofrecer los 64 bits, o necesite hacer cálculos matemáticos de 64 bits, es probable que pierda rendimiento.Como los punteros son más grandes, el caché se reduce a la mitad, por ejemplo.

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

Como se ha dicho, el compilador JIT de 64 bits se comporta de manera diferente al compilador JIT x86.El compilador x86 aprovechará algunas optimizaciones que el compilador x64 no aprovecha.

Por ejemplo, en .NET 3.5, el JIT de 32 bits incorporará llamadas a funciones con estructuras como argumentos, pero el JIT de 64 bits no.

En el código de producción, he visto compilaciones x86 ejecutándose hasta un 20 % más rápido que las compilaciones x64 (sin otros cambios).

En resumen, utilice 64 bits sólo si

  1. Necesitas memoria extra y no hay forma de evitarlo.
  2. Usted programa, p.aplicaciones científicas y necesitan una mayor precisión matemática

En todos los demás aspectos, a día de hoy, el compilador de 64 bits en .NET está un paso por debajo.

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

Los cuellos de botella en el 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 algoritmos subóptimos: la elección entre tipos de 32 y 64 bits no afectará significativamente el rendimiento.

Lo más importante es que no intentes mejorar el rendimiento de algo antes de haberlo medido.En particular, debe perfilar el código para determinar dónde están los cuellos de botella en el rendimiento.

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