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).