Развернутый сценарий занятия с прямой речью преподавателя

Дисциплина: ОП.02 Архитектура аппаратных средств

Тема: Раздел 3. Технологии повышения производительности процессоров (§2.2 с.8 программы)

Организация: ММКЦТ «Академия TOP»

Регламенты проведения: Основной регламент — 90 минут; Сокращенный регламент — 60 минут.

Сценарий занятия: Основной регламент (90 минут)

1. Организационный момент и актуализация (00–05 мин)

00:00 – 05:00
Действие преподавателя: Приветствует аудиторию, открывает первый слайд презентации (название темы) и переходит ко второму слайду с формулой производительности.
«Здравствуйте, коллеги! Садитесь. Сегодня мы открываем одну из самых захватывающих глав компьютерной инженерии — Раздел 3, посвященный технологиям повышения производительности современных процессоров.

Позвольте начать с исторического парадокса. В 2004 году компания Intel выпустила процессор Pentium 4 Prescott с тактовой частотой 3.8 ГГц. Сегодня, спустя двадцать с лишним лет, топовые процессоры в наших ноутбуках и смартфонах работают на частотах около 3–4 ГГц, редко добираясь в турборежиме до 5–5.5 ГГц. Частота практически замерла. Но при этом современный процессор выполняет расчеты в десятки и сотни раз быстрее старого чипа! Как это возможно, если тактовый генератор тикает почти с той же скоростью?

Ответ кроется в фундаментальном "железном законе" производительности: время выполнения программы равно произведению числа инструкций $N$, среднего числа тактов на инструкцию $\text{CPI}$ и длительности такта $T_{\text{clk}}$. И сегодня мы разберем кремниевую магию: конвейеризацию, алгоритм Томасуло, предсказание переходов, векторные блоки SIMD и математический предел закона Амдала».

2. Теоретический блок 1: Конвейеризация и конфликты (05–25 мин)

05:00 – 25:00
Действие преподавателя: Демонстрирует слайды 3–5 презентации и схемы в lekciya.html, рисует на интерактивной доске тактовую диаграмму прохождения инструкций по 5 стадиям RISC-конвейера (IF, ID, EX, MEM, WB).
«Представьте автомобильный завод. Если собирать каждый автомобиль от начала до конца одной бригадой рабочих, машина будет выкатываться из цеха раз в месяц. Но Генри Форд разбил процесс на стадии: пока один рабочий устанавливает мотор, второй красит кузов, а третий монтирует колеса. Точно так же устроен классический процессорный конвейер.

Команда разбивается на пять независимых стадий: выборка из кэша IF, декодирование и чтение регистров ID, выполнение в ALU EX, обращение к памяти данных MEM и обратная запись результата в регистры WB. При идеальном конвейере каждый такт завершается одна новая команда, то есть $\text{CPI} = 1$.

Но в реальном коде конвейер наталкивается на три типа конфликтов (Hazards):
1. Структурные: когда два блока одновременно делят один провод. Мы решаем это Гарвардской архитектурой — разделяя кэш L1 на кэш инструкций L1i и кэш данных L1d.
2. Конфликты по данным (RAW — Read After Write): команда SUB R4, R1, R5 требует значение R1, которое вычисляется предшествующей командой ADD R1, R2, R3. Если ждать, пока команда ADD запишет результат в регистровый файл на стадии WB, конвейер будет вынужден стоять два такта — мы получим два "пузыря" простоя (NOP Stalls)!
Но инженеры придумали аппаратный форвардинг (Bypassing). Зачем ждать записи в регистры, если результат сложения уже готов на выходе сумматора ALU в конце стадии EX? Схема Forwarding Unit берет этот результат прямо с выхода межстадийного регистра и по служебной шине подает на вход ALU следующей команды. Задержка сокращается с двух тактов до нуля!
Единственное исключение — чтение из оперативной памяти (LW): данные появляются только на стадии MEM, поэтому один такт ожидания (Load-Use stall) предотвратить невозможно».

