Arquitetonicamente, isto é, com relação ao que o software vê, os processadores modernos usam o modelo serial von Neumann. No entanto, a maioria dos processadores de alto desempenho usa a execução fora de ordem , que permite que as operações sejam executadas em uma forma não serial, mas seus efeitos são confirmados na ordem do programa.
(Alguns processadores anteriores, em ordem, tinham exceções imprecisas causadas por operações iniciando a ordem em ordem, mas os resultados sendo confirmados à medida que eram disponibilizados. Isso significa que uma operação de latência mais curta, como uma adição de inteiro, vem após um longo Uma operação de latência, como uma multiplicação de ponto flutuante, pode gravar seu resultado em um registrador antes que a operação de latência mais longa seja concluída. Se uma interrupção ou exceção ocorreu antes da conclusão da operação de latência mais longa, o estado do programa seria inconsistente.
Uma arquitetura de fluxo de dados não executa programas em série, mas o escalonamento do hardware de manipulação de dependências é problemático (até mesmo o desempenho moderno de alto desempenho). processadores fora de ordem têm janelas de execução a partir das quais as operações candidatas são programadas para menos de 100 operações) e a garantia de correção (particularmente para software, onde os métodos formais são menos comuns) também é difícil. Para ter uma ideia do design, cada operação é tratada como um thread separado que pode começar a execução assim que seus operandos de origem estiverem disponíveis e pode confirmar seu resultado assim que a operação for concluída (permitindo que as operações aguardem apenas esse resultado para iniciar a execução ). No nível de linguagem de máquina, isso poderia ser visto como o código de espaguete multithread final.
Processadores que usam execução fora de ordem são como arquiteturas de fluxo de dados em operação, mas com janelas de execução limitadas e visibilidade garantida em ordem dos resultados dentro do mesmo thread de execução. (Os modelos de consistência de memória mais fracos permitirão que os resultados se tornem visíveis para outros processadores em uma ordem que não seja estritamente seqüencial.)