#### Определение динамического планирования. Принципы реализации динамического планирования. **Динамическое планирование** (неупорядоченное исполнение, out-of-order execution) - аппаратный механизм переупорядочивания (изменения порядка исполнения инструкций) во время исполнения. - Не может преодолеть истинные зависимости данных, но пытается сократить или даже предотвратить простои. - Позволяет обрабатывать случаи, когда зависимости между инструкциями неизвестны во время компиляции. **Концепции:** - Инструкциям разрешается исполняться неупорядоченно, как только становятся доступны их операнды. - Разрешение инструкциям неупорядоченно завершаться. **Реализация динамического планирования:** - Ступень декодирования инструкций ID делится на 2 ступени: 1. **Выдача** - декодирование инструкций, проверка структурных конфликтов. Всегда выполняется в порядке, указанном в программе. Зависимости под данными записываются по мере того, как инструкции выдаются (динамически создается эквивалент графа зависимостей для множества инструкций, которые находятся в ЦП) 1. **Чтение операндов** - ожидание разрешения конфликтов данных, если они есть, и последующее чтение операндов по мере их доступности. Может происходить в порядке, отличном от указанного в программе. - На ступени выборки инструкции IF производится выборка дополнительной инструкции в специальный регистр или нескольких инструкций в очередь в каждом такте. - Увеличивается число функциональных устройств для исполнения большего числа инструкций на ступени EX без структурных конфликтов. - Два подхода к реализации: 1) **Табло (Scoreboard)**, 1963. 2) **Алгоритм Томасуло**, 1966. Будем считать, что стадия выборки выполняется на соответствующем для нее такте, что конфликтов управления у нас не возникает, что выборка всегда успевает поставить нам очередную инструкцию. Предполагаем, что может быть реализовано несколько исполняющих блоков на стадии исполнения.