На схеме показан процессор с 5-стадийным конвейером (IF, ID, EX, MEM, WB). Приведите примеры структурных, данных и контрольных конфликтов, покажите последовательность команд, вызывающих ступенчатые задержки, и опишите аппаратные и программные методы их устранения (forwarding, предсказание переходов, reordering и т.д.)

8 Окт в 11:36
11 +1
0
Ответы
1

Коротко: в 5‑ступенчатом конвейере (IF, ID, EX, MEM, WB) встречаются три основных типа конфликтов (hazards): структурные, данные и контрольные. Ниже — понятные примеры для каждого типа, «таймлайны» команд, показывающие где появляются ступенчатые задержки (bubbles), и методы аппаратного и программного устранения.

1) Данные (Data hazards)

Типичный пример: RAW (Read After Write)

Последовательность:
1) add r1, r2, r3
2) sub r4, r1, r5Таймлайн (стадии по циклам):
Цикл: 1 2 3 4 5 6
add: IF ID EX MEM WB
sub: IF ID EX MEM WBБез обхода (forwarding) sub в ID читает r1 на цикле 3, но r1 будет записан только в WB (цикл 5) → требуется задержка/ставить 2 bubble'а.С forwarding: результат add готов в конце EX (цикл 3), можно переслать на EX стадии sub (цикл 4) — задержек нет.

Load‑use hazard (особая форма RAW)

Последовательность:
1) lw r1, 0(r2)
2) add r3, r1, r4Таймлайн:
Цикл: 1 2 3 4 5 6
lw: IF ID EX MEM WB
add: IF ID • EX MEM WB (• = bubble)Даже при forwarding обычно нужен 1 цикл задержки, т.к. данные из памяти появляются в конце MEM; их можно переслать в следующую EX, но add должна быть отстающей на один цикл.

Методы устранения (аппаратные и программные)
Аппаратные:

Forwarding / bypassing (EX ← EX/MEM или EX ← MEM/WB) — сокращает/устраняет большинство ALU→ALU RAW.Load–use interlock: аппаратная вставка одного bubble для load.Более быстрые кэши/путь, позволяющий выдавать load результат раньше (редко).Out‑of‑order execution + register renaming (Tomasulo, ROB) — устраняет многие задержки, скрывая ожидание.
Программные (компилятор/программист):Reordering (перестановка независимых инструкций между зависимыми), вставка независимых операций в «пробел».Loop unrolling (увеличивает шанс полезной инструкции между зависимостями).Использование регистров так, чтобы уменьшить зависимостей.

2) Структурные (Structural hazards)

Пример 1 (общая память, одинпортовая): единый порт памяти для инструкций и данных.
Последовательность:
1) lw r1, 0(r2) — в MEM выполняет обращение к памяти
2) следующая инструкция в IF хочет читать память для выборки инструкцииПроблема: в одном цикле одновременно нужны доступы к памяти для IF и MEM → конфликт → один из доступов должен ждать → bubble.Пример 2 (единственный непараллельный множитель/делитель): mul занимает несколько циклов в EX и блочит EX для других команд.
Последовательность:
1) mul r1, r2, r3 (несколько циклов в EX)
2) add r4, r5, r6 — следующая команда должна ждать освобождения EX → stall.Методы устранения
Аппаратные:
Разделение I/D кешей (Harvard) или многопортовая память / кэш (allow concurrent IF and MEM).Пайплинированные или копии функциональных блоков (несколько ALU, pipelined multiplier).Буферы: instruction prefetch, store buffer, load/store queue.Конвейерные reservation stations / динамический диспетчер для перекрытия многоточечных операций.
Программные:Компилятор/программист может переставлять инструкции, чтобы скрыть длительные операции (например, ставить независимые инструкции между началом mul и дальнейшим использованием результата).Использовать асинхронные/параллельные алгоритмы.

3) Контрольные (Control hazards — ветвления)

Пример: условный переход, разрешается в EX (обычно после сравнения)
Последовательность:
1) beq r1, r2, label
2) instrA (следующая в памяти)
3) instrBТаймлайн (без предсказания):
Цикл: 1 2 3 4 5 ...
beq: IF ID EX MEM WB
instrA: IF ID • • ...Пока ветвление не разрешено (в EX), конвейер продолжает фетчить следующую инструкцию(и); если ветвление оказалось переходом — нужно сбросить (flush) не те инструкции → bubbles и перерасход работы.Методы устранения
Аппаратные:
Статическое предсказание: «predict not taken» или «predict backward taken, forward not taken» (для циклов).Динамическое предсказание: 1‑bit/2‑bit предикторы, глобальная/локальная история, Branch Target Buffer (BTB).Спекулятивное исполнение + возможность отката (checkpoint / reorder buffer): исполняем по предсказанию, при промахе — откатываем результаты и делаем flush.Return Address Stack для быстрых возвратов из функций.Ранняя проверка условия (например, вычислять условие в ID/EX быстрее или иметь отдельный ALU для сравнения).
Программные:Delayed branch (архитектура с «слотом задержки ветки»): компилятор помещает полезную инструкцию в слот после ветки.Рефакторинг кода: уменьшение числа ветвей, использование условных move (predicated instructions).Перераспределение ветвей, loop unrolling, преобразования для лучшей предсказуемости.Использование профилирования для статической компиляции с учётом реально часто встречающихся направлений ветвления.

Дополнительные аппаратные техники (общие, продвинутые)

Register renaming — исключает ложные зависимости (WAR, WAW) и полезно в OoO.Tomasulo / reservation stations + ROB — динамическое планирование, скрытие задержек.Load/store queue, memory disambiguation — уменьшает задержки из‑за обращения к памяти.Большие/многоуровневые кэши и MSHR для сокращения задержек доступа к памяти.

Краткое резюме практических рекомендаций

Для ALU→ALU RAW: использовать forwarding; компилятор переставляет инструкции, если forwarding не покрывает.Для load→use: аппаратно вставлять 1 bubble или использовать OoO/renaming; компилятор ставит независимые инструкции.Для ветвей: использовать динамическое предсказание + BTB; если архитектура поддерживает — delayed branch; компилятор уменьшает ветвления или использует предсказуемые структуры.Для структурных конфликтов: проектировать отдельные I/D кэши или мультипортовую память, pipelined functional units, либо перекрывать доступы программно.

Если нужно, могу:

Нарисовать более подробные пошаговые таймлайны (с номерами циклов) для конкретных примеров (без forwarding, с forwarding и с предсказанием ветвей).Привести псевдокод и пример перестановки инструкций компилятором для устранения load‑use.
8 Окт в 11:59
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир