Процессор с 5-стадийным конвейером (IF, ID, EX, MEM, WB) обслуживает программу со следующими инструкциями: 40% арифметические, 30% загрузки, 20% сохранения, 10% ветвления; средняя задержка ветвления 2 такта при неудаче предсказания, загрузки создают зависимость с последующей инструкцией в 1 такт; оцените влияние на CPI, предложите способы уменьшения потерь производительности и обсудите компромиссы при добавлении суперскалярности и out-of-order выполнения

6 Окт в 10:38
12 +1
0
Ответы
1

Коротко — сначала оценка влияния на CPI, затем способы уменьшить потери и обсуждение компромиссов при добавлении суперскалярности и out‑of‑order.

1) Оценка CPI

Базовый CPI при однопоточной одновыдаче и без остановок = 1.Из заданного микса:
загрузки = 30% (каждая создаёт однократную паузу для следующей инструкции → средняя потеря = 0.3 × 1 = 0.30 цикла на инструкцию),ветви = 10%. Пусть P_miss — доля неверно предсказанных ветвей; при промахе штраф = 2 такта, значит средняя потеря от ветвей = 0.1 × P_miss × 2 = 0.2 × P_miss (циклов на инструкцию).Итого: CPI = 1 + 0.30 + 0.2 × P_miss = 1.30 + 0.2·P_miss.

Примеры:

P_miss = 5% → CPI ≈ 1.31P_miss =10% → CPI ≈ 1.32P_miss =20% → CPI ≈ 1.34(в крайнем идеализированном случае P_miss =100%) → CPI = 1.50

Примечания:

Если предположить, что не все загрузки действительно используются следующей инструкцией, то вклад 0.30 будет меньше (умножается на вероятность зависимости).Если у вас нет форвардинга/байпасинга и загрузка требует большего числа тактов до использования, вклад загрузок может быть заметно выше.

2) Способы уменьшить потери производительности

Для ветвей:
Улучшить предсказатель: динамический двухбитный/коррелирующий, более глубокая history, BTB. Обычно существенно снижает P_miss.Уменьшить штраф: раннее разрешение веток (перенести решение в ID), предсказание направления в IF и предвыбор цели (BTB).Компиляторные приёмы: reorder (переместить независимые инструкции в ветвь), вставка delay‑слотов или предикация (заменить ветвления условными инструкциями).Мультипоточность/специальные аппаратные техники для маскировки задержек ветвей (SMT, гиперпоточность).Для загрузок (load‑use):
Форвардинг (MEM→EX), чтобы сократить необходимость ждать результата — обычно ограничивает штраф до 1 такта (у вас уже задано 1 такт).Компилятор: переупорядочивание инструкций, вставка независимых операций между load и use.Аппаратный prefetch / hardware prefetchers, чтобы снизить вероятность долгого ожидания памяти.Out‑of‑order исполнение (см. ниже) — позволяет выполнять независимые инструкции дальше по потоку, скрывая задержки загрузок.Value prediction (редко на практике из‑за сложности) — предсказать значение загрузки и продолжить выполнение.

3) Компромиссы при добавлении суперскалярности и Out‑Of‑Order

Суперскалярность (ширина >1, статическая или динамическая issue):
Плюсы:Потенциальное увеличение IPC пропорционально ширине при наличии ILP.Минусы/ограничения:Требуется более широкая выдача/фетч/декод/блоки регфайла (много портов) → больше площадь/потребление/сложная разводка обходов (bypass network) и увеличение критических путей.Усиливается влияние ветвей и промахов кеша (нужна более точная предсказательная логика и большая очередь инструкций).Достигается убывающая отдача: при ограниченной ILP увеличение ширины даёт всё меньший выигрыш.Out‑of‑Order (Tomasulo, ROB, rename, issue queue):
Плюсы:Хорошо скрывает задержки загрузок и долгие операции: независимые инструкции выполняются вне порядка, что уменьшает видимые stalls (может практически устранить нагрузочные 1‑тактовые паузы при наличии параллельных независимых команд).Повышает устойчивый IPC при наличии динамической ILP.Минусы:Существенно повышает аппаратную сложность: регназвание, ROB, большая очередь выдачи, логика wakeup/select, сложная обработка исключений/модификации памяти.Большее энергопотребление и площадь; масштабирование issue‑width плохо растёт (комбинаторика wakeup/select O(N^2) при naive реализации).Требует более сложной поддержки памяти (memory disambiguation) и усиленной механики предсказания/откатов.Практический выбор/рекомендации:
Небольшие улучшения (очень выгодные по соотношению цена/эффект): улучшенный динамический предсказатель ветвей + BTB; форвардинг и компиляторный reordering; hardware prefetch.Если бюджет по площади/энергии позволяет и в приложениях есть ILP: небольшая двухканальная (2‑way) суперскалярность и/или ограниченное OoO (небольшое окно) дают реальный прирост. Полноценный широкий OoO даёт наибольший IPC, но по цене сложности и потребления.Для кодов с большим количеством зависимостей и частыми загрузками выгоднее OoO; для кодов с хорошим статическим ILP — простая суперскалярность + компиляторная оптимизация.

Короткий вывод: при данной постановке основная потеря CPI — от load‑use (≈0.30 цикла) и от ветвей пропорционально их частоте и P_miss (0.2·P_miss). Самая энерго‑и/или стоимость‑эффективная оптимизация — улучшить предсказание ветвей и использовать компиляторное переупорядочивание/форвардинг; если требуется дальше повышать IPC — применять ограниченную суперскалярность и/или умеренное out‑of‑order, учитывая высокую аппаратную сложность и энергозатраты.

6 Окт в 11:02
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир