Compare commits

..

5 Commits

17 changed files with 130 additions and 0 deletions

3
.gitattributes vendored Normal file
View File

@ -0,0 +1,3 @@
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.gif filter=lfs diff=lfs merge=lfs -text
*png filter=lfs diff=lfs merge=lfs -text

View File

@ -0,0 +1,85 @@
---
Статус: в работе
Соответствует: "2"
---
*Длиннющий билет*
> [!info]+ Отступление про конвейер
> Большинство процессоров сейчас конвейерные. Выполнение инструкции разбивается на отдельные этапы, которые могут выполняться +- паралелльно. В рамках методички выделяются следующие типичные стадии конвеера
> - выборка команды - IF (по адресу, заданному счетчиком команд, из памяти извлекается команда);
> - декодирование команды / выборка операндов из регистров - ID;
> - выполнение операции / вычисление эффективного адреса памяти - EX;
> - обращение к памяти - MEM;
> - запоминание результата - WB.
>
> ![[conveyor_example_1.gif]]
> *Конвейер некорректный, потому что тут есть зависимость по данным, которая не учитывается. Потом поймете*
>
> Производительность этом возрастает благодаря тому, что одновременно на различных ступенях конвейера выполняются несколько команд. Она не сокращает время выполнения отдельной команды. Имеются некоторые накладные расходы на конвейеризацию, возникающие в результате несбалансированности задержки на каждой его ступени. Частота синхронизации (такт синхронизации) не может быть выше, чем время, необходимое для работы наиболее медленной ступени конвейера
# Зависимости структурные, по данным и управлению
На конвейере иногда возникают различные конфликтные ситуации, например WB пишет в регистр R1, а ID из него же хочет почитать. Они не могут сделать это одновременно. Разрешение подобных конфликтов как правило сопряжено с замедлениями конвейера
**Выделяют 3 класса конфликтов**:
1. Структурные конфликты, которые возникают из-за конфликтов по ресурсам, когда аппаратные средства не могут поддерживать все возможные комбинации команд в режиме одновременного выполнения с совмещением.
2. Конфликты по данным, возникающие в случае, когда выполнение одной команды зависит от результата выполнения предыдущей команды.
3. Конфликты по управлению, которые возникают при конвейеризации команд переходов и других команд, которые изменяют значение счетчика команд
## Структурные зависимости и способы их преодоления
*Обычно случаются, потому что аппаратных средств ограниченное количество. Конечно количество ядер, конечно количество конвейеров, конечна пропускная способность оперативной памяти или не поддерживается одновременная запись и чтение*
%%
Может возникнуть например когда нескольким ступеням конвейера необходимо обратиться к памяти, а у ОЗУ только один порт и он не поддерживает много обращений одновременно. Чтобы разрешить эту ситуацию, можно просто приостановить конвейер на один такт, когда происходит обращение к памяти за данными. Подобная приостановка часто называются "конвейерным пузырем" (pipeline bubble) или просто пузырем, поскольку пузырь проходит по конвейеру, занимая место, но не выполняя никакой полезной работы
%%
Продемонстрируем структурные конфликт на следующем примере: "когда одна команда содержит обращение к памяти за данными, оно будет конфликтовать с выборкой более поздней команды из памяти"
### Решение
**Чтобы разрешить эту ситуацию, можно просто приостановить конвейер на один такт, когда происходит обращение к памяти за данными.**
*Пример из методички:*
![[Pasted image 20250609133320.png]]
> [!tip]- Анимация для удобства восприятия:
> ![[buble_demo.gif]]
> *Вероятно хотели показать, что команда 1 на этапе MEM выполняет обращение к оперативной памяти, из-за чего не получается загрузить новую команду на конвейер*
Структурные конфликты остаются в аппаратуре, потому что их полное решение сопряжено с очень большими денежными затратами и полным перепроектированием всего процессора и его периферии
## Зависимости по данным и методы их преодоления
Зависимость по данным может быть продемонстрирована на следующем примере:
![[Pasted image 20250609134742.png]]
> [!tip]- Анимация для демонстрации
> ![[data_conflict.gif]]
В этом примере все команды, следующие за командой ADD, используют результат ее выполнения. Если ничего не сделать, то SUB прочитает неправильное значение
*Значение регистра R1 не является определенным, даже если мы знаем все предыдущие команды в программе, потому что могли происходить прерывания, изменившие R1*
### Решение
Решается проблема при помощи техники **обхода (data bypassing)** или **закоротки (short-circuiting)** - Результат операции АЛУ с его выходного регистра всегда снова подается назад на входы АЛУ. Если аппаратура обнаруживает, что предыдущая операция АЛУ записывает результат в регистр, соответствующий источнику операнда для следующей операции АЛУ, то логические схемы управления выбирают в качестве входа для АЛУ результат, поступающий по цепи "обхода" , а не значение, прочитанное из регистрового файла
> [!tip]- Анимация для удобства восприятия
> *Анимация довольно сложная и комплексная, так то пришлось поставить ее в качестве mp4*
>
> ![[short_circuit.mp4]]
>
> В реальности аппаратура замечает, что нужно использовать закоротку еще в момент ex команды ADD, уже тогда она знает, что запрашивается регистр, являющийся выходным. Но суть в анимации передана
Зависимости по данным группируются в следующую таблицу
![[Pasted image 20250609153524.png]]
Возьмем команды: сначала на конвейер приходит команда A, потом команда B
- RAW - B пытается читать тот регистр, в который еще не успела записать A. Есть риск получить старое или вовсе мусорное значение
- WAR - A пытается прочитать из ячейки, куда пишет B. Фактически это означает, что по какой-то причине B получает возможность писать раньше, чем A читать, что не должно происходить, если A попадает на конвейер раньше B. Однако в процессорах 6 поколения допускается выполнение команд не в порядке их следования в коде
- WAW - B пытается писать операнд раньше, чем А запишет свой результат, то есть записи происходят в неправильном порядке. *Возможны только в конвейерах, где запись может происходить на нескольких ступенях*
*схема на рисунке*
![[Pasted image 20250609162101.png]]

BIN
assets/Pasted image 20250609000344.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/Pasted image 20250609133114.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/Pasted image 20250609133320.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/Pasted image 20250609134742.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/Pasted image 20250609153524.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/Pasted image 20250609162101.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/buble_demo.gif (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/buble_demo.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/conveyor_example_1.gif (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/conveyor_example_1.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/data_conflict.gif (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/short_circuit.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/study-guide.pdf.pdf Normal file

Binary file not shown.

View File

@ -1,3 +1,4 @@
--- ---
Статус: в работе Статус: в работе
Соответствует:
--- ---

View File

@ -0,0 +1,5 @@
1. Зависимости структурные, по данным и управлению. Способы преодоления зависимостей. Построение статической и динамической трассы исполнения команд. (2)
2. Схемы основных мультипроцессорных архитектур (UMA, NUMA, векторная, сетевая, кластерная). Гранулярность. Классификация Флинна. (7, 8)
3. Дискретизация аналогового сигнала. Эффекты дискретизации. Теорема Котельникова. (15)
4. Фотоприемники на приборах с зарядовой связью (ФПЗС). КМОП-фотоприемники. Схемы пикселей и их работа. (17, 18)
5. Магнитные диски. Технология записи. Логическое и физическое форматирование. FAT. NTFS. (21)