Разработка компиляторов

       

Раскрутка циклов


Раскрутка циклов заключается в дублировании тела цикла и сокращении числа итераций. Кроме того, необходимо позаботиться, чтобы все вхождения переменной цикла в тело были заменены выражениями, вычисляющими требуемые значения с учетом измененных значений переменной цикла.

В современных машинных архитектурах используется конвейерный принцип - некоторый участок кода загружается во внутреннюю память процессора заранее в предположении, что его все равно придется исполнять. В ситуации, когда осуществляется переход за границы этой предварительно загруженной области осуществляется так называемый сброс конвейера, что сопровождается существенной временной задержкой. Понятно, что источником таких сбросов являются условные и безусловные переходы, в частности, переходы на начало циклов. Раскрутка предпринимается с целью увеличить протяженность линейных участков для того, чтобы предотвратить сброс конвейера при организации очередной итерации.

Пример этого преобразования приведен на иллюстрации. Как видно, в общем случае помимо раскрученного цикла необходима организация дополнительного цикла, осуществляющего довычисления для остатка итераций.



Содержание раздела