ВУЗ:
Составители:
15) + #1 i i14 конец цикла
16) : = i14 i
17) GOTO (2)
18) … следующая операция
Рис. 17
Таким образом, четверки 5 и 11 вычисляют одно и то же значение. Это означает, что мы можем
удалить четверку 11 и заменить любые обращения к ее результату (i9) на обращение к переменной i3,
которая является результатом четверки 5. Эта модификация позволяет избежать дублирования вычис-
лений подвыражения 2*j, которое мы выделили как общее подвыражение при анализе исходной про-
граммы.
После замены i3 на i10 мы обнаружим, что четверки 6 и 12 также совпадают, за исключением имени
результата. Следовательно, мы можем удалить четверку 12 и заменить переменную i11 всюду, где она
используется, на переменную i4. Аналогично четверки 10 и 11 также могут быть удалены, поскольку
они эквивалентны четверкам 3 и 4. В результате получим новую последовательность четверок (рис. 18),
которая предполагает выполнение всего 121 операции.
Обратите внимание, что общее количество четверок сокращено с 17 до 13. Поскольку операции во
всех используемых здесь четверках займут, вероятно, примерно одинаковое время на обычном компью-
тере, то мы также сократим общее время выполнения программы.
Другим источником оптимизации кода является удаление инвариантов цикла. Так называются
подвыражения внутри цикла, результирующие значения которых не изменяются внутри цикла при пе-
реходе от одной итерации к другой. Таким образом, эти значения могут быть вычислены только один
раз перед входом в тело цикла вместо того, чтобы вычислять их заново перед каждой итерацией. По-
скольку для большинства программ основное время работы приходится на выполнение циклов, эко-
номия времени от подобной оптимизации может быть весьма существенной.
1) : = #1 i инициализация цикла
2)
>
i #10 (14)
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) + i2 i4 i12 вычисление индексов для y
10) : = y[i12] x[i6] операция
присваивания
11) + #1 i i14 конец цикла
12) : = i14 i
13) GOTO (2)
14) … следующая операция
Рис. 18
Страницы
- « первая
- ‹ предыдущая
- …
- 28
- 29
- 30
- 31
- 32
- …
- следующая ›
- последняя »