4.2. Упрощение действий

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

4.2.1. Удаление индуктивных переменных и выражений

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

Например, применение указанных преобразований переводит фрагмент

для I:=1, I+1 пока I<100

цикл

начало

K:=I+J; A[K]:= A[K]+1 конец;

K:=10;

во фрагмент

I:=1;

для K:=I+J, K+1 пока K<100+J

цикл

начало

A[K]:= A[K]+1 конец;

K:=10;

Здесь I,K - индуктивные переменные. В данном случае из цикла удалено индуктивное выражение K:=I+J.

4.2.2. Замена сложных операций на более простые

Весьма важным преобразованием из этой группы является по­нижение силы операций, заменяющее в индуктивных вычислениях сложные операции на более простые; например, возведение в сте­пень или деление заменяется умножением ( например, выражение Х/4.О заменяется на выражение Х* О.25), а умножение - сложени­ем.

Например, применение этого преобразования позволяет пере­ходить от цикла

для K:=1, K+1 пока K<=100

цикл V:=(K-1)*N+I

к более эффективно работающему фрагменту:

V:=I;

для K:=1, K+1 пока K<=100

цикл

начало A[V]:=A[V]+1;

V:=V+N конец

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

4.2.3. Исключение избыточных выражений

В группу преобразований по упрощению действий входят так­же исключение избыточных (лишних) выражений. Оно заключается в замене вхождений выражений на переменную, значение которой совпадает со значением выражения.

Например, эта операция осуществляет переход от фрагмента

если B>0 то

начало

A:=A+2; X:=A*B+C; конец

иначе Y:=A*B+D;

Z:= A*B;

к фрагменту

если B>0 то

начало

A:=A+2; W:=A*B; X:=W+C; конец

иначе начало

W:=A*B; Y:=W+D; конец;

Z=W;

4.2.4. Прочие преобразования

В эту же группу входит

экономия общих подвыражений, заменяющая, например, опера­тор

X:=(A+B)*(A+B+C)/(A+B+E) на фрагмент

Y:=A+B; X:=Y*(Y+C)/(Y+E),

а также такие преобразования, как втягивание вычисления параметров в процедуру, упрощение подстановки параметра-масси­ва, перестройки условных операторов (типа замены оператора

если X>0 && Y<2 то Z:=1

на оператор

если X>0 то начало если Y<2 то Z:=1 конец),

удаление копирований (в частности, заменяющее пересылку значе-

ний массива на пересылку его указателя), другие различные

способы перестройки структуры информационных объектов в за-

висимости от характера их использования и с целью сокращения

времени работы с объектами; различные способы реализации пере-

менных через быстрые регистры, замена рекурсии на циклы .

Другие оптимизирующие преобразования, упрощающие

действия,- это преобразования по объединению и по расчленению

циклов, по перестановке заголовков циклов.

4.3. Реализация действий

Это способ повышения качества программы за счет выполне­ния определенных ее вычислений на этапе трансляции.

Набор преобразований данного типа включает в себя следую­щие оптимизации:

константные действия (подстановка или свертка констант), когда происходит выполнение операций над константами;

распроцедуривание - открытая подстановка тела процедуры на место ее вызова;

ликвидация константных распознавателей - замена условного

оператора на одну из его ветвей, если его выбирающее (услов­ное) выражение имеет константное значение.

Реализация действий осуществляется также при

- втягивании констант, когда выражения, имеющие тождест­венно константные значения, заменяются на эти значения; при аналитических преобразованиях ( например, заменяющих Е*1 на Е или 0*Е на 0, где Е - произвольное подвыражение);

- отождествлении ( или втягивании уникальных), которое удаляет из программы оператор-пересылку вида X:=Y, где X и Y - переменные, заменяя либо вхождение X на Y - втягивание вверх (назад) - например, фрагмент Y:=F(W);X:=Y; заменяется на X:=F(W), либо вхождения Y на X - втягивание вниз (вперед) - например, X:=Y; если Z>0 то W:=Y+1 иначе W:=Y+2 заменяется на фрагмент если Z>0 то W:=X+1 иначе W:=X+2.


Информация о работе «Оптимизация программ»
Раздел: Информатика, программирование
Количество знаков с пробелами: 36941
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
29567
28
0

... ; i=1,3. Q – количество сырья Для автоматизированной обработки данных и вычислений используется пакет программ линейной оптимизации программного продукта Microsoft Excel. Решение Определяем оптимальные производственные мощности филиалов для производства определенного количества продукции различных видов с помощью транспортной задачи. Постановка транспортной задачи. Требуется определить ...

Скачать
82492
2
0

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

Скачать
6526
0
0

... заданных операндов. 3)  Использование косвенной адресации, когда операнд хранит адрес операнда. 4)  Ограничение использования стека. программа оптимизация ассемблер код 4. Машинно-независимая оптимизация кода ассемблера Машинно-независимая оптимизация предполагает: 1. Одним из важнейших источников оптимизации кода является удаление общих подвыражений, т.е. подвыражений, которые ...

Скачать
74118
11
4

... лишь контекстным анализом. Как было отмечено в [12], применение глубокого статического анализа программ может позволить существенно снизить количество ложных срабатываний и повысить точность обнаружения уязвимостей защиты. 4.3. Использование методов анализа потоков данных для решения задачи обнаружения уязвимостей В отделе компиляторных технологий по контракту с фирмой Nortel Networks ...

0 комментариев


Наверх