Si por alguna razón tuviéramos que comenzar de nuevo, y construir computadoras completamente desde cero, pero con toda la retrospectiva de las últimas décadas de computación, ¿qué cosas haríamos de manera diferente?

Si tan solo pudiera reconstruir computadoras desde cero (¡aunque no puedo!),
Reemplazaría el inglés con algo más:

El sánscrito es un idioma probado por la lingüística como el más lógico del mundo. Por su gramática y su método de generación de vocabulario, Dhatu.
Si solo, las computadoras se hicieran en sánscrito, y si solo, las personas pudieran volver a aprender el sánscrito no demasiado viejo para hablar, podríamos interactuar directamente en lenguaje natural con la computadora.
Además, a diferencia de los alfabetos en inglés, el sánscrito tiene diferentes programas, que se leen exactamente como se escriben.
ex. La palabra inglesa ” who “, ¡nadie puede adivinar cómo leerla a menos que él lo sepa!
No es lo mismo con sánscrito y hindi.
Por lo tanto, las computadoras podrían traducir de manera más efectiva las palabras habladas en forma escrita y comprenderlas.

Otras lecturas:

Características del sánscrito que lo convierten en un lenguaje extraordinario.

NASA sobre sánscrito e inteligencia artificial por Rick Briggs

El modelo más antiguo para la ejecución de instrucciones es el modelo de Von Neumann: un programa es una lista de instrucciones que se refieren a ubicaciones de memoria para sus operandos y salidas; Se ejecutan secuencialmente.

Parece muy lógico y es muy fácil de programar. Sin embargo, no es cómo funciona el hardware, y cada vez más necesitamos capa tras capa de magia para que el hardware parezca comportarse de esa manera. Por ejemplo, las CPU modernas tienen múltiples instrucciones al mismo tiempo, en unidades aritméticas independientes o en la tubería de instrucciones generales. La siguiente instrucción no se inicia cuando finaliza la última, no, se hace de forma especulativa, superponiéndose con la actual, y si es necesario, el procesador dará marcha atrás en la decisión de iniciarla.

La memoria plana del modelo de Von Neumann también es una ficción. Era cierto hace 25 años (creo que el Pentium II fue el último procesador donde la memoria podía seguir el ritmo del procesador) pero ya no: la memoria es lenta, por lo que necesita cosas como cachés y TLB para almacenar datos más cerca del procesador que puede ser necesario más tarde, o captar secuencias para recuperar datos especulativamente.

Otra cosa incorrecta con el modelo de “flujo de instrucciones” es que un algoritmo a menudo tiene paralelismo intrínseco. Como acabo de señalar, el procesador también tiene paralelismo. Entonces, ¿por qué tenemos un modelo de instrucción sin paralelismo, donde necesitamos que el compilador descubra dónde fue el paralelismo que nuestro conjunto de instrucciones no podía expresar?

Ok, dos o tres propuestas.

1. Reemplace el modelo de “lista de instrucciones” por flujo de datos, donde las instrucciones forman un Gráfico Acíclico Dirigido, con cada instrucción indicando explícitamente de qué otras dependen. Si dos instrucciones tienen todas sus entradas disponibles, se pueden ejecutar en paralelo si el hardware lo permite.
1a. El flujo de datos definitivamente debería ser el modelo de programación, de modo que ya no necesitemos compiladores clarividentes.
1b. El flujo de datos probablemente también debería ser el modelo de ejecución. Ha habido algunos experimentos en la década de 1980 con computadoras de flujo de datos, y en cierto modo las GPU con CUDA son máquinas de flujo de datos. De hecho, el motor de ejecución fuera de orden de las CPU modernas ya es un pequeño motor de flujo de datos, simplemente invisible para el programador.

2. Actualmente, el costo del movimiento de datos es en realidad mucho más importante que la ejecución de instrucciones. Por lo tanto, debemos deshacernos de esta ficción de un modelo de memoria plana: los programadores deben hacer frente a la noción de localidad / no localidad de los datos. Será un buen truco crear un lenguaje de programación que permita al programador expresar esto sin que se convierta en una carga. (Tengo algunas ideas sobre esto en mi propia investigación)

