De los 32 a los 64 bits: ventajas y desafíos de la transición de una arquitectura

De los 32 a los 64 bits: ventajas y desafíos de la transición de una arquitectura
138 comentarios Facebook Twitter Flipboard E-mail

Este año hemos vivido la entrada del mundo móvil a los 64 bits, y esperamos que de cara a 2014 llegue la implantación masiva de esta tecnología. Una evolución que ya conocemos en sistemas de escritorio y, por tanto, podemos echar la mirada atrás para recordar lo que ocurrió por aquél 2003.

¿Qué son los 64 bits y qué implicaciones conllevan? ¿En qué medida afectan al rendimiento? Hoy entenderemos qué significan esos 64 bits, explicaremos lo que representan y los beneficios que podemos llegar a obtener.

¿Qué son esos 64 bits?

Antes de entrar en materia es necesario repasar algunos conceptos fundamentales. El primero, ¿qué es un bit?

Según DRAE: bit. (Del ingl. bit, acrón. de binary digit 'dígito binario'). 1. m. Inform. Unidad de medida de información equivalente a la elección entre dos posibilidades igualmente probables.
Bit 0-1

Un bit es la esencia de la informática

En informática un bit es la unidad mínima de información y puede tomar dos valores, generalmente 0 o 1. Un bit es cero o es uno, sin otras posibilidades. Otra forma de decir lo mismo es hablar de falso o verdadero; un bit puede ser falso (generalmente asignado como valor 0) o verdadero (valor 1).

Cuando hablamos de 64 bits nos referimos a que existen 64 elementos que pueden ser 0 o 1 cada una de ellos. Con esto, una cadena de 64 bits de ejemplo sería la siguiente:

0010101010110101101101011010110110100110111011100011101011101101

Que se trata de un número en representación binaria. Si lo convertimos a decimal nos encontraremos con el 3077565677812202221. Un número exageradamente grande, sí. Como referencia, una cadena de 64 bits puede contener números entre 0 y 2^(64)-1, aproximadamente 1,18x(10^19). Nos puede servir para representar información numérica, pero también otro tipo de información: una cadena de bits está generalmente asociada al tamaño de los registros o a las direcciones de memoria. Esto último es importante, y lo trataremos más adelante.

Los alumnos

¿Qué usos puede tener una cadena de 64 bits como la anterior? Si pensamos en la vida real podemos plantear la siguiente problemática: tenemos 64 alumnos de un colegio y queremos almacenar cuál es el género de cada uno de ellos para tenerlo disponible en nuestro ordenador.

Con esto, lo primero que debemos hacer es ordenar alfabéticamente a todos los niños, por ejemplo con el primero de sus apellidos. Tras ello podemos utilizar el siguiente código:

Si es un niño, se le asignará un 0
Si es una niña, se le asignará un 1

Ahora recordemos los primeros cinco dígitos de la cadena anteriormente utilizada: 00101[…]. Rápidamente se puede concluir que los dos primeros alumnos de nuestra lista ordenada por apellido serán niños, irán seguidos por una niña, otro niño y una niña más. Algo así:

Alonso, Felipe
Álvarez, Juan
Benitez, Beatriz
Castillo, Pablo
Canales, Lourdes
[…]

Y seguiríamos hasta el niño número 64 que, por cierto, sería una niña (Alba Zamora, quizá). Evidentemente este es un ejemplo muy sencillo pero que nos sirve a la perfección para entender la base de funcionamiento. El siguiente paso que debemos dar es cambiar nuestro registro de 64 bits por uno de 32.

Pasémonos a los 32 bits

Si tenemos 64 niños podríamos haber almacenado toda la información del género en una única cadena cuya longitud sería, precisamente, 64 bits. ¿Qué ocurre si en vez de 64 bits utilizamos 32 bits? A priori la medida es tan simple como acortar el tamaño que utilizamos, y hacer uso de tantos registros de 32 bits como sean necesarios en vez de los de 64.

