Files
2025-02-15 15:42:36 +03:00

19 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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