Выполнение не по порядку команды: сохраняется ли порядок фиксации?

С одной стороны, Википедия пишет о шагах выполнения не по порядку:

Инструкция по загрузке.Отправка команд в очередь команд (также называемая буфером команд или станциями резервирования).Инструкция ожидает в очереди, пока ее входные операнды не станут доступны. После этого инструкции разрешается покидать очередь раньше, чем более старые инструкции.Инструкция выдается соответствующему функциональному блоку и выполняется этим блоком.Результаты поставлены в очередь.Только ведь старше результаты инструкций записываются обратно в файл регистров, затем этот результат записывается обратно в файл регистров. Это называется выпускной или пенсионный этап.

Подобную информацию можно найти в книге «Организация и проектирование компьютеров»:

Чтобы заставить программы вести себя так, как если бы они работали на простом конвейере заказов, модуль извлечения и декодирования команд должен выдавать команды по порядку, что позволяет отслеживать зависимости, а модуль фиксации обязан записывать результаты в регистры и память в порядке выборки программ. Этот консервативный режим называется упорядоченным коммитом ... Сегоднявсе динамически запланированные конвейеры использовать упорядоченный коммит.

Итак, насколько я понимаю, даже если выполнение инструкций выполняется не по порядку, результаты их выполнения сохраняются в буфере переупорядочения, а затем фиксируются в памяти / регистрах в детерминированном порядке.

С другой стороны, существует известный факт, что современные процессоры могут переупорядочивать операции с памятью в целях ускорения производительности (например, две смежные независимые инструкции загрузки могут быть переупорядочены). Википедия пишет об этомВот.

Не могли бы вы пролить свет на это несоответствие?

Ответы на вопрос(1)

Ваш ответ на вопрос