На схеме однопроцессорной конвейерной архитектуры наблюдается "hazard" при пересечении инструкций LOAD и USE — опишите виды конвейерных конфликтов (data, control, structural), методы их обнаружения и способы устранения

17 Ноя в 07:03
2 +1
0
Ответы
1
Вкратце — виды, как обнаруживают и как устраняют.
1) Data hazards (конфликты по данным)
- Типы: RAW (read-after-write), WAR (write-after-read), WAW (write-after-write). Формально RAW возникает, когда desti=srcj\text{dest}_i=\text{src}_jdesti =srcj и инструкция iii предшествует jjj, а результат iii ещё не доступен.
- Обнаружение:
- Аппаратно в стадии ID: сравнение номеров регистров источников текущей инструкции с номерами назначений инструкций находящихся в конвейере.
- Статически в компиляторе через анализ зависимостей.
- Динамически через scoreboard/Tomasulo (тегирование и таблицы занятости).
- Устранение:
- Bypassing / forwarding (обводы): передача результата из стадии EX/MEM/WB в EX следующей инструкции.
- Pipeline stalls (вставка «пустых» тактов, bubbles) / hardware interlock — автоматическая пауза до готовности данных.
- Компиляторное переупорядочивание инструкций (scheduling) для удаления краткосрочных зависимостей.
- Регистровое переименование — устраняет ложные WAR/WAW.
- Динамическое планирование (Tomasulo, out-of-order) — выполняет независимые инструкции, обходя зависимость.
- Пример load‑use (типичный): для 5‑стадийного конвейера
LW:IF1 ID2 EX3 MEM4 WB5\text{LW}: IF_1\;ID_2\;EX_3\;MEM_4\;WB_5LW:IF1 ID2 EX3 MEM4 WB5 ,
зависимая инструкция
ADD:IF2 ID3 EX4 ...\text{ADD}: IF_2\;ID_3\;EX_4\;...ADD:IF2 ID3 EX4 ....
Данные из памяти готовы только в конце MEM4MEM_4MEM4 , поэтому требуется как минимум один пузырь (stall) даже при наличии forwarding (или вставка независимой инструкции).
2) Control hazards (конфликты ветвлений/управления)
- Характер: неопределённость следующей инструкции из‑за ветви/прыжка.
- Обнаружение:
- Сравнение предиката/целевого адреса в стадии ID/EX; аппаратно — детектор ветвей.
- Устранение:
- Отсроченная ветвь (delayed branch) — заполнять слот после ветви полезной инструкцией.
- Предсказание ветвей: статическое (например, всегда не переходить/последнее направление) и динамическое (1‑бит, 2‑бит, GShare, tournament).
- Branch Target Buffer (BTB) и Return Address Stack для предсказания адреса/возврата.
- Спекулятивное выполнение с откатом (flush) при промахе предсказания.
- Предикаты (условные инструкции вместо ветвей) — уменьшение количества ветвей.
3) Structural hazards (структурные/ресурсные конфликты)
- Характер: две стадии требуют одного ресурса одновременно (например, единый порт памяти или единый ALU).
- Обнаружение:
- Аппаратный сигнал занятости ресурса (resource_busy) при попытке получить доступ.
- Статический анализ конфигурации аппаратуры.
- Устранение:
- Репликация/доделегирование ресурсов (несколько ALU, многопортовый регфайл, отдельные порты для инструкций и данных).
- Пайпелинирование самого ресурса.
- Сталлинг (ожидание освобождения ресурса).
- Перераспределение/перепланирование инструкций компилятором.
Короткая подсказка по выбору методов:
- Простая схема: forwarding + interlock (один stall для load‑use) + простое предсказание ветвей.
- Более продвинутая: register renaming + out‑of‑order (Tomasulo) + динамическое предсказание ветвей + мультипортовый регфайл/кэш для минимизации структурных конфликтов.
Если нужно — могу показать схему обнаружения RAW в логических выражениях и типичные аппаратные сигналы для interlock/forwarding.
17 Ноя в 07:51
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир