Esto es un poco "un megabyte debería ser suficiente para cualquiera", pero ...
Un espacio de direcciones planas de 64 bits permite hasta 4.300 millones de veces más espacio que un espacio de direcciones de 32 bits. Eso es 17.179.869.184 GiB.
Obviamente, la transición de 8 bits a 16 bits fue bastante rápida (estoy viendo cosas de una manera adolescente durante los años 80, ignorando todos esos mainframes y minis porque no podían ejecutar un puerto de Elite). La transición de 16 bits a 32 bits tomó un poco más de tiempo, y 32 bits en realidad duraron bastante tiempo.
Ahora que tenemos 64 bits, ¿sería estúpido decir "17,179,869,184 GiB debería ser suficiente para cualquiera"?
Esta es una pregunta de los programadores porque realmente tengo en mente el punto de vista de la programación. Incluso si una computadora algún día tiene una cantidad aparentemente infinita de memoria de trabajo, eso no significa que las aplicaciones necesiten ver un espacio de direcciones planas aparentemente infinito.
Básicamente, ¿podemos los programadores dar un suspiro de alivio y decir "bueno, independientemente de lo que puedan hacer los números enteros o las carrozas, al menos ya no tengo que preocuparme de que mis punteros sigan creciendo?".
fuente
Respuestas:
No creo que tengamos máquinas con más de 2 ^ 64 bytes de RAM en el futuro previsible, pero eso no es todo para lo que el espacio de direcciones es útil.
Para algunos propósitos, es útil asignar otras cosas al espacio de direcciones, siendo los archivos un ejemplo importante. Entonces, ¿es razonable tener más de 2 ^ 64 bytes de cualquier tipo de almacenamiento conectado a una computadora en el futuro previsible?
Tendría que decir que sí. Debe haber más de 2 ^ 64 bytes de almacenamiento, ya que solo son unos 17 millones de personas con discos duros de terabytes. Hemos tenido bases de datos de varios petabytes durante algunos años, y 2 ^ 64 son solo unos 17 mil petabytes.
Creo que es probable que tengamos un uso para un espacio de direcciones> 2 ^ 64 en las próximas décadas.
fuente
A menos que las computadoras comiencen a usar algunas tecnologías innovadoras que aún no existen, incluso en los laboratorios, tener más de 2 64 espacios direccionables no es físicamente posible con la tecnología de silicio actual . La tecnología está llegando a los límites físicos . El límite de velocidad (GHz) ya se alcanzó hace unos años. El límite de miniaturización también está muy cerca. Actualmente, la tecnología más avanzada en producción es de 20 nm, en los laboratorios es de 4 nm con transistores hechos de 7 átomos.
Solo para ponerlo en perspectiva, cuánto tiempo lleva desarrollar una nueva tecnología: las computadoras actuales se basan en transistores inventados en 1925, y la tecnología de silicio actual se remonta a 1954.
En cuanto a tecnologías alternativas:
fuente
for(unsigned __int128 i=0; i<2^128; i++){}
. Con la tecnología actual no hay mucho uso de enteros de 128 bits. Además de quizás volver al espacio de direcciones desprotegido, porque pisar accidentalmente la memoria de otras aplicaciones en un espacio de direcciones de 128 bits sería bastante imposible de hacer, incluso si estuviera escribiendo en direcciones aleatorias al azar.La supercomputadora Thorbjoern vinculada tiene aproximadamente 2 ^ 47 B de memoria física.
Asumiendo que la Ley de Moore es válida para la memoria de las supercomputadoras, se convertirá en 2 ^ 64 B de memoria física en solo 34 años. Esto es como "¡Dios mío, viviremos para ver eso!". Tal vez. Y de hecho, es fascinante. Pero igual de irrelevante.
La pregunta es, ¿necesito un espacio de direcciones de 128 bits para usar 2 ^ 65 B de memoria física?
La respuesta es NO . Necesito un espacio de direcciones de 128 bits para direccionar 2 ^ 65 B de memoria virtual de un solo proceso .
Ese es un punto clave de su pregunta: "¿Alguna vez las aplicaciones del mundo real necesitarán un espacio de direcciones planas de 128 bits ?". " Necesidad ", no del todo, puede arreglárselas con menos, hacer que el espacio de direcciones esté mapeado (no plano); pero entonces no tendría un "espacio de direcciones plano de 128 bits".
Como ejemplo, suponga que desea asignar a los átomos en la Tierra una dirección de memoria física (por cualquier razón, principalmente para proporcionar este simple ejemplo), comience en cero y siga contando (vuelva a mí cuando haya terminado). Ahora alguien más desea hacer lo mismo en Kepler-10c (que está a 568 ly de distancia).
No querrá un choque de direcciones, por lo que la otra persona asigna una dirección de memoria alta en el espacio de memoria plana disponible, que le permite a usted, a ellos y a las siguientes personas dirigirse directamente , sin asignar la memoria. Si no va a hacer eso o puede sobrevivir sin una relación uno a uno entre su memoria y su dirección (está dispuesto a implementar una matriz dispersa), entonces puede sobrevivir con una memoria miserable de 64 bits, o menos.
Cada vez que alguien propone " X cantidad de Y será suficiente ", tal predicción a menudo permanece de corta duración.
Entonces la pregunta es: ¿Cuándo tendremos procesos únicos , que usan 2 ^ 65 B de memoria? Espero que nunca
El gran problema de nuestro tiempo es que la potencia de procesamiento de una sola CPU es limitada. Hay un límite de tamaño definido por el tamaño de los átomos, y para un tamaño dado, hay un límite en la velocidad del reloj, dada por la velocidad de la luz, la velocidad a la que se propaga la información sobre los cambios en los campos magnéticos en nuestro universo.
Y en realidad, el límite se alcanzó hace unos años y nos hemos asentado a tasas de reloj inferiores a las que habían estado anteriormente. La potencia de la CPU ya no aumentará linealmente. El rendimiento ahora se mejora a través de la ejecución fuera de orden, la predicción de bifurcaciones, los cachés más grandes, más códigos operativos, operaciones de vectores y lo que no. Ha habido optimización arquitectónica .
Y una idea importante es la de paralelización. El problema con la paralelización es que no se escala. Si escribiste código lento hace 20 años, funcionó mucho más rápido hace 10 años. Si escribe código lento ahora, no será mucho más rápido en 10 años.
Los procesos que usan 2 ^ 65 B de memoria son un signo de extrema estupidez. Esto muestra que no ha habido optimización arquitectónica . Para procesar estos datos de manera sensata, necesitaría unos 10 millones de núcleos, la mayoría de los cuales pasaría tiempo esperando que algún recurso esté disponible, porque los núcleos que realmente adquirieron el recurso están utilizando memoria física a través de Ethernet en una máquina completamente diferente. La clave para lidiar con problemas grandes y complejos es descomponerlos en problemas pequeños y simples y no construir sistemas cada vez más grandes y complejos. Necesita particiones horizontales, cuando se trata de sh * tloads de datos.
Pero incluso suponiendo que esta locura continúe, tenga la seguridad de que 128 bits es suficiente :
Para utilizar un espacio de direcciones de 128 bits, necesitamos 2 ^ 133 bits, por lo que necesitamos 2 ^ 152 átomos . Suponiendo una distribución igual de átomos en la Tierra, veamos cuánta corteza debemos quitar para obtenerlos:
Por lo tanto, tiene 130 metros que recorrer en toda la superficie (incluido el 80% cubierto de agua, arena o hielo). No va a pasar. Incluso suponiendo que pueda desenterrarlo (risas) y que todo este asunto sea adecuado para ser procesado en chips, ¿de dónde obtendrá la energía?
fuente
Bueno, definitivamente podríamos usar un gran espacio de direcciones.
Imagina esto:
El espacio de direcciones no está limitado a una sola computadora. En cambio, una dirección identifica de forma exclusiva una celda de memoria en un espacio de direcciones universal. Por lo tanto, puede tener un puntero a una celda de memoria en cualquier computadora del mundo. Deberá haber algún protocolo para permitir la lectura desde la memoria remota, pero ese es un detalle de implementación. :-)
La memoria es Escribir una vez, Leer muchas, es decir, solo puede escribir datos en una dirección de memoria una vez. Para un valor mutable, deberá asignar una nueva pieza de memoria cada vez que cambie. Los programadores hemos comenzado a ver las ventajas de la inmutabilidad y la memoria transaccional, por lo que un diseño de hardware que ni siquiera permite sobrescribir la memoria puede no ser una idea tan imposible.
Combine estas dos ideas y necesitará un gran espacio de direcciones.
fuente
Las computadoras más capaces se vuelven, los problemas más complejos con los que se les pide que trabajen.
La supercomputadora más grande listada en top500.org es http://www.top500.org/system/10587 con alrededor de 220 Tb de RAM y 180000 núcleos. En otras palabras, eso es con lo que las "aplicaciones de la vida real" pueden trabajar en esta plataforma.
Las computadoras de hoy son tan potentes como las supercomputadoras hace 10-15 años (aunque la potencia informática puede estar oculta en su tarjeta gráfica).
Entonces, un factor 100 en memoria en 10-15 años significará que el espacio de direcciones de 64 bits será un factor limitante en aproximadamente 100 años (ya que log (100 millones) / log (100) es alrededor de 6) si la tendencia actual se mantiene.
fuente
Todo este hilo es bastante divertido de leer, una opinión muy fuerte a favor y en contra ...
Aquí algo ...
Entiendo por la pregunta que era una tecnología independiente y no estaba limitada por el tiempo. Por lo tanto, el desarrollo actual en silicio, las computadoras cuánticas o el ábaco Infinite Monkey Peddling son irrelevantes.
Los cálculos y extrapolaciones también son bastante divertidos, aunque la respuesta de back2dos funciona bastante bien para ilustrar el tamaño de lo que representa este número. así que trabajemos con eso.
Ponga su mente en el futuro donde el hombre ya no está atado al confín de su pequeño planeta, se desarrolló un medio de transporte realista para permitir el transporte a distancias muy grandes y las estructuras sociales (económicas, políticas, etc.) han evolucionado para trascender generaciones. Los proyectos faraónicos que abarcan se han convertido en lugares comunes. Centrémonos en dos aspectos de esta visión del futuro aún descabellada, si uno desea dedicar tiempo a explicar cada detalle, estoy bastante seguro de que podría racionalizarlo todo a través de una serie de evoluciones plausibles en las tecnologías actuales. En otras palabras, un futuro plausible, aunque improbable ... de todos modos ...
El primer proyecto llamado Coloso en memoria de esa primera computadora electrónica, ya que es la primera computadora planetaria. La Hermandad del Coloso de hecho ha descubierto un medio para capturar un pequeño planetoide y transformarlo en una computadora que funcione. Descubiertos recientemente en el cinturón de Kuyper, que es perticuladamente rico en isótopos fusibles, lo que lo hace energéticamente autónomo, hicieron que el proceso de construcción fuera completamente autónomo con sondas, robots, etc. En esta condición, sería concebible que el espacio de direcciones 2 ^ 64 sea algo limitado para este proyecto, ya que desean obtener un espacio de direcciones continuo para portar fácilmente las aplicaciones ya existentes para otro proyecto también en curso.
El otro proyecto es más un experimento en redes que un sistema físico, sin embargo, rápidamente demostró que se necesitaba un espacio de direcciones más grande. Hace 540 años, un joven hacker estaba jugando con la idea de crear una gigantesca red de bots. Internet ya se había expandido para incluir a las colonias nacientes alrededor del sistema solar, construyendo sobre los principales avances realizados en el poder de fusión. Básicamente, su idea era tener pequeños bots repartidos por la red, pero la carga útil estaba destinada a proporcionar una máquina virtual unificada donde se escribiría el código asumiendo que tenía todo el poder de todos los bots combinados. Se realizaron grandes esfuerzos en el compilador y la implementación para optimizar los retrasos y los algoritmos sofisticados diseñados para tener en cuenta la falta de fiabilidad inherente del medio subyacente. Se escribió un idioma específicamente para orientar este nuevo " nuestro hacker creó en su lugar una compañía paraguas y vendió la potencia informática al mejor postor. Cuando murió, donó esta botnet y todas las tecnologías a una fundación. En ese momento, la botnet ya había estado funcionando durante 64 años y ya había superado el espacio de direcciones 2 ^ 64 hace bastante tiempo rompiendo la preconcepción de 1000 años de que nunca necesitaríamos un espacio de direcciones más grande. Hoy en día, 2 ^ 128 es la norma y lo que se usará para Coloso, pero ya hay planes para expandir esto a 2 ^ 256. nuestro hacker creó en su lugar una compañía paraguas y vendió la potencia informática al mejor postor. Cuando murió, donó esta botnet y todas las tecnologías a una fundación. En ese momento, la botnet ya había estado funcionando durante 64 años y ya había superado el espacio de direcciones 2 ^ 64 hace bastante tiempo rompiendo la preconcepción de 1000 años de que nunca necesitaríamos un espacio de direcciones más grande. Hoy en día, 2 ^ 128 es la norma y lo que se utilizará para Colossus, pero ya hay planes para expandir esto a 2 ^ 256.
Probablemente podría proponer escenarios más plausibles que ilustren que sí ... es muy posible, es más, casi seguro, que algún día necesitaremos un espacio de direcciones mayor que este.
Dicho esto, sin embargo, no creo que pierda el sueño por esto, si su aplicación requiere un cierto espacio de direcciones para funcionar correctamente, lo más probable es que viva en una VM que le brinde todo lo que necesita ...
Por lo tanto ... respuesta corta ...
SÍ, lo más probable
pero
¿Por qué no lidiar con esto cuando surge el problema? Personalmente, nunca hago suposiciones en mis programas, por lo tanto, nunca tengo sorpresas.
fuente
Las ubicaciones de las direcciones tienen un costo logarítmico con respecto al ancho de la dirección, por lo que podemos considerar los límites superiores en función de los parámetros en cuestión:
Podríamos asumir las posibles configuraciones como el límite superior para la mayor dirección de memoria construible físicamente posible.
fuente
Bueno, creo que en los próximos años probablemente puedas respirar aliviado. Si observa la velocidad de la innovación en hardware, se puede observar que en los últimos años no se han producido avances significativos. Las CPU con frecuencias de 2.x GHz han existido desde hace un tiempo y cualquier aumento en la potencia de procesamiento hoy en día proviene de empacar más núcleos en el chip. La capacidad de la unidad sigue aumentando, pero no a la misma velocidad que hace 10 años.
Creo que nuestra tecnología actual se está acercando a los límites de la física.
¿Qué significa eso para el futuro? Creo que para obtener nuevos saltos cuánticos en el procesamiento de la información, deberán utilizarse tecnologías completamente nuevas. Es probable que estas tecnologías usen "software", aunque posiblemente en un contexto bastante ajeno a lo que es hoy. ¿Y quién sabe qué requisitos de espacio de direcciones tienen o pueden proporcionar? ¿O si el espacio de direcciones es incluso un concepto significativo en esa tecnología?
Así que no te retires de esto todavía.
fuente
Sí lo habrá. (¿Juegos? ¿Cosas relacionadas con la inteligencia artificial?)
Sin embargo, una pregunta más apropiada podría ser si contará para el programador típico. Piense en cómo Ruby convierte automáticamente los números de FixNum a BigNum y viceversa cuando sea necesario. Me sorprendería si otros idiomas (al menos los dinámicos) no hacen lo mismo eventualmente.
fuente
Almacenar esta cantidad de información es una cosa y hacer algo útil con ella es otra. Desde mi punto de vista, no veo la necesidad de este almacenamiento a menos que tengamos el poder de procesamiento para utilizarlo. Quizás almacenar en caché grandes bases de datos es una cosa, pero para el procesamiento numérico creo que primero necesitamos procesadores.
fuente
¿Las aplicaciones alguna vez necesitarán tanta memoria? Muy posible. Las aplicaciones como pronósticos meteorológicos, simulaciones físicas en general o criptografía probablemente siempre se beneficiarán de más memoria y más potencia de procesamiento. ¿Y quién sabe cuál será la aplicación asesina en 50-100 años? Pantallas holográficas? ¿Tablas de arcoíris para cada contraseña de 100 caracteres posible?
¿Es físicamente posible representar tanta memoria? Definitivamente posible. Por ejemplo, una computadora cuántica de 100 qubits puede representar el mismo número de estados que una computadora clásica de 2 ^ 100 bits. Mucho más que los 2 ^ 67 bits de espacio de direcciones que tenemos ahora. (Lo sé, una computadora cuántica de 100 qubits suena como ciencia ficción. No estoy convencido de que alguna vez sea posible construir una. Pero, por otro lado, lo mismo podría decirse de cualquier tecnología que se utilizará 50). o dentro de 100 años)
Pero dudo seriamente que los "espacios de direcciones planas" sean la principal preocupación para entonces. Tal vez estaremos desarrollando algoritmos cuánticos para entonces, donde el concepto de un "espacio de direcciones" no tiene mucho sentido. Incluso si las computadoras permanecen "clásicas" probablemente tendremos que lidiar con un número aterrador de unidades de procesamiento con memoria no uniforme unida a ellas.
fuente
¿Qué pasaría si cada ubicación de memoria tuviera una dirección global única?
FILE
,fopen()
, etc.fuente
Simplemente "pensando en voz alta" aquí, pero se me ocurrió que uno podría hacer cosas semánticas interesantes con los 64 bits restantes en una computadora, digamos, de 128 bits. Cf. la forma en que funciona la IP.
Estoy seguro de que la gente podría encontrar usos divertidos para algo como esto. :) ¿Alguien sabe para qué usa la PS3 sus direcciones de 128 bits? Seguramente no desperdiciarías toda esa memoria extra (y estoy hablando solo de la memoria para las direcciones reales, no a lo que esas direcciones apuntan). Direcciones como datos. Incluso podría codificar una rama en la dirección misma ... es decir, 0x [ifAddress] [elseAddress] Los sistemas multinúcleo también podrían beneficiarse de este tipo de segmentación. Y y...
fuente
¿Hay alguna razón para superar la arquitectura de 64 bits? (18,446,744,073,709,551,615 bytes de memoria direccionable)
Usando el estándar IEEE 1541-2002 sobre el uso de prefijos para múltiplos binarios de unidades de medida relacionadas con la electrónica digital y la computación, vemos que:
1 byte = 8 bits, 1 kilobyte = 1024 bytes, 1 megabyte = 1024 KB, 1 gigabyte = 1024 MB, 1 terabyte = 1024 GB, 1 petabyte = 1024 TB, 1 exabyte = 1024 PB
Y así sucesivamente para Zettabyte, Yottabyte, Xenottabyte, Shilentnobyte, Domegemegrottebyte, Icosebyte y Monoicosebyte.
Se estima que el almacenamiento total de la unidad Earth será de aproximadamente 2.500 Exabytes a partir de 2016.
Un registro de 64 bits puede acceder a 15 Exabytes de memoria directamente. Un registro de 128 bits puede acceder directamente a 3.40282367 × 10 ^ 35 Zettabytes. O 295,147,905,247,928,000 Monoicosebytes.
Por lo tanto, podemos ver que un registro de 128 bits estaría en una buena posición para acceder a toda la memoria de la Tierra, todo lo que se haya enviado a Internet, cada palabra hablada o escrita, cada película, y mucho más, durante bastante tiempo. .
Entonces, la respuesta es sí , a la espera de un marco que pueda apuntar a cualquier cosa digital que haya sido o sea alguna vez .
fuente
La mejor estimación que puedo encontrar para la cantidad de neuronas en un cerebro humano promedio es de alrededor de 86 mil millones. No podemos comparar directamente la RAM con las neuronas en general, pero en una red neuronal puede hacerlo. Toma varias direcciones para representar el estado de la neurona o una sinapsis. Así que arrojaré una conjetura salvaje y diré que estamos viendo algo así como un billón de direcciones para crear una red neuronal que sería comparable a un cerebro humano. Entonces, si eso se puede hacer, no veo por qué no iría mucho más lejos que eso. Los tipos de problemas que tal red podría contemplar estarían más allá de nuestras capacidades de comprensión, así como por qué tendrían que ser tan grandes para hacerlo.
fuente
Es el espacio de direcciones. Digamos que cambiamos el estándar C para que realloc no pueda cambiar el puntero utilizado. Puedo asignar 2 ^ 33 bloques de memoria hoy (requeriría 192 GB de RAM en mi Mac, 8 mil millones de veces puntero de 8 bytes y 16 bytes de espacio asignado, por lo que no puedo hacer esto ahora, pero podría comprar una Mac que pueda sin sacar una nueva hipoteca).
Y puedo reasignar cualquiera de estos punteros para contener 2 ^ 33 bytes. Sin embargo, no hay muchos al mismo tiempo :-) Si realloc no permite mover punteros y se permiten 2 ^ 33 bytes, los punteros originales deben estar separados por 2 ^ 33 bytes, lo que significa que se necesitan 2 ^ 66 bytes de memoria.
fuente
Claro, no veo ninguna razón por la que esa cantidad de espacio no sea necesaria en el futuro. Si consideras el desarrollo del juego, no hay límite en cuanto a cuán realista o complejo puede ser un juego, ¿verdad? (Detalle de los gráficos / número de polígonos utilizados y algoritmos que definen la interacción y el comportamiento de los objetos)
Quién sabe, dentro de 10 años podríamos estar jugando juegos de 10 TB con requisitos mínimos de 12 GB de RAM y un procesador de 8 núcleos. :PAGS
fuente
Hace 20 años, había 2.000 millones de personas menos en el planeta y la mayoría de los sistemas informáticos tenían memoria direccionable que se podía medir en kilobytes. Hoy, la población del mundo aumenta al mismo ritmo y el número de usuarios de computadoras aumenta exponencialmente cada año.
Es cierto que muy pocos sistemas necesitan un espacio de direcciones completo de 64 bytes. Sin embargo, algunos sistemas almacenan terabytes de información todos los días. Esto ha sido posible debido al aumento de los usuarios de computadoras y las velocidades de Internet. Ya podemos soportar velocidades de Internet de 10 GB / s después de solo 23 años después de que se inventó HTTP. A este ritmo, creo que sería una tontería no esperar 1 TB / so mayores velocidades de Internet en 50 años. Cuando todos podamos mover datos tan rápido, habrá más datos para almacenar, mientras que existirá más gente para almacenar estos datos y es casi inevitable que deba haber otra transición generalizada a un sistema de 128 bits, y eventualmente 256 y 512 bit.
fuente
Sí, las aplicaciones no llenan cada byte de espacio virtual. la aleatorización del diseño del espacio de direcciones obtendría el mayor beneficio.
fuente