Con 32 bits, nuestros 64 alumnos tendrían que utilizar dos cadenas en vez de una. Serían, justamente, las dos siguientes:

00101010101101011011010110101101
10100110111011100011101011101101

Guardamos la misma información en el mismo orden. ¿El mismo orden? ¿Seguro? Parece que sí, pero ¿y si por algún error cambiamos las dos filas de 32 bits?

10100110111011100011101011101101
00101010101101011011010110101101

Con este cambio tan sencillo nos hemos cargado toda la mecánica, pues ahora Felipe Alonso será una niña y Lourdes Canales un niño.

Para solucionar esta problemática podemos hacer uso de lo que generalmente se denomina cabecera de datos. Los 32 bits (y antes los 64 bits) no se usan por completo para almacenar la información que nosotros queramos, si no que se guarda un espacio para poder obtener cierta información fundamental. En este caso sería interesante guardar un bit para determinar el orden: cuál de las dos cadenas binarias es la primera, y cuál es la segunda. Por ejemplo, podemos asignarle el valor 0 a la primera cadena, y 1 a la segunda:

0-00101010101101011011010110101101
1-10100110111011100011101011101101

Sin embargo, si os fijáis bien, nos hemos salido de los 32 bits, ya que ahora utilizamos 33: 1 dígito para determinar la posición de la fila de bits junto con otros 32 dígitos para los alumnos. 33+33 = 66. Si utilizásemos cadenas de 32 bits necesitaríamos un total de tres, que podemos determinar reubicando ciertos bits (alumnos); en nuestro caso el último de cada fila lo añadimos al principio de la siguiente fila:

0-0010101010110101101101011010110
1-1101001101110111000111010111011
X-01

Esa X es un nuevo problema que nos encontramos. Un bit sólo puede registrar 0 o 1, con lo que si añadimos una nueva fila (la tercera) deberíamos asignarle el siguiente valor al 1, que en binario sería 10. Esto son dos bits y es necesario almacenar otro bit en la cabecera para así ahora poder tener tres cadenas de bits:

00-0010101010110101101101011010110
01-1101001101110111000111010111011
10-01

Hemos añadido un nuevo bit en nuestra cabecera y ahora ya tenemos claro el orden de cada cadena. ¿Lo malo? Que nos hemos vuelto a pasar y almacenamos más de los 32 bits permitidos: 2+31=33 bits en cada cadena. Tenemos que volver a desplazar y mover ciertos alumnos (en nuestro caso los últimos) para reasignarlos en la siguiente cadena:

00-001010101011010110110101101011
01-011010011011101110001110101110
10-1101

Por ahora ya hemos terminado con este sencillo ejemplo. Los lectores más avanzados habrán observado que utilizando 2 bits para determinar la posición de la fila podemos tener un total de 4 filas ordenadas, definidas por 00, 01, 10 y 11 que, en formato decimal, indican 0, 1, 2 y 3. Dado que estemos permitiendo un total de 30 bits para los alumnos, podríamos tener hasta 120 (30x4) alumnos almacenados mediante este sistema. ¿Y si queremos almacenar 121 alumnos? ¿O 125? La respuesta tendrá que pensarla cada uno.

Conclusión

Inicialmente hemos planteado un único problema: tenemos 64 alumnos y queremos almacenar su género. Para ello podemos ordenarlos alfabéticamente a todos según el apellido, y asignarle un 0 a los niños y un 1 a las niñas.

Con registros de 64 bits la implicación es directa: un bit para cada alumno. Tendremos una única cadena y no necesitamos más información.

Con registros de 32 bits podemos pensar que inicialmente necesitamos dos de ellos, cuando en realidad necesitamos, al menos, tres: es necesario determinar el orden, algo que puede parecer nimio pero que es vital, pues como no tengamos esas cadenas bien ordenadas la información almacenada será incorrecta.

¿Dónde utilizamos los 'bits'? Las arquitecturas de 64 bits

