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