3. Como alguien mencionó poderes de dos, seré contrario y abogaré por su abolición. ¡Utiliza primos de Mersenne en su lugar! El problema con las potencias de dos es que a menudo aparecen en nuestros algoritmos, pero si asigna datos o instrucciones que difieren en potencias de 2 al hardware que solo difiere mínimamente, obtendrá un uso desigual de los recursos. El ejemplo estándar, por supuesto, es el algoritmo FFT con su secuencia de potencias de dos. Esto afectará cada conflicto de caché y conflicto de banco de memoria, etc., que el hardware es capaz de tener. Ningún problema es que basamos todo en números primos. Los primos de Mersenne son atractivos porque están tan cerca de las potencias de dos, por lo que se pueden falsificar con una sobrecarga mínima en la parte superior del hardware de potencia de dos.

En el nivel más bajo, hubiera sido maravilloso si Ben Franklin eligiera una convención de carteles en la que los portadores de carga fueran cargados de manera negativa, en lugar de positiva. Muchos dolores de cabeza entre los estudiantes con dificultades se habrían aliviado.

Y en un alto nivel … Windows.

Mi opinión es que realmente no haríamos muchas cosas diferentes. Creo que el estado actual de la arquitectura de la computadora se debe a las lecciones aprendidas anteriormente. Por ejemplo, hubo un momento en que la computación analógica se usaba para calcular resultados en tiempo real, como cómo mover un radiotelescopio a su objetivo (este es solo un ejemplo de los usos de la computación analógica). Esto también fue cuando las versiones costosas de la computación binaria estaban disponibles. Analog fue más barato pero no preciso, tiene resultados reproducibles fácilmente precisos, mucha afinación y mantenimiento. De hecho, el uso de la computación binaria siempre fue generalmente más simple. El avance rápido de la computación binaria de los años 1930 y 1940 a finales de los 60 ha eludido el uso de todo lo relacionado con lo analógico. ¿Recuerdas las reglas de cálculo? Son analógicas y luego aparecieron calculadoras basadas en binarios. No más reglas de cálculo.

De lo anterior, la tecnología informática ahora se dirige en la dirección de la computación cuántica. Sería mejor preguntar qué hemos aprendido de la arquitectura binaria que se puede rediseñar bajo este nuevo paradigma. Todavía es costoso en este momento, pero un día será lo suficientemente barato como para usarlo en su muñeca o algún tipo de asistente de dispositivo personal nuevo, etc.

Creo que tratar la comunicación entre procesadores como una operación básica en el mismo nivel que acceder a los registros o la memoria, como Transputer, es una idea realmente poderosa que debería haberse explorado más a fondo, y lo habría sido si la arquitectura von Neumann no lo hubiera hecho ya. sido tan totalmente dominante

Combinaría memoria, un circuito informático y capacidad de transmisión en un bloque de construcción básico y empacaría la máquina con tetras de tales entidades. Haga que la intranet sea invisible de modo que parezca haber un entorno informático continuo. Desenfoque la distinción entre información y algoritmo. Luego adopte una metodología de programación basada en agente que se adapte a la especificada para el hardware. Trataría de evitar la aparición de sistemas operativos como algo más que la fontanería de fondo, adoptando un enfoque más ecológico en lugar de jerárquico para la gestión del sistema. Aborde la seguridad a través de una transparencia total y haga que la sociedad se adapte a eso en lugar de al revés, como una oficina abierta con esteroides. Haga que las E / S sean inmersivas para navegar tridimensionalmente. Proporcione a todos una identidad de usuario único que tengan de por vida.

No puedo decidir si esto es estrictamente al grano; pero estaba cerca cuando un accidente histórico de alguna clase atascó el desarrollo de microcomputadoras. Durante un tiempo después del lanzamiento de la PC IBM, hubo PC con una arquitectura diferente que ejecutaban DOS.

Luego apareció un juego popular para la PC de IBM (¿fue Flight Simulator?) Que ignoró el sistema operativo y llamó al hardware directamente. En algunos juegos que llegaron más tarde, incluso se verificó el aviso de copyright de IBM en ROM. De repente, ya no era viable producir máquinas DOS; solo se deseaban los clones de hardware de la PC de IBM. Con, por supuesto, el aviso de copyright de IBM incrustado en el BIOS ROM.

