código escrito · artículos digitales de informática
 
Gestión de la memoria a 32 y 64 bits
02.10.2005 :: Jaime Irurzun

Voy a contar algo que he aprendido esta semana por si hubiera alguien con las mismas dudas existenciales: ¿en qué se diferencia realmente un equipo de otro cuando se dice que trabaja a 64 bits? ¿cómo puede ser que un procesador de 64 bits siga trabajando con una memoria que antes se usaba con otro de 32 bits? ¿en qué medida se notará el rendimiento de un procesador de 64 bits cuando pase a utilizar software compilado para 64 bits? Esta semana decidí preguntárselo a mi profesor de Estructura de Computadores I, y por fín salí de mis dudas. Por cierto, si alguien cree que la explicación que voy a dar no es lo suficientemente precisa le agradecería que ampliara la información en los comentarios, pero por favor, que no diga que mi profesor no tiene ni idea porque esto me lo respondió en cinco minutos al terminar la clase. Y si algo es incorrecto os aseguro que será porque lo he entendido mal o porque recuerdo mal la explicación ;)

¿En qué se diferencia realmente un equipo de otro cuando se dice que trabaja a 64 bits? La primera pregunta es necesario tenerla clara para poder entender las siguientes. Cuando un procesador trabaja a 64 bits (como los Athlon64 de AMD), es porque gestiona la memoria en palabras de 64 bits. Esto significa que si antes necesitaba dos lecturas para obtener un dato de memoria que ocupara más de 32 bits, ahora lo hará en una sola. El problema es que no basta con que el procesador esté preparado para gestionar la memoria en un determinado tamaño de palabra, puesto que la memoria también debe estar preparada para ser gestionada con esa misma longitud de palabra.

Aquí surge la segunda pregunta: ¿cómo puede ser que un procesador de 64 bits siga trabajando con una memoria que antes se usaba con otro de 32 bits? La respuesta directa a esto es bien sencilla: de la misma forma en que lo ha hecho cuando manejaba palabras de 32 bits y se encontraba con datos de mayor longitud. Tenía que partir el dato en dos palabras de memoria, con la consecuencia de necesitar dos accesos para escribir y dos accesos para leer. Al entender esto pensé que el día que salgan memorias de 64 bits el aumento de velocidad será impresionante, puesto que para todos esos casos en que actualmente se necesitan dos accesos, bastará con uno sólo. Y esto es cierto pero sólo en parte: no se duplicará la velocidad. Y esto es así porque actualmente se usa el famoso dual-channel, que consiste en utilizar dos módulos de memoria de forma que el procesador (con la inestimable ayuda de la placa base), consigue acceder al mismo tiempo a los dos módulos. Así, un dato de 64 bits sigue teniendo que partirse, pero ahora en lugar de hacerlo en dos palabras de la primera memoria (usando dos lecturas/escrituras), se hace en una palabra del primer módulo y otra del segundo. Por tanto, el día en que salgan memorias de 64 bits no habrá un salto de velocidad tan significativo.

Tercera y última: ¿en qué medida se notará el rendimiento de un procesador de 64 bits cuando pase a utilizar software compilado para 64 bits? Pues aquí sí es donde verdaderamente se notará un cambio. Que un programa esté compilado con un compilador de 32 bits hace que, por ejemplo, un número real de 8 bytes ocupe dos palabras de memoria (64 bits), mientras que un compilador de 64 bits hará un uso óptimo del hardware disponible, utilizando una sola palabra de memoria compuesta por 64 bits (o en el caso de memorias de 32 bits con dual-channel, dos palabras de 32 bits pero en módulos distintos).

En definitiva, es el software el que permite aprovechar los recursos que ofrece el hardware. Esto me recuerda al hiper-comentado tópico del usuario de software ofimático que va a comprarse un ordenador y quiere el más potente del mercado. Si no es por no vendérselo, pero es que vendérselo pa ná es tontería.

comentarios (5) |


Comentarios del artículo
1 · JM · 03.10.2005

Te ha faltado un pequeño detalle, que no tiene mucho que ver con la arquitectura interna, pero que nos afecta a todos los programadores: el tamaño de puntero ocupa lo mismo que la longitud de palabra, así que en máquinas de 64 bits, tenemos una barrera física de 2 a la 64 bits (eso son muchos gigas de memoria RAM, en vez de la barrera de 4 GB para arquitecturas de 32 bits).
Otro dato a tener en cuenta es que teóricamente, los rangos de los tipos de datos se incrementan también: el "int" pasará a ocupar 64 bits, etc. Esto en realidad no es así, porque para mantener compatibles los programas, se mantiene los mismos tamaños en los tipos de datos (aunque el tamaño de puntero sí que se amplía al tamaño de palabra).
Piensa que si los tipos de datos se ampliasen, no ocuparía lo mismo un archivo BMP (por ejemplo) guardado en una arquitectura de 64 bits que otro guardado en 32 bits.

