Реферат: Оптимизация программ

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

2. Промежуточный язык

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

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

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

в-третьих из-за нестандартности форматов различных эле­ментов языка и рекурсивных конструкций, широко применяемых в текстах программ.

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

Строго сформулировать требования, предъявляемые к проме­жуточному языку, трудно. Однако уже из самого обоснования не­обходимости промежуточного языка видно, что:

а) операторы языка не должны быть слишком мелкими;

б) символы, идентификаторы и числа должны иметь фиксиро­ванный формат;

в) в строении операторов желательно отсутствие рекур­сивности;

г) должна сохраняться вся информация, необходимая для оптимизации, которая есть во входном языке;

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

Требования пп. "г" и "д" показывают, что разработать еди­ный универсальный промежуточный язык для трансляции с любого языка программирования в коды любой вычислительной машины трудно. В качестве промежуточного языка можно использовать польскую запись, тетрады, триады, синтаксические деревья.

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

(mi) код операции аргументы оператора,

где mi - указатель оператора, а также идентификатор ре­зультата команды при отсутствии его присваивания некоторой пе­ременной.

Необходимо различать переменные, введенные программистом (программные переменные),и переменные, генерируемые в процессе

трансляции на промежуточный язык (mi - идентификаторы). Между

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

- если программная переменная, используемая в области, не определена в ней, то предполагается, что она определена во всех путях, ведущих к области;

- если программная переменная определена и используется в области, то внутри области существует путь между определением переменной и каждым ее использованием;

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

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

1. Таблицы идентификаторов и констант с обычной информацией о переменных и константах.

2. Таблица блоков, определяющая номера блоков (блоки нуме-

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

3. Таблица последовательности операторов, определяющая ли­нейную последовательность операторов в блоке. Она содер­жит последовательность указателей операторов mi. Эта таблица необходима, поскольку один указатель может при­надлежать нескольким операторам.

3.Элементы топологии программы

3.1. Блок (линейный участок)

К-во Просмотров: 742
Бесплатно скачать Реферат: Оптимизация программ