Все обрабатывается как спекулятивное до тех пор, пока оно не достигнет выхода на пенсию, то есть удаление по порядку - это то, как процессоры проверяют исключения, которые должны были произойти до того, как выполнение достигло какой-либо выполняемой позднее инструкции. А ветка ошибается, эт c. Так что да, обоим.
Разве недостаточно ROB для сброса значений в случае неверного прогнозирования пути?
Нет, регистр переименование обрабатывает только регистры, а не значения, которые должны быть сохранены в памяти.
Вы нужен буфер хранилища, чтобы вы могли запускать хранилища заранее, не делая возможной ошибочную спекуляцию видимой для других ядер! В противном случае хранилищам пришлось бы ждать, пока они не достигнут стадии выхода в отставку, так что было известно, что они не являются -спекулятивные, прежде чем они могли даже выполнить. (И строка кэша должна присутствовать в состоянии «Исключено» или «Изменено»).
Буфер хранилища также полезен для отделения выполнения от промахов кэша; не нужно ждать, пока появится строка кэша, если вы можете просто оставить ее в буфере хранилища. Это относится даже к порядку трубопроводов. И это работает для OoO exe c даже после выхода на пенсию, поэтому хранилища с отсутствием кэша имеют большее окно, чтобы не останавливать конвейер, не привязанные к порядку вывода из строя по порядку.
Связанные: Размер хранить буферы на оборудовании Intel? Что такое буфер хранилища? и, вероятно, куча других SO-ответов, которые я написал. { ссылка }
это также позволяет переименовывать регистры в записи ROB
звучит так, как будто вы говорите о деталях реализации из семейства Intel P6. Большинство других проектов (семейство Sandybridge и AMD) используют отдельный файл физического регистра (PRF), а ROB имеет только указатели на записи PRF. Это имеет больше смысла для 64-битной архитектуры, где размер регистра больше, особенно когда мы рассматриваем 128-битные регистры XMM.
См. https://www.realworldtech.com/sandy-bridge/ - SnB был основным перейти с семейства P6 на семейство SnB.