Cuando hablamos de 64 bits nos referimos, generalmente, al tamaño de cualquier estructura de datos que, en este caso, permite almacenar 64 bits de 'algo'. Puede ser el género de un alumno, su edad o su estatura. En estos dos últimos casos debemos tener en cuenta que cada alumno ocupa más de un bit, ya que la información no puede ser representada sólo con 0 o 1.

ARM Cortex-A57

Cortex-A57, uno de los primeros ARM 64 bits que saldrán al mercado

En las últimas semanas se ha hablado mucho sobre arquitectura de 64 bits con el lanzamiento del iPhone 5S que es considerado el primer smartphone con esos 64 bits. ¿Qué significan esos '64 bits'?

Decimos que un procesador tiene una arquitectura de 64 bits cuando sus registros tienen espacio para almacenar 64 bits. 'Registro' es una palabra que silenciosamente hemos utilizado anteriormente, y que técnicamente se refiere a un pequeño espacio de almacenamiento físico dentro de los procesadores donde se pueden guardar 64 0 o 1. Existen registros por prácticamente cualquier componente, ya sean de 64 bits o de otro tamaño.

La mejor y más sencilla representación para un registro de 64 bits sería, simplemente, 64 huecos numerados (del 0 al 63), con espacio para almacenar ceros o unos. De forma homóloga, un procesador con arquitectura de 32 bits maneja registros de 32 bits.

Ikea Expedit

Cuatro registros de 4 bits cada uno, cortesía de Ikea

USPS Letter Boxes

Un montón de registros en una oficina de USPS (vía Wikipedia)

Un procesador de 64 bits puede gestionar mayor cantidad de información que uno de 32 bits, ya que sus registros son de mayor tamaño. Pero claro, que un procesador tenga registros de 64 bits no implica directamente que vaya a aprovechar todos ellos al máximo: como es habitual, es necesario que el sistema operativo sea compatible y que el software pueda sacarle partido a los nuevos tamaños.

Si nos ceñimos al iPhone 5S, incorpora una versión específica de iOS 7 compatible con 64 bits. Esta compatibilidad es necesaria para que el sistema pueda tratar y operar con registros de 64 bits, en vez de los 32 más habituales. Volviendo a un ejemplo real podemos imaginar una bandeja con 64 huecos donde ponemos elementos (por ejemplo patatas y cebollas para hacer una tortilla) que más adelante cortará un robot. Si ese robot tiene 64 brazos y es capaz de gestionar todos los elementos a la vez, perfecto; si sólo tiene 32 brazos tendremos que realizar dos pasadas, e incluso si no está preparado para gestionar esas dos pasadas es posible que la mitad de los elementos no lleguen a manipularse nunca y, por tanto, nuestro sistema será inválido.

Los 64 bits son importantes para un componente fundamental de los sistemas operativos: el direccionamiento de memoria. El microprocesador de un computador (sobremesa, portátil, smartphone, cualquiera) está continuamente determinando dónde leer y escribir información dentro del dispositivo de almacenamiento, y estas operaciones se realizan a través de cadenas de bits que guardan cierta información (en la cabecera) para evitar errores, colisiones, etc. Un breve resumen sobre el funcionamiento del direccionamiento de memoria en Intel x86 de 64 bits (denominado x86-64) puede encontrarse en Wikipedia, aunque las referencias oficiales las tiene Intel en su página web en un enorme manual de unos cuantos miles de páginas.

Repercusiones en nuestros móviles

iPhone 5S es el primero en llegar a la meta de los 64 bits en smartphones, pero no será el único. ARM está preparando los Cortex-A53 y A57 de 64 bits que previsiblemente llegarán al mercado de cara al próximo año. Los sistemas operativos tendrán que actualizarse para ofrecer la compatibilidad con los nuevos tamaños de los registros, por supuesto.

Dado que se amplían los registros el procesador es capaz de hacer más en menos tiempo, utilizando menos ciclos de reloj

