Табло

редактировать

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

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

Содержание
  • 1 Этапы
  • 2 Структура данных
  • 3 Алгоритм
  • 4 Примечания
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
Этапы

Инструкции декодируются по порядку и проходят следующие четыре этапа.

  1. Проблема : система проверяет, какие регистры будут прочитаны и записаны этой инструкцией. Эта информация запоминается, поскольку она понадобится на следующих этапах. Чтобы избежать зависимостей вывода (WAW - Запись после записи), инструкция останавливается до тех пор, пока инструкции, намеревающиеся записать в тот же регистр, не будут выполнены. Команда также останавливается, когда требуемые функциональные блоки в настоящее время заняты.
  2. Чтение операндов : после того, как инструкция была выдана и правильно назначена требуемому аппаратному модулю, инструкция ожидает, пока все операнды не станут доступными. Эта процедура разрешает зависимости чтения (RAW - Чтение после записи), поскольку регистры, которые предназначены для записи другой инструкцией, не считаются доступными, пока они не будут фактически записаны.
  3. Выполнение : Когда все операнды были получены, функциональный блок начинает свое выполнение. После того, как результат готов, на табло отправляется уведомление.
  4. Результат записи : На этом этапе результат должен быть записан в регистр назначения. Однако эта операция откладывается до тех пор, пока более ранние инструкции - которые намереваются читать регистры, в которые эта инструкция хочет выполнить запись - не завершат этап чтения операндов. Таким образом могут быть устранены так называемые зависимости данных (WAR - Запись после чтения).
Структура данных

Для управления выполнением инструкций табло поддерживает три таблицы состояния:

  • Состояние инструкции : указывает для каждой выполняемой инструкции, на каком из четырех этапов она находится.
  • Состояние функционального блока : указывает состояние каждого функционального блока. Каждый функциональный блок поддерживает 9 полей в таблице:
    • Занят: указывает, используется ли блок или нет
    • Опера: операция, которую нужно выполнить в блоке (например, MUL, DIV или MOD)
    • Fi: Регистр назначения
    • Fj,Fk: Номера регистров источника
    • Qj,Qk: Функциональные блоки, которые будут создавать регистры источника F j, F k
    • Rj,Rk: Флаги, указывающие, когда F j, F k готовы и еще не прочитаны.
  • Состояние регистра : указывает для каждого регистра, какой функциональный блок будет записывать в него результаты.
Алгоритм

Подробный алгоритм управления табло описан ниже:

function issue (op, dst, src1, src2) wait until (! Busy [FU] AND! Result [dst]); // FU может быть любой функциональной единицей, которая может выполнять операцию op Busy [FU] ← Yes; Op [FU] ← op; F i [FU] ← dst; F j [FU] ← src1; F k [FU] ← src2; Q j [FU] ← Результат [src1]; Q k [FU] ← Результат [src2]; R j [FU] ← Q j [FU] == 0; R k [FU] ← Q k [FU] == 0; Результат [dst] ← FU;
функция read_operands (FU) ждет, пока (R j [FU] AND R k [FU]); R j [FU] ← Нет; R k [FU] ← Нет;
function execute (FU) // Выполняет все, что FU должен делать
function write_back (FU) ждать, пока (∀f {(F j [f] ≠ F i [FU] OR R j [f] = Нет) AND (F k [f] ≠ F i [FU] OR R k [f] = Нет)}) foreach f do, если Q j [f] = FU, то R j [f] ← Да; если Q k [f] = FU, то R k [f] ← Да; Результат [F i [FU]] ← 0; // 0 означает, что никакой FU не генерирует результат регистра RegFile [F i [FU]] ← вычисленное значение; Занято [FU] ← Нет;
Примечания

Метод табло должен останавливать стадию проблемы, когда нет доступной функциональной единицы. В этом случае будущие инструкции, которые потенциально могут быть выполнены, будут ждать, пока структурная опасность не будет устранена. Некоторые другие методы, такие как алгоритм Томасуло, могут избежать структурной опасности, а также разрешить зависимости WAR и WAW с помощью переименования регистров.

См. Также
Ссылки
  • Гленфорд Майерс, «Регистрация показателей на микропроцессорной микросхеме», Патент США 4891753
Внешние ссылки
Последняя правка сделана 2021-06-07 06:11:11
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте