Буфер переупорядочивания ( ROB ) — это аппаратный блок, используемый в расширении алгоритма Томасуло для поддержки выполнения инструкций вне очереди и спекулятивного выполнения. Расширение заставляет инструкции выполняться в порядке.
Буфер представляет собой кольцевой буфер (для обеспечения очереди упорядочивания инструкций FIFO ), реализованный как массив/вектор (что позволяет записывать результаты по инструкциям по мере их выполнения не по порядку).
Алгоритм Томасуло состоит из трех этапов: «Выпуск», «Выполнение», «Запись результата». В расширении алгоритма есть дополнительный этап «Фиксация». На этапе фиксации результаты выполнения инструкций сохраняются в регистре или памяти. Этап «Запись результата» модифицирован для помещения результатов в буфер повторного заказа. Для этой цели каждая инструкция помечается на станции резервирования своим индексом в ROB.
Содержимое буфера используется для зависимостей данных других инструкций, запланированных в буфере. Заголовок буфера будет зафиксирован, как только его результат станет допустимым. Его зависимости уже будут рассчитаны и зафиксированы, поскольку они должны быть впереди инструкции в буфере, хотя и не обязательно рядом с ней. Зависимости данных между инструкциями обычно останавливают конвейер, пока инструкция ждет своих зависимых значений. ROB позволяет конвейеру продолжать обрабатывать другие инструкции, обеспечивая при этом фиксацию результатов, чтобы предотвратить такие риски данных , как опережающее чтение записи (RAW), опережающую запись чтения (WAR) и опережающую запись записи (WAW).
В каждой записи буфера имеются дополнительные поля для поддержки расширенного алгоритма:
Последствия буфера переупорядочения включают точные исключения и простой контроль отката неверных предсказаний целевого адреса (переход или переход). Когда предсказание перехода неверно или в потоке инструкций встречается неисправимое исключение, ROB очищается от всех инструкций (путем установки хвоста кольцевой очереди в начало), а станции резервирования повторно инициализируются.