La arquitectura de Von Neumann se centra en las instrucciones: la secuencia de instrucciones es primordial y los datos son tangenciales. Este es un punto de vista válido, pero supone implícitamente que los datos se pueden encontrar y crear más rápido que la tasa de ejecución de la instrucción. Esto solía ser cierto en algún momento, cuando los datos podían transferirse en un ciclo y los procesadores tomaban varios ciclos para una instrucción.
Este no ha sido el caso durante 2 décadas más o menos. Como resultado, los procesadores ahora razonan sobre las instrucciones. Considera un programa
x <- a + b
y <- c + d
z <- x + y
- ¿Qué conocimiento matemático debe tener un estudiante de informática?
- ¿Qué son los objetos de valor?
- ¿Cómo difiere la teoría algorítmica de juegos de la teoría clásica de juegos?
- ¿Cuál es la mejor manera de comenzar con la visión por computadora como individuo?
- ¿Cuáles son algunas ideas para un hackathon relacionado con la banca?
Ahora el procesador puede razonar que las entradas para la segunda instrucción no se ven afectadas por la primera instrucción, por lo que pueden recuperarse de la memoria mucho antes de lo que dicta el modelo de Von Neumann. Por otro lado, la tercera instrucción tiene que esperar a que los dos primeros escriban sus resultados en la memoria (nota: supongo que aquí se procesa estrictamente Von Neumann; digamos que los cachés no existen. Antes de 1990 en otras palabras. )
Este análisis se conoce como análisis de ‘flujo de datos’: tanto el compilador como el procesador miran las instrucciones / bloques básicos / expresiones para determinar qué cálculos son dependientes y cuáles son independientes.
El análisis de flujo de datos también es atractivo por otra razón: si tiene una computadora paralela, entonces un análisis de flujo de datos puede decirle cómo mantener ocupados sus procesadores paralelos porque encuentra actividades independientes. Por esta razón, las personas han explorado la construcción de una arquitectura de flujo de datos explícita. En particular, en el MIT se construyeron algunas máquinas reales (la J – Machine) y se escribieron muchos informes (por ejemplo, la página en mit.edu).
Dataflow tiene muchas ideas interesantes, pero la noción de que un compilador podría hacer análisis de flujo de datos en un lenguaje de programación regular ha demostrado ser una quimera completa. Por otro lado, la programación explícita del flujo de datos es muy difícil.
En pocas palabras: el flujo de datos es un diseño de máquina que es diferente de Von Neumann, y de hecho se usa internamente en su CPU diaria, simplemente no lo ve.
(Nota al margen: soy bastante parcial al flujo de datos. Vea la respuesta de Victor Eijkhout a If por alguna razón tuvimos que comenzar de nuevo y construir computadoras completamente desde cero, pero con toda la retrospectiva de las últimas décadas de computación, ¿cuáles son algunos cosas que haríamos de manera diferente? Creo que es posible tener flujo de datos en un nivel mucho más alto que solo internamente al procesador).