Arch: chore
This commit is contained in:
@ -6,18 +6,14 @@
|
||||
Позволяет обрабатывать случаи, когда зависимости между инструкциями неизвестны во время компиляции.
|
||||
|
||||
**Концепции:**
|
||||
|
||||
- Инструкциям разрешается исполняться неупорядоченно, как только становятся доступны их операнды.
|
||||
- Разрешение инструкциям неупорядоченно завершаться.
|
||||
|
||||
**Реализация динамического планирования:**
|
||||
|
||||
- Ступень декодирования инструкций ID делится на 2 ступени:
|
||||
|
||||
1. **Выдача** - декодирование инструкций, проверка структурных конфликтов. Всегда выполняется в порядке, указанном в программе.
|
||||
Зависимости под данными записываются по мере того, как инструкции выдаются (динамически создается эквивалент графа зависимостей для множества инструкций, которые находятся в ЦП)
|
||||
2. **Чтение операндов** - ожидание разрешения конфликтов данных, если они есть, и последующее чтение операндов по мере их доступности. Может происходить в порядке, отличном от указанного в программе.
|
||||
|
||||
1. **Выдача** - декодирование инструкций, проверка структурных конфликтов. Всегда выполняется в порядке, указанном в программе.
|
||||
Зависимости под данными записываются по мере того, как инструкции выдаются (динамически создается эквивалент графа зависимостей для множества инструкций, которые находятся в ЦП)
|
||||
1. **Чтение операндов** - ожидание разрешения конфликтов данных, если они есть, и последующее чтение операндов по мере их доступности. Может происходить в порядке, отличном от указанного в программе.
|
||||
- На ступени выборки инструкции IF производится выборка дополнительной инструкции в специальный регистр или нескольких инструкций в очередь в каждом такте.
|
||||
- Увеличивается число функциональных устройств для исполнения большего числа инструкций на ступени EX без структурных конфликтов.
|
||||
- Два подхода к реализации:
|
||||
|
@ -1,21 +1,19 @@
|
||||
#### Принципы работы алгоритма Томасуло. "Станции резервации"(reservation stations), переименование регистров, общая шина данных (Common Data Bus, CDB). Поля станций резервации.
|
||||
|
||||
**Управление распределено по функциональным устройствам (в Табло - централизовано).**
|
||||
|
||||
- **FU** имеют специальные буферы - **«станции резервации» (Reservation Station)**, которые содержат:
|
||||
**FU** имеют специальные буферы - **«станции резервации» (Reservation Station)**, которые содержат:
|
||||
- Незавершенные инструкции.
|
||||
- Операнды незавершенных инструкций.
|
||||
- Информацию о статусе инструкций (включая зависимости данных).
|
||||
- Станции резервации иногда называют «физическими регистрами» или «переименованными регистрами» в противоположность регистрам архитектуры, заданным в ISA.
|
||||
Регистры ISA в инструкциях заменяются либо их значениями (если доступны), либо указателями на станции резервации, которые предоставят значение позже.
|
||||
- Этот процесс называется **переименованием регистров**.
|
||||
- Переименование регистров исключает конфликты WAR, WAW (зависимости по именам).
|
||||
- Позволяет использовать аппаратное разворачивание циклов.
|
||||
|
||||
- Станций резервации может быть больше, чем регистров ISA, что ведет к аппаратной оптимизации, которая невозможна для компиляторов, а также предотвращает узкое место из-за количества регистров ISA.
|
||||
Регистры ISA в инструкциях заменяются либо их значениями (если доступны), либо указателями на станции резервации, которые предоставят значение позже.
|
||||
|
||||
Этот процесс называется **переименованием регистров**. Переименование регистров исключает конфликты WAR, WAW (зависимости по именам). Позволяет использовать аппаратное разворачивание циклов.
|
||||
|
||||
Станций резервации может быть больше, чем регистров ISA, что ведет к аппаратной оптимизации, которая невозможна для компиляторов, а также предотвращает узкое место из-за количества регистров ISA.
|
||||
|
||||
**Недостатки:**
|
||||
|
||||
- Сложность реализации.
|
||||
- Требуется большое число высокоскоростных ассоциативных портов чтения результатов с CDB.
|
||||
- Производительность может ограничиваться одной CDB.
|
||||
@ -24,28 +22,24 @@
|
||||
|
||||
**Принцип работы:**
|
||||
|
||||
- **Стадия выдачи**
|
||||
1. **Стадия выдачи**
|
||||
Проверяем ожидает ли регистр какое-то значение от RS. Если ожидает - делаем пометку, что мы тоже ожидаем значение от той же RS, что и регистр. Иначе просто копируем значение регистра в аргумент. По итогу у нас либо есть все аргументы, либо мы знаем, от какой RS мы ожидаем аргументы. Потом помечаем, что наша станция busy. В конце помечаем выходной регистр, что он ожидает значения от нашей станции резервации.
|
||||
|
||||
Проверяем ожидает ли регистр какое-то значение от RS. Если ожидает - делаем пометку, что мы тоже ожидаем значение от той же RS, что и регистр. Иначе просто копируем значение регистра в аргумент. По итогу у нас либо есть все аргументы, либо мы знаем, от какой RS мы ожидаем аргументы. Потом помечаем, что наша станция busy. В конце помечаем выходной регистр, что он ожидает значения от нашей станции резервации.
|
||||
2. **Исполнение**
|
||||
Если готовы оба аргумента - начинаем исполнение.
|
||||
|
||||
- **Исполнение**
|
||||
|
||||
Если готовы оба аргумента - начинаем исполнение.
|
||||
|
||||
- **Запись результата**
|
||||
1) Если какой-то регистр ожидает ответа от нашей станции резервации, то записываем результат и помечаем, что регистр больше не ожидает - свободен.
|
||||
2) Всем станциям, которые в качестве параметра ожидали значение от нашей станции - записываем это значение.
|
||||
3) Если ожидала станция сохранения, то записываем
|
||||
4) Помечаем текущую станцию незанятой.
|
||||
3. **Запись результата**
|
||||
1) Если какой-то регистр ожидает ответа от нашей станции резервации, то записываем результат и помечаем, что регистр больше не ожидает - свободен.
|
||||
2) Всем станциям, которые в качестве параметра ожидали значение от нашей станции - записываем это значение.
|
||||
3) Если ожидала станция сохранения, то записываем
|
||||
4) Помечаем текущую станцию незанятой.
|
||||
|
||||
**Общая шина данных (CDB):** данные + адрес назначения (шина «куда)
|
||||
|
||||
- 64 бит для данных + 4 бита для адреса функционального устройства - источника.
|
||||
- данные записываются в ждущую RS, если адрес источника совпадает с адресом RS, которая производит операнд источник.
|
||||
- передача результата происходит через рассылку ждущим RS, включая регистровый файл.
|
||||
|
||||
**Поля станции резервации:**
|
||||
|
||||
- **Busy** - RS занята.
|
||||
- **Op** - операция, выполняемая в устройстве.
|
||||
- $V_j,V_k$ - значения операндов источников S1, S2.
|
||||
|
@ -2,17 +2,16 @@
|
||||
|
||||
- **Выборка (IF)** - обрабатывается последовательно.
|
||||
- **Выдача (ID)** - обрабатывается последовательно.
|
||||
- Получить инструкцию из очереди выбранных инструкций (IQ).
|
||||
- Выдать инструкцию в свободную RS, если нет структурного конфликта.
|
||||
- Пометить выбранную RS как занятую.
|
||||
- Переслать доступные значения операндов инструкции (из регистров ISA) в выбранную RS.
|
||||
- Переименовать еще не доступные операнды в указатели на RS, которые их произведут (переименование регистров, динамическое построение графа зависимостей данных).
|
||||
- Указать для выходного регистра, что он ожидает значение от используемой RS.
|
||||
- Получить инструкцию из очереди выбранных инструкций (IQ).
|
||||
- Выдать инструкцию в свободную RS, если нет структурного конфликта.
|
||||
- Пометить выбранную RS как занятую.
|
||||
- Переслать доступные значения операндов инструкции (из регистров ISA) в выбранную RS.
|
||||
- Переименовать еще не доступные операнды в указатели на RS, которые их произведут (переименование регистров, динамическое построение графа зависимостей данных).
|
||||
- Указать для выходного регистра, что он ожидает значение от используемой RS.
|
||||
- **Исполнение (EX)**
|
||||
- если оба операнда готовы, начинается исполнение на назначенном FU.
|
||||
|
||||
- если не все операнды готовы, следим за CDB в ожидании требуемого результата (через CDB происходит пересылка).
|
||||
т.е. предотвращаем RAW и соблюдаем зависимости по данным.
|
||||
- если оба операнда готовы, начинается исполнение на назначенном FU.
|
||||
- если не все операнды готовы, следим за CDB в ожидании требуемого результата (через CDB происходит пересылка).
|
||||
т.е. предотвращаем RAW и соблюдаем зависимости по данным.
|
||||
- **Запись результата (WB)**
|
||||
- результат выдается на CDB для всех ожидающих RS, т.е результат рассылается по CDB.
|
||||
- станция резервации помечается как свободная.
|
||||
- результат выдается на CDB для всех ожидающих RS, т.е результат рассылается по CDB.
|
||||
- станция резервации помечается как свободная.
|
||||
|
Reference in New Issue
Block a user