Saludos

2 · Joaquín · 03.10.2005

No me parece correcta la explicación.

Lo más importante en un ordenador de 64 bits es que su camino interno (básicamente, su ALU y sus registros) son de 64 bits. Eso significa que puede trabajar fácilmente con números enteros de 64 bits. ¿Es eso útil? Pues, por una parte, la unidad de coma flotante ya era de 64 bits en los ordenadores de 32 bits, así que sólo se notará en los números enteros. Donde tiene de verdad importancia es, como apuntan arriba, en las direcciones: ahora se podrá trabajar con direcciones de 64 bits mucho más fácilmente.

Aquí hay que tener en cuenta varias cosas. La primera es que los Pentium desde el Pentium II, si no recuerdo mal (hablo de memoria), pueden utilizar 36 bits para las direcciones, pero si no se utilizan instrucciones especiales se emplean sólo 32 bits y por eso sólo se pueden direccionar 4 GB. Eso sí, hay desde hace años una versión especial de Windows que trabaja con las instrucciones de 36 bits y permiten direccionar 64 GB. Pero como la ALU sigue preparada para 32 bits hay una penalización cuando se trabaja con estas direcciones de 36 bits.

Con los ordenadores de 64 bits ya no existirá esta penalización. Un pequeño detalle es que, de momento, físicamente las direcciones tampoco van a tener en realidad 64 bits (no merece la pena porque probablemente en los próximos años no veremos ordenadores con tanta memoria) y «sólo» tienen 40 bits o 40 y pico (Intel y AMD no tienen lo mismo).

En cualquier caso, la gran ventaja de los 64 bits es que se van a poder direccionar más de 4 GB. Obviamente, todos los que tengamos menos memoria que eso no vamos a notar mucha diferencia. Donde va a ser interesante es en los servidores.

Por otra parte, toda la explicación sobre memorias de 64 bits como está explicada en el texto de artículo es incorrecta. Ahí estás hablando de que las memorias tengan 64 bits de tamaño de palabra de datos (no de direccción)... y eso ya ocurre desde hace años. Todos los chips SDRAM (incluyendo los DDR) traen de cada vez 64 bits (o 72 si son módulos ECC).

Yo creo que las mejoras que se vean con ordenadores de 64 bits es porque utilizan una arquitectura mejor en general y no tanto por los 64 bits.

Ahora es el turno de que alguien me corrija a mí :-)

3 · Guti · 03.10.2005

A continuación mis puntualizaciones:

¿En qué se diferencia realmente un equipo de otro cuando se dice que trabaja a 64 bits?
Según la explicación que das, desde los Pentium MMX, que son de 64 bits, pues con MMX se puede acceder a la memoria de 64 bits en 64 bits. O desde el 486 usando la FPU. Debería añadirse a la explicación el término "instrucciones de propósito general".

¿en qué medida se notará el rendimiento de un procesador de 64 bits cuando pase a utilizar software compilado para 64 bits?
No será tan elevado como dices. No olvidemos que pocas aplicaciones requieren valores de 64 bits, y que esto ya se podía hacer con SSE y 3DNow (que permiten palabras de 128 bits).

En mi opinión la gran diferencia vendrá por la capacidad de gestionar memoria de hasta 2^64-1 bytes, o (2^64)/2-1 si se usan implementaciones de memoria virtual al estilo Windows. No queda demasiado tiempo para que 2 Gb de memoria queden obsoletos... Y cuando eso pasa, a pesar de que nuestro sistema operativo soporte más cantidad, se hace en base a enteros de 32 bits.

4 · TheSpoilerMan · 17.10.2005

Lamento decirles unas cuantas realidades:

Eso de "maquinas de 64 bits", ya se veian y USABAN desde los 70's y como muestra estaban los equipos Cyber Mod 170 y 180 que con solo 128 k de Memoria manejaba proceso Batch y teleproceso para hasta 256 terminales... eso si, su palabra era de 64 Bits ...

Lo que quiero decirles es que simplemnete nos van a vender un "refrito" al que durante la transicion le sacaran un monton de plata ... tal vez si DEC (Digital Equipment Corporation) decidiese vendernos equipos de 128 Bits o que Tandem nos vendiera lo suyo, otro gallo nos cantaria.

O mejor aun, que la US-Army no venda uno de sus equipos de escritorio (100 Ghz minimo) !!!!

5 · Santiago Moreta · 28.10.2005

Chicos necesito su ayuda porfa para un deber
Sofware y su respectiva actualizacion
Lo relevante al actualizar una tecnologia de 32 bits a 64 requerimientos.


ayudenme con eso urgente gracias a todos por esa mano














































Creative Commons - Jaime Irurzun y Aitor Martin