Execução de instruções fora de ordem: a ordem de confirmação é preservada?

Por um lado, a Wikipedia escreve sobre as etapas da execução fora de ordem:

Busca de instruções.Envio de instruções para uma fila de instruções (também chamada de buffer de instruções ou estações de reserva).A instrução aguarda na fila até que seus operandos de entrada estejam disponíveis. É permitido que a instrução saia da fila antes de instruções mais antigas.A instrução é emitida para a unidade funcional apropriada e executada por essa unidade.Os resultados estão na fila.Só depois de tudo mais velho As instruções têm seus resultados gravados de volta no arquivo de registro e, em seguida, esse resultado é gravado de volta no arquivo de registro. Isso é chamado de estágio de graduação ou aposentadoria.

Informações semelhantes podem ser encontradas no livro "Computer Organization and Design":

Para fazer com que os programas se comportem como se estivessem sendo executados em um pipeline simples em ordem, a unidade de busca e decodificação de instruções é obrigada a emitir instruções em ordem, o que permite que as dependências sejam rastreadas e a unidade de confirmação é necessária para gravar resultados nos registros e memória na ordem de busca do programa. Esse modo conservador é chamado de confirmação em ordem ... Hoje,todos os pipelines agendados dinamicamente use confirmação em ordem.

Portanto, tanto quanto eu entendo, mesmo que a execução das instruções seja feita fora de ordem, os resultados de suas execuções são preservados no buffer de reordenação e, em seguida, comprometidos com a memória / registros em uma ordem determinística.

Por outro lado, há um fato conhecido de que as CPUs modernas podem reordenar as operações de memória para fins de aceleração de desempenho (por exemplo, duas instruções de carga independentes adjacentes podem ser reordenadas). Wikipedia escreve sobre issoaqui.

Poderia, por favor, esclarecer essa discrepância?

questionAnswers(1)

yourAnswerToTheQuestion