Leí en el libro de texto de Foundation of Computer Science (por Behrouz A. Forouzan) que el programa de un modelo de Von Neumann debe ejecutarse secuencialmente y la computadora moderna ejecuta el código en el orden más eficiente. Pero no decía el enfoque secuencial de Von Neumann. es lo más eficiente.
Entonces, ¿la computadora moderna ejecuta código de esta manera?
computer-architecture
RexYuan
fuente
fuente
Respuestas:
Arquitectónicamente, es decir, con respecto a lo que ve el software, los procesadores modernos usan el modelo serial de von Neumann. Sin embargo, la mayoría de los procesadores de alto rendimiento utilizan ejecución fuera de orden , que permite que las operaciones se ejecuten de manera no serial pero sus efectos son comprometido en orden del programa.
(Algunos procesadores en orden anteriores tuvieron excepciones imprecisas causadas por operaciones que comenzaron la ejecución en orden, pero los resultados se confirmaron a medida que estaban disponibles. Esto significa que una operación de latencia más corta, como una suma de enteros, se produce después de una operación de latencia más larga, como una multiplicación de punto flotante, puede escribir su resultado en un registro antes de que se complete la operación de latencia más larga. Si se produce una interrupción o excepción antes de que se complete la operación de latencia más larga, el estado del programa sería inconsistente.)
UNA arquitectura de flujo de datos no ejecuta programas en serie, pero escalar el hardware de manejo de dependencias es problemático (incluso los modernos procesadores desordenados de alto rendimiento tienen ventanas de ejecución desde las cuales se programan operaciones candidatas de menos de 100 operaciones) y aseguran la corrección (especialmente para el software, donde los métodos formales son menos comunes) también es difícil. Para familiarizarse con el diseño, cada operación se trata como un subproceso independiente que puede comenzar a ejecutarse tan pronto como estén disponibles sus operandos de origen y puede confirmar su resultado tan pronto como se complete la operación (permitiendo que las operaciones que esperan solo ese resultado comiencen a ejecutarse) ). A nivel de lenguaje de máquina, esto podría verse como el último código de espagueti de múltiples hilos.
Los procesadores que utilizan la ejecución fuera de orden son como las arquitecturas de flujo de datos en funcionamiento, pero con ventanas de ejecución limitadas y visibilidad en el orden garantizada de los resultados dentro del mismo hilo de ejecución. (Los modelos de consistencia de memoria más débiles permitirán que los resultados se hagan visibles a otros procesadores en un orden que no es estrictamente secuencial).
fuente
La distinción clave entre las principales arquitecturas de Von Neumann y Harvard es que con Harvard, las memorias de Datos y Programas se separan. Las PC de hoy usan una memoria compartida para eso, aunque ciertas regiones de la memoria pueden estar marcadas como no ejecutables, se usa el mismo bus de datos para ellas. Entonces, desde ese punto de vista, las arquitecturas de PC son definitivamente Von Neumann.
Sin embargo, los procesadores modernos para PC de escritorio reordenarán las instrucciones según la eficiencia, pero esto es, según lo que aprendí, no el punto clave para una arquitectura de Von Neumann.
fuente
Las CPU modernas de uso general siguen consumiendo una sola secuencia de instrucciones (de todas formas, por CPU lógica) y mientras que las CPU Intel / AMD realizan operaciones de reordenación interna (especialmente operaciones de memoria lenta) para mejorar el rendimiento, lo hace solo cuando no afecta los resultados de la secuencia de instrucciones.
Por lo tanto, las CPU modernas aún funcionan de manera secuencial (supongo que la "solución" oficial para esto ha sido la introducción de las CPU lógicas). La tecnología Hyperthreading de Intel permitió que muchas operaciones se superpongan y se produzcan al mismo tiempo, y la interfaz que presentó al flujo de instrucciones fue una segunda CPU lógica .
Bueno, si las computadoras se convierten en dispositivos de medios, si una CPU tiene que procesar una gran cantidad de datos, pero con operaciones simples que no requieren mucha toma de decisiones, el enfoque secuencial puro no es eficiente. Así que se han introducido instrucciones SIMD que permiten que la CPU cargue un montón de valores y dispare una operación en todos ellos en un ciclo. Y, por supuesto, las GPU funcionan de manera diferente, con muchos, muchos "núcleos" que realizan operaciones matemáticas simples en grandes cantidades de datos en paralelo.
fuente
Desde wikipedia :
fuente
Las computadoras modernas no se han alejado del cuello de botella de Von Neumann. Incluso si tuviéramos que utilizar miles de CPU en una matriz súper paralela, cada uno de ellos incorporaría el principio de una ALU, por lo que aún se basan en gran medida en los mismos conceptos. Al crear múltiples cuellos de botella paralelos, aliviamos el problema, pero los bloques de construcción individuales son fundamentalmente los mismos.
fuente