Arch: edit
This commit is contained in:
50
.obsidian/core-plugins.json
vendored
50
.obsidian/core-plugins.json
vendored
@ -1,19 +1,31 @@
|
||||
[
|
||||
"file-explorer",
|
||||
"global-search",
|
||||
"switcher",
|
||||
"graph",
|
||||
"backlink",
|
||||
"canvas",
|
||||
"outgoing-link",
|
||||
"tag-pane",
|
||||
"page-preview",
|
||||
"templates",
|
||||
"note-composer",
|
||||
"command-palette",
|
||||
"editor-status",
|
||||
"bookmarks",
|
||||
"outline",
|
||||
"word-count",
|
||||
"file-recovery"
|
||||
]
|
||||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"properties": false,
|
||||
"page-preview": true,
|
||||
"daily-notes": false,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"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,18 +1,13 @@
|
||||
# Шаги обработки инструкций в CPU
|
||||
|
||||
1. **Выборка инструкции**
|
||||
- Выбрать инструкцию программы из памяти. Программный счетчик (Program Counter, PC / Instruction Pointer, IP) указывает на следующую для обработки инструкцию.
|
||||
|
||||
Выбрать инструкцию программы из памяти. Программный счетчик (Program Counter, PC / Instruction Pointer, IP) указывает на следующую для обработки инструкцию.
|
||||
2. **Декодирование инструкции**
|
||||
- Определить требуемые действия и размер инструкции.
|
||||
|
||||
Определить требуемые действия и размер инструкции.
|
||||
3. **Выборка операндов**
|
||||
- Найти и получить данные операндов.
|
||||
|
||||
Найти и получить данные операндов.
|
||||
4. **Исполнение**
|
||||
- Вычислить значение результата или статус.
|
||||
|
||||
Вычислить значение результата или статус.
|
||||
5. **Сохранение результата**
|
||||
- Записать результаты в запоминающее устройство для последующего использования.
|
||||
Записать результаты в запоминающее устройство для последующего использования.
|
||||
|
||||

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

|
||||

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