Puedo entender por qué los escritores de juegos lo hicieron, pero creo que fue un día triste para la PC.

El artefacto histórico que más me molesta es que las máquinas modernas de puntero de 64 bits tienen una granularidad de dirección no de la palabra de 64 bits (que sería lógica) o del bit (que también sería lógico) sino de 8 bits bytes Lo que tiene absolutamente cero sentido, ya que de todos modos estamos desperdiciando bits en la parte superior de la dirección, ya que 64 bits es mucho más de lo que necesitamos.

Si se rediseñara, creo que optaríamos por la direccionamiento a nivel de bits, lo que simplificaría un montón de cosas. (Por supuesto, muchas instrucciones tendrían restricciones de alineación de puntero. Por ejemplo, las instrucciones de byte de 8 bits requerirían que los tres bits bajos de un puntero sean cero. Esto ya es cierto en muchas arquitecturas, donde la violación de las restricciones de alineación conduce a una instrucción errónea Por lo tanto, no habría pérdida de eficiencia a nivel de hardware).

No mucho sería diferente. La mayoría de los conjuntos de instrucciones reales son casi óptimos de lo que puede hacer con semiconductores.

Creo que podría haber habido algunos cambios:

  1. Nada de eso con el hardware decimal, como con ENIAC.
  2. Longitudes de palabra de poderes de dos desde el primer momento
  3. Registros de puntero de incremento y decremento previo / posterior
  4. Sin digresión en CISC y microcódigo

Hubiera sido bueno si las partes ortogonales e intercambiables se hubieran acordado antes. Las especificaciones simples podrían haberse mantenido a medida que la tecnología avanzaba. Un enfoque de Lego es lo que usa la naturaleza (células). Eso habría evitado varios pasos falsos de ‘súper arquitectura’.

Nunca pude entender por qué los chips TTL y CMOS tenían que tener conjuntos de funciones y pinouts completamente diferentes.

Por supuesto, está el viejo chiste: “los estándares son geniales, todos deberían tener uno”

El que iría inmediatamente es el infame límite de memoria “640k”.

Comprenda que alguien en algún lugar tomó decisiones sobre cómo todas las partes de una computadora funcionarían juntas. No voy a inspeccionar todas las decisiones que crearon la computadora en su conjunto, pero existe el infame límite de memoria de 640K.

Conoces a la persona que tomó esta decisión. Bill Gates. Bill Gates, el hombre más rico del mundo, obtuvo sus riquezas al ser el mayor accionista de microsoft y comenzó por modificar una versión de Dos, que fue el primer producto comercial de Microsoft, que se utiliza en todos los clones de pc y pc de ibm.

En algún lugar entre las decisiones tomadas por IBM y Gates, una vez que llegó al límite de 640K (términos de laymns) no había ninguna forma conveniente de poner más memoria en la computadora. El sistema no estaba diseñado de manera inherente para acceder a más de 640K porque nadie realmente pensaba tanto cuando esa memoria era tan cara. $ 550 por aproximadamente 64k. En ese momento, cuando un total de 640K costaría $ 5,500, parecía aplicable. Sabemos cómo resultó eso. No había ninguna idea de que la PC eventualmente ejecutaría programas que llenarían gigabytes de memoria. Insondable. De todos modos, esta limitación hizo que se desarrollaran todos los tipos de administradores de memoria para sortear esa limitación. Moverse significa que la eficiencia disminuye porque tiene que haber una traducción para engañar al sistema de que toda la memoria por encima de 640K parece ser parte de 640K para que el sistema funcione.

Si se diseñara una nueva metodología hoy, un sistema no tendría esa limitación, por lo que toda la memoria sería directamente accesible y no se necesitarían trucos y soluciones y el sistema sería más eficiente.

Cada acceso a la memoria habría recuperado múltiples palabras de memoria secuenciales, aliviando algunos de los diseños de almacenamiento en caché agregados a las CPU modernas. Una recuperación múltiple estadísticamente tendría la siguiente instrucción u operando ya en registros de CPU, o fácilmente disponible para el hardware interno en lugar de requerir accesos adicionales a la memoria principal.