sábado, 2 de febrero de 2019

El mito de las consolas de 128 bits

En el salto de la tercera a la cuarta generación de consolas de videojuegos se habló del paso de los 8 bits a los 16 bits. De forma similar sucedió con el paso de la cuarta a la quinta generación, dando el salto de los 16 bits a los 32 bits. Diversa publicidad hizo alusión a esto para indicar un incremento de poder en dichas máquinas y con esto en mente llego la Atari Jaguar que poseía una "potencia" de 64 bits (que en realidad era de la suma de bits de sus dos microprocesadores, "Tom" para gráficos y "Jerry" para audio, de 32 bits cada uno), más tarde llego la Nintendo 64 que, como bien indica, su principal característica era su microprocesador de 64 bits.

Es cuando se empieza a hablar de las maquinas sucesoras a la quinta generación, la sexta generación, donde nace la idea de las consolas de 128 bits, obviamente por duplicar el "poder" de los 64 bits.

Pero ¿qué hace a una consola ser de determinados bits?

Respuesta larga:

Sus componentes electrónicos, procesadores generales, procesadores gráficos, procesadores de audio, cada uno con sus propios registros y diversos bus de comunicación, así como memorias ROM, RAM, EEPROM, NAND, etc. que contienen celdas de cierto tamaño que deben ser direccionadas para poder ser leídas y/o escritas. Considerando el número de bits tanto de ancho de bus como de tamaño de los registros, tamaño de las celdas de memoria y tamaño de los tipos de dato de los diversos microprocesadores.

Respuesta corta: Su microprocesador principal.

Ahora ¿qué hace a un microprocesador ser de determinados bits?

Respuesta corta: El tamaño del tipo de dato entero.

Respuesta larga:

A muy grandes rasgos un microprocesador realiza operaciones algebraicas con dos tipos de datos, enteros y de punto flotante, algunos microprocesadores usan diferentes tamaños de bits según el tipo de dato y algunos usan una técnica llamada SIMD (una instrucción, múltiples datos, por sus siglas en inglés), en la cual, por ejemplo, si quieres sumar cuatro enteros de 16 bits con otros cuatro enteros de 16 bits los "justas" formando dos datos de 64 bits los cuales sumas y colocas el resultado de 64 bits en un registro denominado SIMD vector.

Si bien existen otras características (como el ancho del bus de direcciones, el ancho del bus de datos, el tamaño del registro para almacenar direcciones de la memoria principal, etc.) que también tienen su propio tamaño de bits, no determinan la precisión de las operaciones algebraicas, más bien afectan la velocidad de procesamiento y la cantidad de memoria que puede direccionar el microprocesador.

En consecuencia, tenemos al menos tres características (tamaño del tipo de dato entero, tamaño del tipo de dato de punto flotante y tamaño del SIMD vector) que determinan con cuantos bits opera algebraicamente un microprocesador.

Sabiendo lo anterior y discriminando otros componentes (microprocesadores secundarios, microprocesadores gráficos, microprocesadores de audio, etc.) revisemos los microprocesadores principales de algunas consolas.

