Files

19 lines
2.4 KiB
Markdown
Raw Permalink Normal View History

#### Статическая оптимизация с разворачиванием циклов. Требования к разворачиванию циклов.
**Стандартный способ увеличения ILP** состоит в использовании параллелизма между итерациями цикла, т.е параллелизма уровня цикла (Loop Level Parallelism, LLP)
2025-01-15 15:19:34 +03:00
Достигается путем разворачивания цикла, либо статически компилятором, либо динамически аппаратурой, чтобы увеличить размер имеющегося базового блока;
Больший размер базового блока позволяет удалить больше тактов простоя, т.к. больше инструкций могут переупорядочиваться.
2025-01-15 15:19:34 +03:00
##### Статическая оптимизация с разворачиванием цикла
Реализуется компилятором, но приводит к изменению кода на языке высокого уровня.
2025-01-15 15:19:34 +03:00
*Пример*: был цикл от 1 до 100 с шагом 1. Теперь делаем цикл от 1 до 100 с шагом 4 и на каждой итерации выполняем последовательно 4 тела цикла. Увеличивается размер базового блока, что позволяет удалить больше тактов простоя, т.к. инструкции могут переупорядочиваться.
2025-01-15 15:19:34 +03:00
##### Разворачивание циклов.
Больший размер базового блока - больше инструкций для перепланирования.
Исполняется меньше инструкций переходов и инструкций для поддержки циклов.
Разворачивание циклов еще эффективнее при реализации векторных команд.
2025-01-15 15:19:34 +03:00
###### Необходимые требования для разворачивания цикла
- Независимость итераций цикла.
- Большое количество регистров для предотвращения конфликтов по именам регистров (WAR, WAW).