Que un sistema sea de 64 o de 32 bits es algo completamente transparente al usuario, y las mejoras que pueden producirse serían a nivel de funcionamiento interno del sistema. Dado que se amplían los registros, el procesador es capaz de hacer más en menos tiempo, utilizando menos ciclos de reloj y, por tanto, consumiendo menos energía. Si estos conceptos os suenan extraños podéis echarle un vistazo a nuestro especial CISC frente a RISC, donde los explicamos junto al genial algoritmo de la tortilla de patata.

Si bien la teoría dicta lo que hemos expuesto en el párrafo anterior, la práctica es mucho más compleja. Un smartphone suele operar muchas pequeñas cadenas de datos al tener multitud de pequeños procesos ejecutándose en segundo plano. Además, si nos centramos en el consumo energético, tiene otros componentes que afectan de forma mucho más notable a la autonomía del smartphone como la pantalla y su luminosidad. El salto a los 64 bits es una evolución natural que repercutirá en una cierta mayor rapidez a la hora de procesar información (por ejemplo al añadir un filtro a una fotografía), pero que en el uso cotidiano apenas aportará diferencias respecto de lo que conocemos, pues salvo alguna excepción el software más convencional no requiere de esta evolución.

Si nos fijamos en el rendimiento podemos acudir a los siempre geniales análisis de AnandTech, donde en esta ocasión hablan de la ejecución de varios algoritmos en sus versiones de 32 y 64 bits. La mejora obtenida depende enormemente del tipo de algoritmo que se utilice, aunque sí puede concluirse que en general se obtendrá una diferencia bastante significativa en torno al 30%, excluyendo algunas pruebas en las que se obtienen cifras superiores al 800%.

Anandtech 32 64 bits benchmarks

Pero esto son algoritmos teóricos y pruebas puntuales, los denominados benchmarks. En aplicaciones de uso general las cosas cambian radicalmente, ya que el software de uso diario está lejos de ser tan exigente. Aún es necesario que muchos desarrolladores actualicen sus respectivas aplicaciones a los 64 bits, con lo que todavía no podemos determinar el porcentaje de mejora debido al salto de los 32 a 64 bits. También hay que sumar otro problema, y es que iPhone 5S no sólo realiza la evolución a los 64 bits, si no que también utiliza un procesador renovado Apple A7 con diferentes núcleos y un nuevo juego de instrucciones respecto del A6 anterior.

Un vistazo al pasado: esto ya ocurrió hace diez años

La evolución de los 32 a los 64 bits no es nueva. Los 64 bits ya llegaron a los procesadores de PC en 2003.

A pesar de que Intel es la principal desarrolladora de la arquitectura x86, fue AMD quien en 1999 empezó a desarrollar una extensión de 64 bits sobre la IA32 de Intel. La finalizaron en agosto del año 2000 y pusieron el primer procesador compatible AMD 'Opteron' en 2003. Poco después llegó la primera CPU doméstica preparada para 64 bits, AMD Athlon 64 3200+ de un núcleo a 2.0 GHz., proceso de manufactura de 130 nanómetros.

AMD Athlon 64

AMD Athlon 64 3200+, según el análisis del 2003 de XbitLabs

En 2003, uno de los problemas más comunes fue la compatibilidad del software y el sistema operativo

A pesar de que el hardware ya estaba preparado, el software aún llevaba un par de años de desventaja. Microsoft lanzó Windows XP 64 bit Edition en 2005, cuatro años más tarde del original de 32 bits de 2001 y con dos de retraso respecto de los Athlon 64. Uno de los problemas más comunes era la compatibilidad del software con el sistema operativo, pues en el sistema de 32 bits no podías instalar programas de 64 (lógico), pero... en el sistema de 64 bits no se podían utilizar programas de 32 bits. Por entonces prácticamente todo eran versiones de 32 bits, con lo que aquel Windows XP 64 bits quedó en una anécdota más que en algo útil. Más tarde Microsoft lanzó Windows Vista y las sucesivas versiones que solucionaron este problema de incompatibilidad.

