GNU/Linux >> Tutoriales Linux >  >> Linux

Rendimiento Aritmética de 32 bits frente a 64 bits

Depende de la CPU y la operación exactas. En los Pentium IV de 64 bits, por ejemplo, la multiplicación de registros de 64 bits era un poco más lenta. Las CPU Core 2 y posteriores se han diseñado para funcionar con 64 bits desde cero.

En general, incluso el código escrito para una plataforma de 64 bits usa variables de 32 bits donde los valores caben en ellas. Esto no se debe principalmente a que la aritmética sea más rápida (en las CPU modernas, por lo general no lo es), sino a que utiliza menos memoria y ancho de banda de memoria.

Una estructura que contiene una docena de enteros tendrá la mitad del tamaño si esos enteros son de 32 bits que si son de 64 bits. Esto significa que se necesitará la mitad de bytes para almacenar, la mitad de espacio en la memoria caché, etc.

Los registros nativos de 64 bits y la aritmética se utilizan cuando los valores pueden no caber en 32 bits. Pero los principales beneficios de rendimiento provienen de los registros adicionales de uso general disponibles en el conjunto de instrucciones x86_64. Y, por supuesto, están todos los beneficios que provienen de los punteros de 64 bits.

Así que la verdadera respuesta es que no importa. Incluso si usa el modo x86_64, puede (y generalmente lo hace) seguir usando aritmética de 32 bits donde lo hará, y obtendrá los beneficios de punteros más grandes y registros de uso más general. Cuando usa operaciones nativas de 64 bits, es porque necesita operaciones de 64 bits y sabe que serán más rápidos que fingir con múltiples operaciones de 32 bits, su única otra opción. Por lo tanto, el rendimiento relativo de los registros de 32 bits frente a los de 64 bits nunca debe ser un factor decisivo en ninguna decisión de implementación.


Acabo de encontrarme con esta pregunta, pero creo que aquí falta un aspecto muy importante:si realmente observa el código ensamblador usando el tipo 'int' para los índices, probablemente ralentizará el código que genera su compilador. Esto se debe a que 'int' el valor predeterminado es un tipo de 32 bits en muchos compiladores y plataformas de 64 bits (Visual Studio, GCC) y hacer cálculos de direcciones con punteros (que son necesariamente de 64 bits en un sistema operativo de 64 bits) e 'int' hará que el compilador emita conversiones innecesarias entre registros de 32 y 64 bits . Acabo de experimentar esto en un ciclo interno de mi código muy crítico para el rendimiento. Cambiar de 'int' a 'largo largo' como índice de bucle mejoró el tiempo de ejecución de mi algoritmo en aproximadamente un 10 %, lo que fue una gran ganancia teniendo en cuenta la extensa vectorización SSE/AVX2 que ya estaba usando en ese momento.


Linux
  1. MySQL:ajuste y optimización del rendimiento

  2. ¿Impacta Lvm en el rendimiento?

  3. Paréntesis en aritmética Expr:3 * (2 + 1)?

  4. ¿Cómo determinar si un Linux determinado es de 32 bits o de 64 bits?

  5. Vinculación de la biblioteca de 32 bits al programa de 64 bits

Ubuntu 21.04 Descargar

Cómo saber si tiene una computadora de 32 o 64 bits en Linux y Windows

¿Tu Ubuntu es un sistema operativo de 32 bits o de 64 bits? [GUI + Terminal]

Linux – Diagrama de Linux Kernel vs. Herramientas de rendimiento?

Cómo saber si la versión de Linux es de 32 bits o de 64 bits

Ajuste del rendimiento de Nginx