Итак, я пытаюсь понять алгоритм Томасуло для выполнения команды вне порядка. Вот что я получаю до сих пор:Понимание алгоритма Томасуло
Инструкции загружаются в порядке и хранятся в очереди команд.
Регистрация переименования происходит где-то рядом ...? Из того, что я понимаю, это избежать опасностей WAR/WAW, предоставив метки в регистры. Скажем, у вас есть add r1, r2, r3 (1) add r3, r5, r6 (2) У вас есть опасность WAR и необходимо убедиться, что инструкция (1) считывает старое значение r3 перед добавлением его в r1. Поэтому я предполагаю, что в очереди команд (?) Аппаратное переименование регистров, т. Е. add r1, r2, r3 # 1 add r3 # 2, r5, r6 Или что-то в этом роде.
Инструкции высылаются на станции бронирования. Насколько я понимаю, каждый функциональный блок имеет свой собственный набор станций бронирования. Но похоже ли это как очередь (FIFO) инструкций для этого функционального блока для выполнения, когда подходящие помеченные операнды доступны на общей шине данных?
Поскольку инструкции могут заканчиваться в произвольном порядке (не в порядке), и может быть продолжено выполнение дополнительных инструкций ... Есть ли место, где общая шина данных обновляет файл регистра, прежде чем появятся дополнительные инструкции? Я слышал, что используется буфер повторного заказа, который в основном сортирует инструкции по порядку (это должно означать, что инструкции имеют какой-то тэг), а затем результаты реестра передаются обратно в файл регистра.
В чем я смущен, это реализация переименования регистров и структура станций бронирования.
Благодарим за любую помощь.
спасибо, я на самом деле читал эту книгу сейчас и медленно понимать, по крайней мере один основной реализации. – JDS