3. Теоретический блок 2: Суперскалярность, Out-of-Order и предсказание переходов (25–45 мин)

25:00 – 45:00
Действие преподавателя: Переходит к слайдам 6–10. Демонстрирует блок-схему Out-of-Order ядра с буфером переупорядочивания (ROB), станциями резервирования и таблицей переименования регистров (RAT).
«Как сделать $\text{CPI} < 1$, то есть выполнять более одной инструкции за такт? Построить суперскалярный процессор с несколькими параллельными конвейерами: четырьмя АЛУ, двумя векторными блоками, двумя блоками загрузки.

Но тут возникает тупик: если программа исполняется строго по порядку (In-Order), то одна "застрявшая" команда, ждущая данные из медленной оперативной памяти DRAM, заморозит все остальные порты! Решение этой проблемы создал в 1967 году Роберт Томасуло — динамическое внеочередное исполнение (Out-of-Order Execution — OoO).

Как работает ядро OoO? Во-первых, оно переименовывает архитектурные регистры. Если компилятор использовал один и тот же регистр RAX для двух несвязанных вычислений (ложные зависимости WAR и WAW), блок RAT сопоставляет их с разными физическими ячейками из пула в 200+ регистров. Зависимости исчезают!

Во-вторых, команды помещаются в станции резервирования (Reservation Stations). Команда не ждет своей очереди по тексту программы. Как только её операнды рассчитаны и прилетают по общей шине CDB (Common Data Bus), она мгновенно отправляется на свободный порт ALU!

Но внимание! Если команды выполняются вперемешку, как не сломать логику программы? Для этого служит буфер переупорядочивания (Reorder Buffer — ROB). Команды попадают в него строго по порядку, исполняются асинхронно, а фиксируют свои результаты (Commit / Retire) снова строго в исходной последовательности. Это гарантирует точную модель прерываний: если спекулятивная команда вызовет сбой, мы просто сотрем её из ROB без вреда для операционной системы.

А что делать с ветвлениями (if/else, циклы)? В современных конвейерах глубина составляет 15–19 стадий. Ждать проверки условия — значит терять до 20 тактов на каждом ветвлении! Поэтому процессор спекулятивно угадывает ветвь с помощью TAGE-предсказателей переходов, достигающих точности 98%. Если предсказатель угадал — конвейер летит вперед на полной скорости. Если ошибся — конвейер сбрасывается (Pipeline Flush), и процессор теряет 19 тактов».

4. Теоретический блок 3: Векторизация SIMD, термический барьер и закон Амдала (45–60 мин)

45:00 – 60:00
Действие преподавателя: Демонстрирует слайды 11–15 презентации. Показывает формулу динамической мощности $P = C \cdot V^2 \cdot f$, график закона Амдала и мем xkcd #303 о компиляции на слайде 15.
«Если скалярное ядро уже оптимизировано, как ускорить обработку массивов в нейросетях, графике и базах данных? Ответ — SIMD (Single Instruction, Multiple Data). Вместо того чтобы складывать по два числа за раз, наборы инструкций AVX2 (256 бит) и AVX-512 (512 бит) упаковывают в один регистр сразу 8 или 16 чисел формата float32. А аппаратная операция FMA (Fused Multiply-Add) выполняет умножение со сложением за один такт! Два таких порта на ядре при частоте 4 ГГц выдают теоретические 256 миллиардов операций с плавающей точкой в секунду (GFLOPS) всего на одном процессорном ядре!

Но почему мы не можем бесконечно поднимать частоту? Взгляните на формулу мощности КМОП-микросхем: $P = C \cdot V^2 \cdot f$. До 2005 года действовало правило Роберта Деннарда: с уменьшением транзистора падало напряжение питания $V$. Но на уровне 0.8 Вольт сработал квантовый предел: токи утечки начали расти лавинообразно. Мы уперлись в термический барьер (Power Wall): от кристалла размером с ноготь невозможно отвести больше 250 Ватт без жидкого азота.

