¿Por qué no hay un procesador de 256 bits o 512 bits o 1024 bits?

Por la misma razón, no hay 256 carriles de carretera o 256 coches de conteo de pasajeros; no lo vas a necesitar, es más caro y menos eficiente.

Los 32 bits o 64 bits de un procesador generalmente significan el tamaño de un registro. Esto implica el tamaño del operando en la operación que la CPU puede realizar; como la CPU puede agregar o multiplicar 2 números de 32 bits, puede cargar desde una dirección de memoria como máximo de 32 bits de ancho (de ahí la limitación de 4 GB), etc.

En la mayoría de los lenguajes de programación, los tipos de datos básicos no necesitan más de 64 bits. Esto ofrece números enteros lo suficientemente altos, números flotantes lo suficientemente precisos y seguramente suficiente espacio para un carácter (las cadenas son matrices de caracteres) para la gran mayoría de las operaciones. Si alguien necesita valores más altos, se puede lograr a través del software.

Dado que los lenguajes de programación no necesitan registros más grandes, hay suficiente memoria para abordar, no hay razón para crear registros más grandes. Hacer esto creará una CPU más costosa con mayor consumo de energía, cuyos programas ocuparán más espacio y eso no será más rápido para la mayoría de los programas.

Depende de lo que quieras decir con “bits”. Hay muchas cosas que tienen un “número de bits” en un procesador. Algunos, como un bus de transferencia de memoria, pueden tener un gran número de bits para tener un alto rendimiento (lo que básicamente significa transferir muchos bits por segundo).

Como han dicho otros, en realidad puede usar muchos bits para el cálculo, e incluso los procesadores de 64 bits pueden aplicar una sola operación a un vector de 512 bits (a pesar de que esos bits en realidad no representan un solo número).

Cuando las personas se refieren a procesadores de 32 o 64 bits, generalmente se refieren al número de bits utilizados para representar de forma nativa un número entero y al número de bits para representar una dirección. Este último es posiblemente más importante.

Cuando se trata de datos, especialmente datos almacenados en RAM, que son datos que se están procesando, un programa tiene que saber cómo identificar individualmente partes de los datos. Esto se hace a través de direcciones. Cada byte tiene una dirección y los datos están formados por grupos de bytes.

En un procesador habitual de 32 bits, estas direcciones se representan como enteros de 32 bits sin signo, que pueden representar números de 0 a 4 mil millones. Eso significa que un programa que se ejecuta en dicho procesador puede direccionar hasta 4 GiB de datos. Esa es una gran cantidad de datos. Pero en estos días los datos son cada vez más grandes.

Por ejemplo, las películas 4K pueden superar esa cantidad de datos, por lo que los programas que manipulan ese tipo de video no pueden cargarlo todo en la memoria para procesarlo si se ejecuta en un procesador normal de 32 bits. Cuando piensa en computadoras que ejecutan servidores para compañías de Internet, manejan muchos más datos porque normalmente manejan datos para múltiples usuarios que los usan al mismo tiempo.

Antes de que las computadoras de 64 bits se generalizaran, algunas soluciones ya habían comenzado a aparecer. Por ejemplo, los procesadores x86 de 32 bits pueden manejar direcciones de hasta 40 bits (si no recuerdo mal). El problema era que tenía que usar algunas operaciones no triviales para representar secciones de memoria adicional en el formato de dirección de 32 bits. Así que usar más de 4 GiB ya era posible, pero no era trivial.

El problema es que muchas operaciones de direccionamiento son relativas. Un ejemplo típico es una matriz. Una matriz es un grupo de datos que se almacena continuamente, es decir, un elemento se almacena inmediatamente después de otro. Puede obtener un elemento específico en la matriz utilizando la dirección del primer elemento agregado a la dirección relativa (que es el tamaño del elemento multiplicado por la posición) del elemento deseado. Como puede ver, necesitamos realizar operaciones aritméticas usando direcciones (representadas como enteros) para usar los datos de manera más flexible y eficiente.