Consola Microprocesador Entero (bits) Flotante (bits) SIMD vector (bits)
Magnavox Odyssey² Intel 8048 8 - -
ColecoVision Zilog Z80 8 - -
Intellivision CP1600 10 - -
TurboGrafx-16 HuC6280A (WDC 65C02) 8 - -
Neo Geo Motorola 68000 16 - -
Atari 2600 MOS 6507 8 - -
Atari 5200 MOS 6502 8 - -
Atari 7800 Atari SALLY 6502 (MOS 6502) 8 - -
Atari Jaguar Motorola 68000 16 - -
Sega SG-1000 NEC 780C (Zilog Z80) 8 - -
Sega Master System Zilog Z80 8 - -
Sega Genesis Motorola 68000 16 - -
Sega Saturn Hitachi SH-2 (x2) 32 32 -
Sega Dreamcast Hitachi SH-4 32 64 -
Xbox Intel Pentium III/Celeron (Coppermine-based) 32 64 128
Xbox 360 Xenon (PowerPC 970) 64 64 128
Xbox One Durango (AMD Jaguar) 64 64 128
Xbox One X Scorpio (AMD Jaguar) 64 64 128
PlayStation MIPS R3000 32 32 -
PlayStation 2 Emotion Engine (MIPS R5900) 64 32 128
PlayStation 3 Cell Broadband Engine (PowerPC 970) 64 64 128
PlayStation 4 Liverpool (AMD Jaguar) 64 64 128
PlayStation 4 Pro Neo (AMD Jaguar) 64 64 128
NES Ricoh 2A03 (MOS 6502) 8 - -
SNES Ricoh 5A22 (WDC 65C816) 16 - -
Nintendo 64 NEC VR4300 (MIPS R4300i) 64 64 -
GameCube Gekko (PowerPC 750CXe) 32 64 64
Wii Broadway (PowerPC 750CL) 32 64 64
Wii U Espresso (PowerPC 750CL) 32 64 64
Nintendo Switch Tegra X1 (x4 Cortex-A57 + x4 Cortex-A53) 64 64 128

Si consideramos sólo el microprocesador principal, consolas como la TurboGrafx-16 o como la Atari Jaguar pierden mucho de su "poder", ya que su "conteo de bits" reside en chips secundarios. Pero podemos decir que la TurboGrafx-16 es una consola de 16 bits con corazón de 8 bits y que la Atari Jaguar es una consola de 32 bits (x2) con corazón de 16 bits.

Llegados a este punto es más que evidente que la cantidad de bits no representa la "potencia" de una consola. Pero si es así ¿por qué es relevante? y además ¿por qué no se comercializan computadoras o consolas de videojuegos mayores a 64 bits?

Queremos muchos bits, pero tampoco necesitamos tantos.

El principal motivo para usar más bits es el trabajar con una mayor diversidad de valores en una sola operación. Por ejemplo, con 8 bits puedes representar números del 0 al 255. Si quisieras sumar 1,000 más 723 en un procesador de 8 bits tendrías que "partir" esa suma en dos operaciones para obtener el resultado. Y si quisieras sumar 1,000,000,000 más 723,469,085 en un procesador de 8 bits tendrías que "partir" esa suma en cuatro operaciones para obtener el resultado. Además, a mayor cantidad de bits mayor cantidad de celdas de memoria es capaz de usar directamente el microprocesador.

Con 16 bits puedes representar números del 0 al 65,535 y puedes direccionar 64 kibibytes de memoria.

Con 32 bits puedes representar números del 0 al 4,294,967,295 y puedes direccionar 4 gibibytes de memoria.

Con 64 bits puedes representar números del 0 al 18,446,744,073,709,551,615 y puedes direccionar 16 exbibytes de memoria.

Con 128 bits puedes representar números del 0 al 340,282,366,920,938,463,463,374,607,431,768,211,455 y puedes direccionar 281,474,976,710,656 yobibytes de memoria.

Si bien la técnica SIMD trabaja con 128 bits en realidad esto no representa un valor de 128 bits, sino dos valores de 64 bits o cuatro valores de 32 bits unidos para ser manipulados en paralelo.

En la práctica rara vez es necesario ocupar valores tan grandes como los disponibles para 64 bits y mucho menos como los disponibles para 128 bits.

Por ejemplo, la superficie del planeta tierra (incluidos océanos, mares, lagos, etc.) medida en milímetros cuadrados es aproximadamente de 510,072,000,000,000 (un valor que se puede representar con 49 bits).

Otro ejemplo, la edad aproximada del universo es de 13,800,000,000 de años. 18,446,744,073,709,551,615 segundos equivalen aproximadamente a 584,942,417,355 años, más de 42 veces la edad del universo.

En conclusión

Las consolas de 128 bits, 256 bits, 512 bits, 1024 bits… son sólo un mito.

Y los sistemas que en verdad son de determinados bits, en base a sus características técnicas en conjunto, sólo llegan a 64 bits por que cubren, sobradamente, las necesidades de programación en general.