ВУЗ:
Составители:
3. ОПТИМИЗАЦИЯ КОДА
Рассмотрим некоторые методы машинно-независимой оптимизации кода. Мы не будем стремиться
к детальному описанию какого-либо из этих методов. Вместо этого мы дадим словесное описание и
проиллюстрируем основные понятия примерами.
Одним из важных источников оптимизации кода является удаление общих подвыражений, которые
встречаются в нескольких местах программы и вычисляют одно и тоже выражение. Рассмотрим, на-
пример предложение:
VAR x,y: ARRAY [1..10,1..10] OF INTEGER;
…
FOR i : = 1 TO 10 DO
x [ i , 2*j–1 ] : = y [ i , 2*j ];
…
Выражение 2*j является общим подвыражением. Оптимизирующий компилятор должен только
один раз сгенерировать код, вычисляющий это умножение, и использовать его результат в обоих мес-
тах.
Общие подвыражения обычно обнаруживаются при анализе промежуточной формы представления
программы (рис. 17). Следует отметить, что в первоначальном варианте требуется выполнить 161 опе-
рацию.
Если мы исследуем эту последовательность четверок, то обнаружим, что четверки 5 и 11 совпада-
ют, за исключением имени получаемого промежуточного результата. Обратите внимание, что операнд j
не меняет своего значения между четверками 5 и 11. Невозможно достичь четверки 11, не проходя
предварительно четверку 5, поскольку они расположены на одном линейном участке.
1) : = #1 i инициализация цикла
2)
>
i #10 (19)
3) – i #1 i1 вычисление индексов
для х
4) * i1 #10 i2
5) * #2 j i3
6) – i3 #1 i4
7) – i4 #1 i5
8) + i2 i5 i6
9) – i #1 i8 вычисление индексов
для y
10) * i8 #10 i9
11) * #2 j i10
12) – i10 #1 i11
13) + i9 i11 i12
14) : = y[i12] x[i6] операция
присваивания
Страницы
- « первая
- ‹ предыдущая
- …
- 27
- 28
- 29
- 30
- 31
- …
- следующая ›
- последняя »