Es por eso que los procesadores de 64 bits duplicaron el número de bits en la representación de direcciones y en operaciones de enteros. Ahora se pueden abordar más datos de manera efectiva.

La pregunta ahora podría ser, ¿por qué 64 y no 60 o 40 (como ya se inició hace algunos años)? Probablemente hay muchas razones para tal diseño, pero la más simple que se me ocurre es que debido a que todavía son posibles 32 operaciones (y operaciones de 16 y 8 bits), teóricamente podrías usar la mayoría del mismo hardware para hacer dos operaciones de 32 bits. . No sé si esto realmente se usa dentro de los procesadores, pero es una razón que creo que es válida. Otro ejemplo podría ser que las operaciones de bits son más fáciles de implementar con números que son potencias de dos, y 64 es la próxima potencia de dos después de 32.

A pesar de que 64 bits permiten direccionar hasta 16 EiB de datos, los procesadores actuales de 64 bits limitan físicamente la RAM direccionable a un valor más bajo (menos de 1 TiB), porque hasta ahora nadie ha agregado esa cantidad de RAM para que se aborde, por lo que incluso se pueden ignorar algunos bits (es más complicado que eso, porque las asignaciones se utilizan para asegurarse de que un programa no acceda a la memoria que no es direccionable, pero esto sucede detrás de escena y el programa ni siquiera sabe que está sucediendo, solo sabe que algo extraño está sucediendo cuando intenta usar más memoria de la que está disponible, pero es culpa del usuario por no comprar suficiente 😉).

Ahora, para responder finalmente la pregunta de por qué no hay procesadores de 128 bits o más, la respuesta es que la mayoría de la gente no lo usaría, y producir dichos procesadores sería más costoso. Por lo tanto, la respuesta es simplemente que no vale la pena (todavía).

¿Cuándo valdrá la pena? Probablemente en unas pocas décadas. 64 bits pueden representar muchos datos. Sin embargo, la humanidad ha demostrado que tiene la capacidad mental de idear formas de utilizar cada vez más datos. Lo que significa que probablemente lleguemos a un punto similar en el futuro donde la gente querrá ejecutar programas que operen con grandes datos (¿películas holográficas?). Cuando llegue ese día, los procesadores de 128 bits pueden estar disponibles. En realidad, los 128 bits permiten direccionar más datos de los que están actualmente presentes en todo el planeta, por lo que no creo que veamos computadoras de 256 bits, pero el tiempo probablemente demuestre que estoy equivocado.

Como no es necesario, como ve, tener un tamaño de palabra mayor a 64 bits no mejorará el procesador. Cuando cambiamos a arquitecturas de 64 bits, lo hicimos porque con 32 bits, solo podíamos direccionar 4 GB de RAM en total.

Incluso si tenía más de 4 GB de RAM, por ejemplo, cuando instala una versión de 32 bits del sistema operativo en una máquina que tiene 8 GB de RAM y admite 64 bits. No se podrá acceder a toda esa memoria adicional, ya que no se puede abordar. Prácticamente el equivalente práctico de quedarse sin códigos postales.

Otra razón por la que cambiamos a 64 bits es que podemos indexar muchas más instrucciones con él. Los procesadores de 64 bits admiten instrucciones mucho más diferentes que las de 32 bits, y eso permite a los compiladores crear mejores binarios de rendimiento, que aprovechan estas instrucciones más especializadas.

La conclusión es que a partir de ahora, los procesadores de 64 bits pueden abordar más RAM de la que tendremos en un futuro muy previsible e indexar más instrucciones de las que tenemos o necesitamos actualmente.

No habría muchas ventajas prácticas en tener procesadores como ese, excepto quizás que los procesadores puedan procesar números más grandes de una vez, pero lo que generalmente hacemos cuando necesitamos agrupar números es usar un GPGPU (también conocido como Procesador de Gráficos), que son muy bueno para descifrar números, pero no tanto en todo lo demás que hace tu CPU normal.