La intención de AMD y otros con aquellos lanzamientos de 2003 y años posteriores no era buscar una mejora importante en el rendimiento, si no utilizar de forma más óptima el direccionamiento de la memoria del que hablábamos antes. Un sistema de 32 bits permite utilizar un registro de 32 posiciones para gestionar la memoria RAM. Hasta 2^32 posibilidades, esto son 4294967296 bits: 4 GB, que es la mayor cantidad con la que puede operar un sistema de 32 bits. Si bien por aquella época lo habitual era encontrar ordenadores con 512 MB, 1 o 2 GB de RAM, ya había algunos usuarios que buscaban llegar más allá de los 4 GB y, por tanto, la evolución a los 64 bits era necesaria.

La mejora producida ha sido quizá un tanto exagerada. De los 4 GB máximo admitidos en los 32 bits hemos pasado a 64 posiciones permitidas, en total 2^64 = 1,8x10^19, unos 16 exbibytes en los sistemas de 64 bits, aproximadamente 16.000.000 Terabytes. En la actualidad Windows 8 limita la cantidad a 192 o 512 GB, según versión. Parece que no tendremos problemas de direccionamiento de memoria por un tiempo.

Samsung LPDDR2

Módulos de memoria RAM LPDDR2 para smartphones, de Samsung

Es necesario comentar que los smartphones aún están lejos de alcanzar ese límite de 4 GB. La mayoría de modelos optan por 1 o 2 GB, con alguno que llega hasta los 3. No parece que sea necesaria más cantidad de memoria durante un tiempo y por tanto los 64 bits no serán un requisito indispensable hasta dentro de unos años, si bien es cierto que es muy interesante ir evolucionando para que los desarrolladores de software tengan el tiempo suficiente para adaptar sus programas. El salto de los 32 a los 64 bits no será instantáneo y durará varios meses, incluso años, con lo que adelantarse a ese momento puede considerarse una decisión muy sabia. Seguramente estudiaron lo que ocurrió en el mundo PC hace una década y han sabido rectificar a tiempo.

¿Qué cambiará con esos 64 bits en smartphones? Conclusiones

Lo que a priori es un gran cambio (duplicamos los 32 bits anteriores) es realmente una evolución más de la tecnología. Doblar el tamaño de registro puede dar lugar a pensar que estamos duplicando el rendimiento, cuando en realidad estamos muy lejos de llegar a esa afirmación.

Los 64 bits repercutirán en un mayor rendimiento en algunas tareas, aunque en aplicaciones generales no tendrán gran impacto.

Las repercusiones de implementar una arquitectura de 64 bits son reales y podrán notarse, pero de forma mucho más tenue de como muchos piensan. Ampliar el tamaño de las operaciones admitidas por el procesador es de gran importancia en ciertas tareas, como por ejemplo la codificación y decodificación de algoritmos como SHA o AES, aunque en aplicaciones generales no tendrá un gran impacto.

Si nos centramos en alguna característica palpable esa es, sin duda alguna, la memoria RAM. Pasar de 32 a 64 bits implica poder direccionar más de 4 GB de memoria RAM, algo que es posible hoy en día no sea necesario pero que no tardaremos muchos años en utilizar.

Ya por último los 64 bits son, a día de hoy, una exclusividad de Apple y su iPhone 5S en el mercado, pero pronto llegarán al resto de plataformas. ARM está preparando nuevos núcleos Cortex-A50 que pretenden llegar al mercado de cara al próximo 2014, inicialmente en las gamas más altas. Con estos nuevos procesadores también tendrán que llegar actualizaciones de los sistemas operativos que añadan el soporte al renovado hardware, algo que no debería tardar mucho tiempo en producirse.

En definitiva, estamos ante una evolución natural del hardware y, con él, también del software. Algo que ya vivimos hace una década en equipos de sobremesa, y de lo que hemos aprendido para no cometer los mismos errores. Será una evolución completamente transparente para el usuario con la que lo único malo que podemos obtener es una mejora en el rendimiento menor de la que muchos prevén.

Comentarios cerrados
Inicio