diff --git a/Computer Science/Архитектуры/risc-iv.md b/Computer Science/Архитектуры/risc-iv.md new file mode 100644 index 0000000..e69de29 diff --git a/Computer Science/Архитектуры/vliw-iv.md b/Computer Science/Архитектуры/vliw-iv.md new file mode 100644 index 0000000..02ab719 --- /dev/null +++ b/Computer Science/Архитектуры/vliw-iv.md @@ -0,0 +1,27 @@ +## Учебная архитектура +## Реальные VLIW и Эльбрус +### Виды параллелизма +> [!warning] Эта часть должна переехать в часть лекций +1. На уровне инструкций + - Конвейризация + - Суперскалярность + - Длинные машинные слова (very long instruction word) +2. На уровне данных + - Векторы +3. На уровне потоков - многопоточность +4. На уровне процессов - много ядер в процессоре +### Оптимизация обращений к памяти +- Есть спекулятивные команды, по типу спекулятивного чтения. В самом начале процессор читает, а если нигде по итогу не использовалось, то прочитанное значение отваливается. +- Оптимизация обращений к памяти в цикле: вместо `load -> alu -> store` компилятор расслаивает итерации и делает `store i -> alu i+1 -> load i+2` (i - номер итерации) +### Оптимизация переходов +Переход довольно затратная операция для конвейрных процессоров. Виды оптимизаций: +1. Штраф за переход и просто все этапы конвейера сбрасываются (самый простой вариант, на практике встречается редко) +2. В Эльбрусе - предикаты, выполняются обе ветки (if-else) а потом записывает только то, что в предикате. Превращает Control Flow в Data Flow. Используется только для коротких веток (3-5 команд). Логика: команды сравнения записывают в регистровый файл предикатов 0 или 1. Компилятор ставит абсолютно все команды в поток исполнения (и из if, и из else), но ставит специальные биты в команду: номер предиката, который контроллирует выполнение. Дальше команды исполняются, на этапе декода процессор видит предикат, а на этапе записи в память делает операцию, только если управляющий предикат - 1. (P.S. такое же было и в Intel Itanium) +3. Предикт переходов, в cisc - это делает процессор (у него маленькая область видимости, поэтому может быть неэффективно), в vliw - это делает компилятор (компилятор видит всю программу целиком и может отлично с этим справится). Процессор готовится к переходу и загружает команды в конвейер. Эльбрус позволяет подготовавливать до трех переходов одновременно. +### Регистровое окно и стек регистров +- Процессор содержит несколько сотен регистров, каждая фукнция "заказывает" себе у процессора нужное количество, при этом видимые для функции регистров делятся на три группы: регистры с параметрами, регистры для временных вычислений, регистры с параметрами для вызываемой функции. В момент вызова функции регистровый файл виртуально сдвигается вниз - первая и вторая группы не будут видны вызванной функции. Третья группа становится первой, а новые вторые и третью группы функция снова заказывает. +- Если процессору не хватает физических регистров для функции, то процессор сам в фоновом режиме сбрасывает неиспользуемую часть регистрового файла в стек в ОЗУ. При возврате из функции процессор незаметно восстанавливает регистры из стека. +- Есть глобальная группа регистров (типичные регистры из cisc, risc) +### Безопасность +- Несколько стеков: регистры пользователя на одном, адрес возврата и состояние процессора - на другом - защита от buffer overflow и подмены адреса возврата +- Процессор различает в памяти указатели и сами данные. В Эльбрусе нельзя создать указатель не из указателя. При этом первичный указатель безопасно получается специальными командами и механизмами в процессоре \ No newline at end of file diff --git a/Computer Science/Архитектуры/Вычислительные архитектуры.md b/Computer Science/Архитектуры/Вычислительные архитектуры.md index 96dcd61..a21d137 100644 --- a/Computer Science/Архитектуры/Вычислительные архитектуры.md +++ b/Computer Science/Архитектуры/Вычислительные архитектуры.md @@ -4,4 +4,6 @@ - [x86_64](x86_64.md) (реальная архитектура) - [acc32](acc32.md) - [f32a](f32a.md) -- [m68k](m68k.md) \ No newline at end of file +- [m68k](m68k.md) (будет) +- [risc-iv](risc-iv.md) (будет) +- [vliw-iv](vliw-iv.md) (в работе, есть интересные факты про Эльбрус) \ No newline at end of file