Поэтому индустрия пошла по пути добавления ядер. Но и здесь нас подстерегает математический барьер — Закон Джина Амдала:
$S(N) = \frac{1}{(1-p) + \frac{p}{N}}$, где $p$ — параллельная часть программы.
Если даже 5% вашей программы выполняется строго последовательно (чтение диска, синхронизация потоков, инициализация), то даже на компьютере с миллионом процессорных ядер предельное ускорение никогда не превысит $S_{\max} = \frac{1}{0.05} = 20\text{ раз}$!

Взгляните на классический мем xkcd на слайде 15: когда программисты сражаются на креслах со шпагами со словами "Идет компиляция!" — они наглядно иллюстрируют закон Амдала: параллельная компиляция файлов упирается в последовательную стадию компоновки (Linking)!»

5. Практикум в интерактивном рабочем листе (60–80 мин)

60:00 – 80:00
Действие преподавателя: Дает команду открыть файл zanyatie.html в браузерах. Напоминает заполнить ФИО и группу, объясняет распределение 4 вариантов и начинает индивидуальный мониторинг работы за ПК.
«Коллеги, открываем на рабочих местах файл zanyatie.html. Введите свои настоящие фамилию, имя и учебную группу — лист автоматически сохраняет ваши ответы в локальное хранилище браузера.

Каждый садится за свой вариант инженерного анализа:
• Вариант 1: Анализирует конвейерные конфликты по данным (RAW) и составляет сравнительную диаграмму тактов: вставка NOP vs аппаратный форвардинг.
• Вариант 2: Производит строгий расчет закона Амдала для долей 75%, 90% и 95%, вычисляя ускорения при 2, 4, 8, 16 и 64 ядрах и предельный потолок.
• Вариант 3: Рассчитывает штраф за ошибку предсказания ветвлений (Branch Misprediction) в 19-ступенчатом конвейере при разной точности предсказателей.
• Вариант 4: Рассчитывает теоретический пиковый темп вычислений в GFLOPS для скаляра, SSE, AVX2 и AVX-512 с учетом FMA.

На расчетную часть у вас ровно 20 минут. Приступаем, я подхожу и консультирую по ходу работы».

6. Фронтальная верификация и разбор ошибок (80–87 мин)

80:00 – 87:00
Действие преподавателя: Проводит быстрый фронтальный опрос по контрольным точкам каждого варианта, сверяя результаты с критериальной рубрикой.
«Время вышло! Давайте сверим контрольные инженерные цифры.

Первый вариант: Сколько тактов заняло выполнение 4 инструкций без форвардинга? 10 тактов! А с форвардингом? Ровно 8 тактов. Выигрыш — 20% времени, и ни одного пузыря между регистровыми операциями.

Второй вариант: Каков предельный потолок ускорения при параллельной доле 90%? Ровно 10 раз. А при 95%? Ровно 20 раз. И заметьте, при 16 ядрах ускорение составляет уже 9.14x — дальнейшая покупка ядер становится экономически бессмысленной!

Третий вариант: Какой эффективный CPI получился при 2-битном счетчике (85% точности)? 1.57! А при TAGE-предсказателе с точностью 98%? 1.076. Это колоссальный скачок IPC: с 0.637 до 0.929 без поднятия частоты!

Четвертый вариант: Сколько пиковых GFLOPS выдало ядро на частоте 4 ГГц с блоком AVX-512? 256 GFLOPS! По сравнению с 16 GFLOPS у базового скаляра — это 16-кратный прирост производительности! Но не забывайте указать причину AVX Frequency Offset — динамический нагрев и сброс частоты».

7. Подведение итогов, рефлексия и инструктаж (87–90 мин)