Un par de respuestas ya a esta pregunta con respecto a la memoria direccionable que son buenas.

Solo quería agregar un poco sobre cómo esto puede no ser tan práctico desde una perspectiva computacional y de costos.

Cuando dice un procesador hipotético de 1024 bits, supongo que está insinuando que podríamos sumar potencialmente dos números de 1024 bits en una ALU increíblemente reforzada. Primero, tener ese hardware probablemente sería increíblemente costoso. Es más metal, más silicio, más $$. Las ALU de 128 bits de ancho son bastante raras y van a procesadores de propósito muy especial.

Hay procesadores de propósito especial, DSP y procesadores gráficos, disponibles en este momento que pueden manejar operaciones de 128 bits + en una sola instrucción. En muchos de esos casos, no agrega números tan grandes que necesitan 128 bits para ser representados.

Para la mayoría de los casos, probablemente empaque números de 4 × 32 bits en un procesador / ALU con capacidad de 128 bits para hacer cosas como agregar 4 pares de números de 32 bits con una sola instrucción. Es difícil encontrar un caso de uso en el que necesitemos agregar dos números de 64 bits o menos dos números de 128/512/1024 bits juntos.

Si haces los cálculos, 2 ^ 64 ya es muy grande.

También en tierra de software, puede programar cosas que pueden agregar cualquier cosa. Puede agregar dos números de 1024 bits en tierra de software, pero no espere que suceda en una sola instrucción.

Los hay, pero esos son procesadores gráficos.

Probablemente esté pensando en CPU de uso general, el razonamiento es simple:

No necesitamos ese tipo de precisión en una sola instrucción de CPU, y las direcciones más largas conllevan una penalización de rendimiento real.

Por ejemplo, la mayoría del código de 64 bits, debido a que tiene una dirección más larga, se ejecutará un poco más lento que el código equivalente de 32 bits. El código de 64 bits también tendrá un tamaño binario mayor que el código de 32 bits, los cuales son innecesarios si no tiene la intención de hacer cosas que el código de 32 bits no puede hacer bien (es decir, utilizar más de 4 GB de memoria) .

Hasta que haya una necesidad de usar más de 16.777.216 terabytes de memoria a la vez, queda poca necesidad de una CPU de 128 bits de uso general, mucho menos 256, 512 o 1024.

Una razón como ya se señaló, porque en realidad no la necesitará para los programas que se utilizan actualmente en el mercado.

En segundo lugar, debido a que la competencia en el sobre de energía de la computadora de escritorio / portátil está tristemente muerta. De lo contrario, obtendría cpus de 512 bits, 1024 bits, maldita sea la utilidad.

En tercer lugar, pero no menos importante, porque las aplicaciones que podrían usar el poder “excesivo” del cpus, en realidad no están desarrolladas y usted está atrapado con aplicaciones heredadas, bautizadas con nuevas versiones de nombres de vez en cuando, por lo que no se queja tanto .

Tenga en cuenta que, no importa si la Ley de Moore con respecto a los CI está a punto de morir, este no fue el caso durante casi una década. Entonces, usted, al no tomar versiones significativamente mejores de cpus, no tuvo nada que ver con el fin de la tecnología (han estado experimentando con cpus de 15 nm desde al menos 2002).

Y no desarrollar nuevas aplicaciones que pudieran aprovechar cpus más fuertes no tenía nada que ver con la utilidad, ni con las características específicas del mercado de cada período de tiempo. Recuerde que el éxito de un producto en el mercado es principalmente publicidad y exageración. Podrían hacerlo con computadoras de escritorio y portátiles, pero simplemente no querían.

La respuesta corta es que no hay necesidad de ello, al igual que para los procesadores de 128 bits, puede ver la respuesta de Elad Ben-Tzedeff a ¿Por qué no hay CPU de 128 bits?