Compare commits
5 Commits
master
...
d2aad2fe4a
| Author | SHA1 | Date | |
|---|---|---|---|
| d2aad2fe4a | |||
| 2cad4c263f | |||
| 0fb337c995 | |||
| 66d31539de | |||
| a0a230a84c |
3
.gitattributes
vendored
Normal file
3
.gitattributes
vendored
Normal 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
|
||||
@ -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
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
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
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
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
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
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
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
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
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
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
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
BIN
assets/short_circuit.mp4
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/study-guide.pdf.pdf
Normal file
BIN
assets/study-guide.pdf.pdf
Normal file
Binary file not shown.
@ -1,3 +1,4 @@
|
||||
---
|
||||
Статус: в работе
|
||||
Соответствует:
|
||||
---
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
1. Зависимости структурные, по данным и управлению. Способы преодоления зависимостей. Построение статической и динамической трассы исполнения команд. (2)
|
||||
2. Схемы основных мультипроцессорных архитектур (UMA, NUMA, векторная, сетевая, кластерная). Гранулярность. Классификация Флинна. (7, 8)
|
||||
3. Дискретизация аналогового сигнала. Эффекты дискретизации. Теорема Котельникова. (15)
|
||||
4. Фотоприемники на приборах с зарядовой связью (ФПЗС). КМОП-фотоприемники. Схемы пикселей и их работа. (17, 18)
|
||||
5. Магнитные диски. Технология записи. Логическое и физическое форматирование. FAT. NTFS. (21)
|
||||
Reference in New Issue
Block a user