Arch: edit
This commit is contained in:
Vendored
+31
-19
@@ -1,19 +1,31 @@
|
|||||||
[
|
{
|
||||||
"file-explorer",
|
"file-explorer": true,
|
||||||
"global-search",
|
"global-search": true,
|
||||||
"switcher",
|
"switcher": true,
|
||||||
"graph",
|
"graph": true,
|
||||||
"backlink",
|
"backlink": true,
|
||||||
"canvas",
|
"canvas": true,
|
||||||
"outgoing-link",
|
"outgoing-link": true,
|
||||||
"tag-pane",
|
"tag-pane": true,
|
||||||
"page-preview",
|
"properties": false,
|
||||||
"templates",
|
"page-preview": true,
|
||||||
"note-composer",
|
"daily-notes": false,
|
||||||
"command-palette",
|
"templates": true,
|
||||||
"editor-status",
|
"note-composer": true,
|
||||||
"bookmarks",
|
"command-palette": true,
|
||||||
"outline",
|
"slash-command": false,
|
||||||
"word-count",
|
"editor-status": true,
|
||||||
"file-recovery"
|
"bookmarks": true,
|
||||||
]
|
"markdown-importer": false,
|
||||||
|
"zk-prefixer": false,
|
||||||
|
"random-note": false,
|
||||||
|
"outline": true,
|
||||||
|
"word-count": true,
|
||||||
|
"slides": false,
|
||||||
|
"audio-recorder": false,
|
||||||
|
"workspaces": false,
|
||||||
|
"file-recovery": true,
|
||||||
|
"publish": false,
|
||||||
|
"sync": false,
|
||||||
|
"webviewer": false
|
||||||
|
}
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
# Уровни абстракции электронной вычислительной системы. Фон Неймановская модель компьютера.
|
# Уровни абстракции электронной вычислительной системы
|
||||||
|
|
||||||
#### Уровни абстракции
|
|
||||||
|
|
||||||
1. **Физика (электроны)**
|
1. **Физика (электроны)**
|
||||||
- Поведение электронов описывается квантовой механикой и системой уравнений Максвелла.
|
- Поведение электронов описывается квантовой механикой и системой уравнений Максвелла.
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,13 @@
|
|||||||
# Шаги обработки инструкций в CPU
|
# Шаги обработки инструкций в CPU
|
||||||
|
|
||||||
1. **Выборка инструкции**
|
1. **Выборка инструкции**
|
||||||
- Выбрать инструкцию программы из памяти. Программный счетчик (Program Counter, PC / Instruction Pointer, IP) указывает на следующую для обработки инструкцию.
|
Выбрать инструкцию программы из памяти. Программный счетчик (Program Counter, PC / Instruction Pointer, IP) указывает на следующую для обработки инструкцию.
|
||||||
|
|
||||||
2. **Декодирование инструкции**
|
2. **Декодирование инструкции**
|
||||||
- Определить требуемые действия и размер инструкции.
|
Определить требуемые действия и размер инструкции.
|
||||||
|
|
||||||
3. **Выборка операндов**
|
3. **Выборка операндов**
|
||||||
- Найти и получить данные операндов.
|
Найти и получить данные операндов.
|
||||||
|
|
||||||
4. **Исполнение**
|
4. **Исполнение**
|
||||||
- Вычислить значение результата или статус.
|
Вычислить значение результата или статус.
|
||||||
|
|
||||||
5. **Сохранение результата**
|
5. **Сохранение результата**
|
||||||
- Записать результаты в запоминающее устройство для последующего использования.
|
Записать результаты в запоминающее устройство для последующего использования.
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -3,10 +3,12 @@
|
|||||||
**Параллелизм уровня инструкций (ILP)** - возможность одновременного выполнения нескольких инструкций в конвейере ЦП.
|
**Параллелизм уровня инструкций (ILP)** - возможность одновременного выполнения нескольких инструкций в конвейере ЦП.
|
||||||
|
|
||||||
ILP существует, когда инструкции в последовательности независимы и поэтому могут исполняться параллельно (с перекрытием). Конвейеры с большим ILP (меньшим числом зависимостей) показывают лучшую производительность на CPU с конвейером.
|
ILP существует, когда инструкции в последовательности независимы и поэтому могут исполняться параллельно (с перекрытием). Конвейеры с большим ILP (меньшим числом зависимостей) показывают лучшую производительность на CPU с конвейером.
|
||||||
**Базовый блок инструкций** - линейная последовательность инструкций без переходов внутрь, за исключением точки входа, и без переходов наружу, за исключением точки выхода из последовательности. Пример: тело цикла.
|
|
||||||
|
|
||||||
|
**Базовый блок инструкций** - линейная последовательность инструкций без переходов внутрь, за исключением точки входа, и без переходов наружу, за исключением точки выхода из последовательности. *Пример*: тело цикла.
|
||||||
- ILP в базовом блоке определяется имеющимися зависимостями между инструкциями и размером блока.
|
- ILP в базовом блоке определяется имеющимися зависимостями между инструкциями и размером блока.
|
||||||
- В типичном целочисленном коде частота условных переходов около $15\%$, что дает средний размер базового блока - 7 инструкций.
|
- В типичном целочисленном коде частота условных переходов около $15\%$, что дает средний размер базового блока - 7 инструкций.
|
||||||
- Любой статический метод, увеличивающий размер базового блока, расширяет блок инструкций для оптимального статического планирования конвейера компилятором и увеличивает ILP.
|
- Любой статический метод, увеличивающий размер базового блока, расширяет блок инструкций для оптимального статического планирования конвейера компилятором и увеличивает ILP.
|
||||||
|
|
||||||
Один из таких методов - разворачивание цикла.
|
Один из таких методов - разворачивание цикла.
|
||||||
|
|
||||||
**Статический метод** - метод, который не имеет доступа к полям объекта, и для вызова такого метода не нужно создавать экземпляр класса, в котором он объявлен.
|
**Статический метод** - метод, который не имеет доступа к полям объекта, и для вызова такого метода не нужно создавать экземпляр класса, в котором он объявлен.
|
||||||
|
|||||||
@@ -1,20 +1,19 @@
|
|||||||
#### Статическая оптимизация с разворачиванием циклов. Требования к разворачиванию циклов.
|
#### Статическая оптимизация с разворачиванием циклов. Требования к разворачиванию циклов.
|
||||||
|
|
||||||
**Стандартный способ увеличения ILP** состоит в использовании параллелизма между итерациями цикла, т.е параллелизма уровня цикла (Loop Level Parallelism, LLP)
|
**Стандартный способ увеличения ILP** состоит в использовании параллелизма между итерациями цикла, т.е параллелизма уровня цикла (Loop Level Parallelism, LLP)
|
||||||
|
|
||||||
Достигается путем разворачивания цикла, либо статически компилятором, либо динамически аппаратурой, чтобы увеличить размер имеющегося базового блока;
|
Достигается путем разворачивания цикла, либо статически компилятором, либо динамически аппаратурой, чтобы увеличить размер имеющегося базового блока;
|
||||||
Больший размер базового блока позволяет удалить больше тактов простоя, тк больше инструкций могут переупорядочиваться.
|
Больший размер базового блока позволяет удалить больше тактов простоя, т.к. больше инструкций могут переупорядочиваться.
|
||||||
|
|
||||||
- **Статическая оптимизация с разворачиванием цикла.**
|
|
||||||
|
|
||||||
|
##### Статическая оптимизация с разворачиванием цикла
|
||||||
Реализуется компилятором, но приводит к изменению кода на языке высокого уровня.
|
Реализуется компилятором, но приводит к изменению кода на языке высокого уровня.
|
||||||
Пример: был цикл от 1 до 100 с шагом 1. Теперь делаем цикл от 1 до 100 с шагом 4 и на каждой итерации выполняем последовательно 4 тела цикла. Увеличивается размер базового блока, что позволяет удалить больше тактов простоя, тк инструкции могут переупорядочиваться.
|
*Пример*: был цикл от 1 до 100 с шагом 1. Теперь делаем цикл от 1 до 100 с шагом 4 и на каждой итерации выполняем последовательно 4 тела цикла. Увеличивается размер базового блока, что позволяет удалить больше тактов простоя, т.к. инструкции могут переупорядочиваться.
|
||||||
|
|
||||||
- **Разворачивание циклов.**
|
|
||||||
|
|
||||||
|
##### Разворачивание циклов.
|
||||||
Больший размер базового блока - больше инструкций для перепланирования.
|
Больший размер базового блока - больше инструкций для перепланирования.
|
||||||
Исполняется меньше инструкций переходов и инструкций для поддержки циклов.
|
Исполняется меньше инструкций переходов и инструкций для поддержки циклов.
|
||||||
Разворачивание циклов еще эффективнее при реализации векторных команд.
|
Разворачивание циклов еще эффективнее при реализации векторных команд.
|
||||||
**Необходимые требования для разворачивания цикла:**
|
|
||||||
|
|
||||||
|
###### Необходимые требования для разворачивания цикла
|
||||||
- Независимость итераций цикла.
|
- Независимость итераций цикла.
|
||||||
- Большое количество регистров для предотвращения конфликтов по именам регистров (WAR, WAW).
|
- Большое количество регистров для предотвращения конфликтов по именам регистров (WAR, WAW).
|
||||||
@@ -1,19 +1,22 @@
|
|||||||
#### Пример разворачивания цикла.
|
#### Пример разворачивания цикла.
|
||||||
|
|
||||||
```assembly
|
```c
|
||||||
for (i = 1000; i>0; i = i-1)
|
for (i = 1000; i>0; i = i-1)
|
||||||
x[i]= x[i] + s;
|
x[i] = x[i] + s;
|
||||||
|
```
|
||||||
|
|
||||||
Без оптимизации:
|
Без оптимизации:
|
||||||
Loop: LD [R1], F0 1
|
```armasm
|
||||||
простой 2
|
Loop: LD [R1], F0 ; 1
|
||||||
ADD F2, F0, F4 3
|
; простой ; 2
|
||||||
простой 4
|
ADD F2, F0, F4 ; 3
|
||||||
простой 5
|
; простой ; 4
|
||||||
ST F4, [R1] 6
|
; простой ; 5
|
||||||
ADD R1, R3, R1 7
|
ST F4, [R1] ; 6
|
||||||
простой 8
|
ADD R1, R3, R1 ; 7
|
||||||
BNE R1, R2, Loop 9
|
; простой ; 8
|
||||||
простой 10
|
BNE R1, R2, Loop ; 9
|
||||||
|
; простой ; 10
|
||||||
```
|
```
|
||||||
|
|
||||||
- 4 копии цикла развернуты без повторного использования регистров.
|
- 4 копии цикла развернуты без повторного использования регистров.
|
||||||
@@ -24,20 +27,20 @@ Loop: LD [R1], F0 1
|
|||||||
|
|
||||||
Разворачивание цикла сразу с оптимизацией:
|
Разворачивание цикла сразу с оптимизацией:
|
||||||
|
|
||||||
| Loop: | LD [R1], F0 | 1 |
|
| Loop: | LD [R1], F0 | 1 |
|
||||||
| :--: | :--: | :--: |
|
| :---: | :--------------: | :---------: |
|
||||||
| | LD [R1-8], F6 | 2 |
|
| | LD [R1-8], F6 | 2 |
|
||||||
| | LD [R1-16], F10 | 3 |
|
| | LD [R1-16], F10 | 3 |
|
||||||
| | LD [R1-24], F14 | 4 |
|
| | LD [R1-24], F14 | 4 |
|
||||||
| | ADD F2, F0, F4 | 5 |
|
| | ADD F2, F0, F4 | 5 |
|
||||||
| | ADD F2, F6, F8 | 6 |
|
| | ADD F2, F6, F8 | 6 |
|
||||||
| | ADD F2, F10, F12 | 7 |
|
| | ADD F2, F10, F12 | 7 |
|
||||||
| | ADD F2, F14, F16 | 8 |
|
| | ADD F2, F14, F16 | 8 |
|
||||||
| | ST F4, [R1] | 9 |
|
| | ST F4, [R1] | 9 |
|
||||||
| | ST F8, [R1-8] | 10 |
|
| | ST F8, [R1-8] | 10 |
|
||||||
| | ADD R1, R3, R1; | R3 -=32; 11 |
|
| | ADD R1, R3, R1; | R3 -=32; 11 |
|
||||||
| | ST F12, [R1+16] | 12 |
|
| | ST F12, [R1+16] | 12 |
|
||||||
| | BNE R1, R2, Loop | 13 |
|
| | BNE R1, R2, Loop | 13 |
|
||||||
| | ST F16, [R1+8]; | 8-32 = -24 |
|
| | ST F16, [R1+8]; | 8-32 = -24 |
|
||||||
|
|
||||||
Время итерации цикла сократилось до 14 тактов или $\frac{14}{4}=3.5$ для исходной итерации; Ускорение $\frac{6}{3.5}=1.7$
|
Время итерации цикла сократилось до 14 тактов или $\frac{14}{4}=3.5$ для исходной итерации; Ускорение $\frac{6}{3.5}=1.7$
|
||||||
@@ -1,20 +1,14 @@
|
|||||||
# Определение микрооперации. Определение "среднее CPI программы"
|
# Определение микрооперации. Определение "среднее CPI программы"
|
||||||
|
- **Микрооперация**
|
||||||
**Микрооперация**
|
Элементарное аппаратное действие, которое может быть произведено за 1 такт CPU.
|
||||||
- Элементарное аппаратное действие, которое может быть произведено за 1 такт CPU.
|
Микрооперация соответствует одной микроинструкции в микропрограммируемых CPU.
|
||||||
- Микрооперация соответствует одной микроинструкции в микропрограммируемых CPU.
|
- **Набор RISC команд**
|
||||||
|
Множество микроопераций, которые выполняет процессор.
|
||||||
**Набор RISC команд**
|
|
||||||
- Множество микроопераций, которые выполняет процессор.
|
|
||||||
|
|
||||||
**Набор CISC команд**
|
**Набор CISC команд**
|
||||||
- Множество микроопераций, получаемых при декодировании процессором CISC команд.
|
Множество микроопераций, получаемых при декодировании процессором CISC команд.
|
||||||
|
|
||||||
**CPI (Cycles Per Instruction)**
|
**CPI (Cycles Per Instruction)**
|
||||||
- Такт на инструкцию.
|
Такт на инструкцию.
|
||||||
|
|
||||||
**Среднее CPI программы**
|
**Среднее CPI программы**
|
||||||
- CPI, усредненное для всех инструкций, выполненных в программе на CPU с заданным дизайном.
|
CPI, усредненное для всех инструкций, выполненных в программе на CPU с заданным дизайном.
|
||||||
|
|
||||||
**IPC (Instruction Per Cycle)**
|
**IPC (Instruction Per Cycle)**
|
||||||
- Число инструкций за такт, $$ IPC = 1/CPI. $$
|
Число инструкций за такт: $IPC = 1/CPI$
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
#### Уравнение производительности CPU
|
#### Уравнение производительности CPU
|
||||||
|
|
||||||
**Формула:**
|
|
||||||
|
|
||||||
$$ T = I \times CPI \times C $$
|
$$ T = I \times CPI \times C $$
|
||||||
|
|
||||||
**Где:**
|
**Где:**
|
||||||
- $I$ - число исполняемых инструкций программы.
|
- $I$ - число исполняемых инструкций программы.
|
||||||
- $CPI$ - число тактов на инструкцию.
|
- $CPI$ - число тактов на инструкцию.
|
||||||
- $C$ - фиксированное время такта, $C = \frac{1}{\text{тактовая частота}}$.
|
- $C$ - фиксированное время такта, $C = 1 / {\text{тактовая частота}}$.
|
||||||
@@ -1,10 +1,7 @@
|
|||||||
**Факторы, влияющие на производительность CPU:**
|
**Факторы, влияющие на производительность CPU:**
|
||||||
|
- **Число исполняемых инструкций (I):**
|
||||||
- **Число исполняемых инструкций \( I \):**
|
|
||||||
- Зависит от используемой программы, компилятора, ISA.
|
- Зависит от используемой программы, компилятора, ISA.
|
||||||
|
|
||||||
- **Среднее CPI:**
|
- **Среднее CPI:**
|
||||||
- Зависит от используемой программы, компилятора, ISA, организации CPU.
|
- Зависит от используемой программы, компилятора, ISA, организации CPU.
|
||||||
|
|
||||||
- **Время такта \( C \):**
|
- **Время такта \( C \):**
|
||||||
- Зависит от организации CPU и технологии (СБИС).
|
- Зависит от организации CPU и технологии (СБИС).
|
||||||
@@ -5,6 +5,5 @@
|
|||||||
- Желательно иметь как можно больше регистров и режимов адресации (CISC - подход).
|
- Желательно иметь как можно больше регистров и режимов адресации (CISC - подход).
|
||||||
- Размер регистрового файла и размер поля режима адресации влияют на размер средней инструкции и на размер средней программы в целом.
|
- Размер регистрового файла и размер поля режима адресации влияют на размер средней инструкции и на размер средней программы в целом.
|
||||||
- Желательно ограничить длину кода инструкции ради эффективной обработки при реализации (как минимум должна быть целым числом байт).
|
- Желательно ограничить длину кода инструкции ради эффективной обработки при реализации (как минимум должна быть целым числом байт).
|
||||||
- Фиксированная длина - работает быстрее и проще реализовывается аппаратно.
|
- *Фиксированная длина* работает быстрее и проще реализовывается аппаратно.
|
||||||
- Переменная длина - позволяет уменьшить средний размер инструкции.
|
- *Переменная длина* позволяет уменьшить средний размер инструкции.
|
||||||
- Гибридная.
|
|
||||||
@@ -1,18 +1,16 @@
|
|||||||
#### Принцип конвейерной обработки инструкций. Определение ступени/стадии конвейера. Ступени конвейера MIPS (пример-иллюстрация).
|
#### Принцип конвейерной обработки инструкций. Определение ступени/стадии конвейера. Ступени конвейера MIPS (пример-иллюстрация).
|
||||||
|
**Конвейерная обработка инструкций** - метод реализации CPU, при котором множество операции над несколькими инструкциями перекрываются.
|
||||||
Конвейерная обработка инструкций - метод реализации CPU, при котором множество операции над несколькими инструкциями перекрываются.
|
|
||||||
|
|
||||||
- Конвейер, исполняющий инструкцию, состоит из множества шагов, где на каждом завершается этап обработки инструкции. Каждый шаг называется ступенью конвейера или стадией конвейера.
|
- Конвейер, исполняющий инструкцию, состоит из множества шагов, где на каждом завершается этап обработки инструкции. Каждый шаг называется ступенью конвейера или стадией конвейера.
|
||||||
- Ступени и стадии конвейера соединены линейным образом: инструкции входят с одного конца, проходят по ступеням и выходят на другом конце.
|
- Ступени и стадии конвейера соединены линейным образом: инструкции входят с одного конца, проходят по ступеням и выходят на другом конце.
|
||||||
- Конвейеризация не сокращает время выполнения отдельной инструкции.
|
- Конвейеризация не сокращает время выполнения отдельной инструкции.
|
||||||
|
|
||||||
- **Ступени конвейера MIPS:**
|
##### Ступени конвейера MIPS
|
||||||
|
- **IF (Instruction Fetch)** - выборка инструкций.
|
||||||
**IF (Instruction Fetch)** - выборка инструкций.
|
- **ID (Instruction Decode)** - декодирование инструкции
|
||||||
**ID (Instruction Decode)** - декодирование инструкции
|
- **EX (Execution)** - исполнение.
|
||||||
**EX (Execution)** - исполнение.
|
- **MEM (MEMory Access)** - обращение к памяти.
|
||||||
**MEM (MEMory Access)** - обращение к памяти.
|
- **WB (Write Back)** - запись рез-та. Имеется в виду запись в регистр.
|
||||||
**WB (Write Back)** - запись рез-та. Имеется в виду запись в регистр.
|
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#### Латентность и пропускная способность (+определение).
|
#### Латентность и пропускная способность (+определение).
|
||||||
|
|
||||||
**Латентность** - время, требуемое для завершения всех шагов по обработке инструкции (время задержки завершения инструкции).
|
**Латентность** - время, требуемое для завершения всех шагов по обработке инструкции (время задержки завершения инструкции).
|
||||||
|
|
||||||
Мин. время задержки завершения инструкции равно числу ступеней конвейера.
|
Мин. время задержки завершения инструкции равно числу ступеней конвейера.
|
||||||
Конвейеризация увеличивает пропускную способность CPU.
|
Конвейеризация увеличивает пропускную способность CPU.
|
||||||
|
|
||||||
**Пропускная способность** - среднее число инструкций, завершенных за такт. Величина, обратная СРІ.
|
**Пропускная способность** - среднее число инструкций, завершенных за такт. Величина, обратная СРІ.
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
**Конфликты управления** возникают, когда неизвестен вовремя адрес след. исполняемой инструкции. Конфликт имеет место при выполнении любой управляющей инструкции.
|
**Конфликты управления** возникают, когда неизвестен вовремя адрес след. исполняемой инструкции. Конфликт имеет место при выполнении любой управляющей инструкции.
|
||||||
|
|
||||||
- При выполнении условного перехода может измениться Instruction Pointer.
|
> [!NOTE]
|
||||||
|
> При выполнении условного перехода может измениться Instruction Pointer.
|
||||||
|
|
||||||
Для корректной обработки требуется остановить конвейер на много тактов, пока не будет вычислено условие перехода и определится направление перехода, иначе IP может неверным, когда потребуется на ступени IF.
|
Для корректной обработки требуется остановить конвейер на много тактов, пока не будет вычислено условие перехода и определится направление перехода, иначе IP может неверным, когда потребуется на ступени IF.
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
#### Аппаратные способы сокращения числа тактов простоя (+пример).
|
#### Аппаратные способы сокращения числа тактов простоя (+пример).
|
||||||
|
|
||||||
1) Как можно раньше выяснить, выполняется ли переход
|
1) Как можно раньше выяснить, выполняется ли переход
|
||||||
2) Как можно раньше вычислить адрес следующей исполняемой инструкции.
|
2) Как можно раньше вычислить адрес следующей исполняемой инструкции.
|
||||||
|
|
||||||
**Пример.** В рассматриваемом примере (MIPS):
|
**Пример.** В рассматриваемом примере (MIPS):
|
||||||
|
1. Инструкции условного перехода проверяют значение регистра на равенство 0.
|
||||||
|
Это действие можно завершить в такте ID, перемещая проверку на этот такт.
|
||||||
|
|
||||||
- Инструкции условного перехода проверяют значение регистра на равенство 0.
|
2. Оба IP (выбранный и невыбранный) должны быть вычислены заранее.
|
||||||
|
Требуется доп. сумматор, тк имеющееся ALU не может использовано до такта EX
|
||||||
Это действие можно завершить в такте ID, перемещая проверку на этот такт.
|
В таком случае будет только 1 такт простоя при переходах.
|
||||||
|
|
||||||
- Оба IP (выбранный и невыбранный) должны быть вычислены заранее.
|
|
||||||
|
|
||||||
Требуется доп. сумматор, тк имеющееся ALU не может использовано до такта EX
|
|
||||||
В таком случае будет только 1 такт простоя при переходах.
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,31 +3,32 @@
|
|||||||
|
|
||||||
**Задержанный/отложенный переход** - инструкция, след. после перехода (из слота задержки перехода) исполняется независимо от того, произошел переход или нет (введена частью ISA).
|
**Задержанный/отложенный переход** - инструкция, след. после перехода (из слота задержки перехода) исполняется независимо от того, произошел переход или нет (введена частью ISA).
|
||||||
|
|
||||||
- **Предположение, что переход никогда не происходит.**
|
##### Предположение, что переход никогда не происходит.
|
||||||
|
|
||||||
Продолжается выполнение инструкций, начиная с инструкции, след. за инструкцией перехода, но состояние машины не меняется до тех пор, пока рез-тат перехода точно не определен. Если переход не произошел - состояние сохраняется, если произошел - рез-таты отбрасываются, фактически произошел простой.
|
Продолжается выполнение инструкций, начиная с инструкции, след. за инструкцией перехода, но состояние машины не меняется до тех пор, пока рез-тат перехода точно не определен. Если переход не произошел - состояние сохраняется, если произошел - рез-таты отбрасываются, фактически произошел простой.
|
||||||
|
|
||||||
- **Предположение, что переход всегда происходит.**
|
###### Пример
|
||||||
|
Переход не произошел, нет простоя:
|
||||||
Продолжается выполнение инструкций, начиная с места перехода, ...
|
|
||||||
Труднее реализовать, чем предыдущий вариант.
|
|
||||||
|
|
||||||
**Пример: схема предсказания «переход не произойдет»:**
|
|
||||||
|
|
||||||
**Переход не произошел, нет простоя:**
|
|
||||||
|
|
||||||
|
| Program | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
||||||
|
| :-- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
|
||||||
| I (untaken branch instruction) | IF | ID | EX | MEM | WB | | | | |
|
| I (untaken branch instruction) | IF | ID | EX | MEM | WB | | | | |
|
||||||
| :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- |
|
|
||||||
| I+1 | | IF | ID | EX | MEM | WB | | | |
|
| I+1 | | IF | ID | EX | MEM | WB | | | |
|
||||||
| I+2 | | | IF | ID | EX | MEM | WB | | |
|
| I+2 | | | IF | ID | EX | MEM | WB | | |
|
||||||
| I+3 | | | | IF | ID | EX | MEM | WB | |
|
| I+3 | | | | IF | ID | EX | MEM | WB | |
|
||||||
| I+4 | | | | | IF | ID | EX | MEM | WB |
|
| I+4 | | | | | IF | ID | EX | MEM | WB |
|
||||||
|
|
||||||
**Переход произошел, простой:**
|
Переход произошел, простой:
|
||||||
|
|
||||||
|
| Program | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
||||||
|
| :--------------------------- | :-: | :-: | :--: | :--: | :--: | :--: | :-: | :-: | :-: |
|
||||||
|
| I (taken branch instruction) | IF | ID | EX | MEM | WB | | | | |
|
||||||
|
| I+1 | | IF | - | - | - | - | | | |
|
||||||
|
| Branch target | | | IF | ID | EX | MEM | WB | | |
|
||||||
|
| Branch target +1 | | | | IF | ID | EX | MEM | WB | |
|
||||||
|
| Branch target +2 | | | | | IF | ID | EX | MEM | WB |
|
||||||
|
|
||||||
|
##### Предположение, что переход всегда происходит.
|
||||||
|
Продолжается выполнение инструкций, начиная с места перехода, ...
|
||||||
|
Труднее реализовать, чем предыдущий вариант.
|
||||||
|
|
||||||
|
|
||||||
| I (taken branch instruction) | IF | ID | EX | MEM | WB | | | | |
|
|
||||||
| :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- |
|
|
||||||
| I+1 | | IF | Idle | Idle | Idle | idle | | | |
|
|
||||||
| Branch target | | | IF | ID | EX | MEM | WB | | |
|
|
||||||
| Branch target +1 | | | | IF | ID | EX | MEM | WB | |
|
|
||||||
| Branch target +2 | | | | | IF | ID | EX | MEM | WB |
|
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
#### Статическое предсказание переходов.
|
#### Статическое предсказание переходов.
|
||||||
|
|
||||||
- Выполняется компилятором.
|
- Выполняется компилятором.
|
||||||
- Кодируется в инструкциях условного перехода, используя один бит предсказания.
|
- Кодируется в инструкциях условного перехода, используя один бит предсказания.
|
||||||
|
Например: 0 - переход обычно не происходит, 1 - происходит.
|
||||||
Например: 0 - переход обычно не происходит, 1 - происходит.
|
|
||||||
|
|
||||||
- Требует поддержки на уровне ISA.
|
- Требует поддержки на уровне ISA.
|
||||||
|
|
||||||
**Два основных метода статич. предсказания переходов на этапе компиляции:**
|
**Два основных метода статического предсказания переходов на этапе компиляции:**
|
||||||
|
- Сбор информации о поведении программы при её запусках и её использование при перекомпиляции (**профилирование**).
|
||||||
- **Сбор информации о поведении программы при ее запусках и ее использование при перекомпиляции (профилирование).**
|
*Например*: профиль программы может показать, что большинство условных переходов вперед и назад (часто вызвано циклами) происходят. В данном случае нужно всегда предсказывать, что переход происходит.
|
||||||
Например: профиль программы может показать, что большинство условных переходов вперед и назад (часто вызвано циклами) происходят. В данном случае нужно всегда предсказывать, что переход происходит.
|
- Эвристическое предсказание переходов на основе направления перехода.
|
||||||
- **Эвристическое предсказания переходов на основе направления перехода.**
|
*Например*: помечая переходы назад как происходящие и переходы вперед как не происходящие.
|
||||||
|
|
||||||
Например: помечая переходы назад как происходящие и переходы вперед как не происходящие.
|
|
||||||
Reference in New Issue
Block a user