Arch: edit

This commit is contained in:
2025-01-15 15:19:34 +03:00
parent 3a96c27c48
commit 0825ac9659
16 changed files with 129 additions and 144 deletions
+31 -19
View File
@@ -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. **Сохранение результата**
- Записать результаты в запоминающее устройство для последующего использования. Записать результаты в запоминающее устройство для последующего использования.
![Шаги обработки инструкций в CPU](../data/2.png) ![Шаги обработки инструкций в CPU](../data/2.png)
@@ -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 копии цикла развернуты без повторного использования регистров.
@@ -25,7 +28,7 @@ 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 |
@@ -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)** - запись рез-та. Имеется в виду запись в регистр.
![](../data/4.png) ![](../data/4.png)
![Ступени конвейера MIPS](../data/3.png) ![Ступени конвейера MIPS](../data/3.png)
@@ -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.
- Инструкции условного перехода проверяют значение регистра на равенство 0.
Это действие можно завершить в такте ID, перемещая проверку на этот такт. Это действие можно завершить в такте ID, перемещая проверку на этот такт.
- Оба IP (выбранный и невыбранный) должны быть вычислены заранее. 2. Оба IP (выбранный и невыбранный) должны быть вычислены заранее.
Требуется доп. сумматор, тк имеющееся ALU не может использовано до такта EX Требуется доп. сумматор, тк имеющееся ALU не может использовано до такта EX
В таком случае будет только 1 такт простоя при переходах. В таком случае будет только 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 (taken branch instruction) | IF | ID | EX | MEM | WB | | | | |
| :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | | I+1 | | IF | - | - | - | - | | | |
| I+1 | | IF | Idle | Idle | Idle | idle | | | |
| Branch target | | | IF | ID | EX | MEM | WB | | | | Branch target | | | IF | ID | EX | MEM | WB | | |
| Branch target +1 | | | | IF | ID | EX | MEM | WB | | | Branch target +1 | | | | IF | ID | EX | MEM | WB | |
| Branch target +2 | | | | | IF | ID | EX | MEM | WB | | Branch target +2 | | | | | IF | ID | EX | MEM | WB |
##### Предположение, что переход всегда происходит.
Продолжается выполнение инструкций, начиная с места перехода, ...
Труднее реализовать, чем предыдущий вариант.
@@ -1,16 +1,11 @@
#### Статическое предсказание переходов. #### Статическое предсказание переходов.
- Выполняется компилятором. - Выполняется компилятором.
- Кодируется в инструкциях условного перехода, используя один бит предсказания. - Кодируется в инструкциях условного перехода, используя один бит предсказания.
Например: 0 - переход обычно не происходит, 1 - происходит. Например: 0 - переход обычно не происходит, 1 - происходит.
- Требует поддержки на уровне ISA. - Требует поддержки на уровне ISA.
**Два основных метода статич. предсказания переходов на этапе компиляции:** **Два основных метода статического предсказания переходов на этапе компиляции:**
- Сбор информации о поведении программы при её запусках и её использование при перекомпиляции (**профилирование**).
- **Сбор информации о поведении программы при ее запусках и ее использование при перекомпиляции (профилирование).** *Например*: профиль программы может показать, что большинство условных переходов вперед и назад (часто вызвано циклами) происходят. В данном случае нужно всегда предсказывать, что переход происходит.
Например: профиль программы может показать, что большинство условных переходов вперед и назад (часто вызвано циклами) происходят. В данном случае нужно всегда предсказывать, что переход происходит. - Эвристическое предсказание переходов на основе направления перехода.
- **Эвристическое предсказания переходов на основе направления перехода.** *Например*: помечая переходы назад как происходящие и переходы вперед как не происходящие.
Например: помечая переходы назад как происходящие и переходы вперед как не происходящие.