Я пытаюсь понять поток выполнения мопов после того, как они покидают Front-End и до того, как они отправляются в соответствующий порт выполнения.
В настоящее время у меня есть следующая ментальная модель этого:
Front-End (Fetch, Decode, Micro/Macro-Fuse)
|
|
Renamer (Detects dependency chains,
| Eliminate RAR, WAW hazards,
| Allocates resources like SB or LB,
| Binds the uop to some execution port)
|
|
|______ROB (Holds uop until it is fully completed)
|
|
|
RS aka Scheduler (Wait until all source operands are ready)
|
Execution ports
То, что я не понимаю, это то, как Intel Optimization Manual/2.5.3.1
описывает это:
Renamer - это мост между упорядоченной частью на рисунке 2-10, и мир потока данных Планировщика . Он перемещается до четырех микроопераций в каждом цикле от очереди микроопераций до вышедшего из строя механизма. Хотя переименователь может отправлять до 4 микроопераций (без слияния, с микроплавлением или с микроплавлением) за цикл, это эквивалентно тому, что порт выдачи может отправлять шесть микроопераций за цикл. В этом процессе ядро , вышедшее из строя, выполняет следующие шаги :
Переименовывает архитектурные источники и места назначения микро- ops к микро-архитектурным источникам и местам назначения.
Распределяет ресурсы для микроопераций. Например, загрузите или сохраните буферы.
Привязывает микрооперацию к соответствующему порту .
Но Scheduler
(он же RS) описывается следующим образом: 2.5.3.2
:
Планировщик управляет отправкой микроопераций на их порты исполнения. Для этого он должен определить, какие микрооперации готовы и откуда берутся их источники: запись файла реестра или обход непосредственно из исполнительного устройства. В зависимости от доступности портов отправки и шин обратной записи, а также приоритета готовых микроопераций, планировщик выбирает, какие микрооперации отправляются в каждом цикле.
ВОПРОС: Есть порт для отправки uop в выбранный Renamer, но диспетчеризация в порт, выбранный Renamer
, выполняется RS (иначе, планировщик), как только все операнды готовы?
Я измерил порт Распределение для подпрограммы копирования памяти основано на vmovdqu
и получило почти равномерное распределение:
13 493 383 038 uops_dispatched_port.port_2
13 494 860 751 uops_dispatched_port.port_3
Это не ясно, как это достигается просто с помощью Renamer. Он не знает, когда все операнды для UOP будут готовы, поэтому трудно выбрать, в какой порт отправлять UOP для достижения равномерного распределения UOP.