87:00 – 90:00
Действие преподавателя: Благодарит студентов за интенсивную аналитическую работу, разъясняет регламент сдачи и статус резервного задания.
«Подведем итоги. Сегодня вы увидели, что процессор — это не просто монолитный чип, работающий на частоте в гигагерцах. Это гигантский логистический комплекс, где конвейер раскладывает команды по тактам, аппаратный байпассинг перебрасывает данные в обход регистров, алгоритм Томасуло динамически перетасовывает независимые вычисления, спекулятивный движок угадывает будущее с точностью 98%, а векторные блоки AVX перемалывают терабайты данных.

Нажмите кнопку "Печать в PDF / Сохранить" в рабочем листе для отправки отчета. По поводу резервного дистанционного домашнего задания (domashnee_zadanie.html): напоминаю, что его выполняют только те студенты, кому оно будет назначено индивидуально для закрытия академических задолженностей. Всем спасибо за продуктивную работу, занятие окончено!»

Сценарий занятия: Сокращенный регламент (60 минут)

1. Организационный ввод (00–03 мин)

00:00 – 03:00
«Здравствуйте! Начинаем занятие по технологиям повышения производительности процессоров. Наша цель сегодня — понять, как конвейер, внеочередное исполнение Out-of-Order, предсказание переходов, векторные блоки SIMD и закон Амдала позволяют процессорам достигать колоссальной скорости при фиксированной частоте. Открываем рабочие материалы».

2. Экспресс-теория: Конвейер, Out-of-Order и Ветвления (03–20 мин)

03:00 – 20:00
«Кратко о ключевых узлах: 5 стадий классического конвейера (IF, ID, EX, MEM, WB) обеспечивают завершение одной команды за такт при непрерывном потоке. Конфликты по данным (RAW) замораживают стадии, но аппаратный форвардинг (Bypassing) передает данные прямо с выхода ALU на вход следующей команды без задержек.

Чтобы выйти на IPC > 1, суперскалярное ядро использует алгоритм Томасуло: переименование регистров (RAT) стирает ложные зависимости WAR и WAW, станции резервирования запускают команды по готовности данных независимо от порядка в программе, а буфер переупорядочивания (ROB) фиксирует результаты строго по порядку. При ветвлениях спекулятивный движок и TAGE-предсказатель удерживают точность на уровне 98%, предотвращая тяжелый сброс конвейера на 15–20 тактов».

3. Экспресс-теория: SIMD, предел Деннарда и Закон Амдала (20–35 мин)

20:00 – 35:00
«Векторные инструкции SIMD (AVX2 на 256 бит и AVX-512 на 512 бит) обрабатывают до 16 чисел float32 за один такт с помощью операции FMA.

Почему частоты не растут выше 4–5 ГГц? Из-за нарушения масштабирования Деннарда и термического барьера (Power Wall): статические токи утечки не позволяют снизить напряжение ниже 0.8 В. Единственный путь — многоядерность. Но закон Амдала предупреждает: ускорение $S(N) = \frac{1}{(1-p) + p/N}$ жестко лимитируется последовательной долей. При 5% последовательного кода ($p = 0.95$) теоретический предел ускорения равен ровно 20 раз при любом числе ядер!»

4. Фокусный практикум в расчетном листе (35–52 мин)

35:00 – 52:00
«Переходим в файл zanyatie.html. Заполняем ФИО, группу и приступаем к расчетам своего варианта: задержки RAW и форвардинг (В1), расчет ускорения Амдала (В2), штрафы промаха ветвления (В3) или векторные GFLOPS в AVX-512 (В4). На концентрированную работу у вас 17 минут».

5. Экспресс-сверка результатов и финал (52–60 мин)

52:00 – 60:00
«Сверяем результаты: Вариант 1 — сокращение с 10 до 8 тактов; Вариант 2 — пределы ускорения 4x, 10x и 20x; Вариант 3 — падение задержки с 1.90 такта до 0.076 при TAGE; Вариант 4 — 256 GFLOPS на ядро AVX-512. Сохраняем заполненные формы в локальное хранилище. Резервное ДЗ — только по индивидуальному указанию. Урок окончен!»