Cтраница 1
Обнаружение неэффективных мест в программе должно быть основано на принципах, исключающих возможность внесения ошибок в программу. Иначе говоря, прежде чем применять какое-либо оптимизирующее преобразование к программе, необходимо иметь гарантию, что выполнение этого преобразования не внесет ошибку в программу. Например, прежде чем исключить из программы некоторую переменную и вычисления, определяющие эту переменную, должно быть установлено, что эта переменная после определения нигде в прогр ам-ме не используется. [1]
Для обнаружения неэффективных мест в контексте линейного участка в процессе просмотра строк промежуточного представления программы, входящих в линейный участок, формируются таблицы VALUE и NAME. В таблицу VALUE запись производится только для тех строк, в которых имеется знак операции. [2]
В процессе обнаружения неэффективных мест в программе формируется таблица VALUE и модифицируются таблицы LOOP и BRANCH. Таблица VALUE формируется как результат нумерации значений. В ней записывается информация о возможности выполнения таких оптимизирующих преобразований, как исключение мертвых переменных, распространение констант, инициирование переменных, исключение повторных вычислений, чистка фрагментов, замена операции деления операцией умножения, уменьшение числа обращений к индексированным переменным, уменьшение числа обращений к встроенным ( стандартным) функциям и процедурам-функциям, исключение из цикла инвариантных вычислений, замена операции деления операцией умножения в цикле, перемещение вычислений в менее часто выполняемые участки программы, сокращение числа преобразований данных с помощью перегруппировки переменных. [3]
В процессе обнаружения неэффективных мест в программе необходимо модифицировать таблицы LOOP и BRANCH для каждой процедуры, входящей в оптимизируемую программу. [4]
Из вышеизложенного следует, что для обнаружения неэффективных мест в программах можно применить следующий алгоритм. [5]
Под оптимизацией программы следует понимать процесс обнаружения неэффективных мест в программе и их устранение. В принципе, процесс оптимизации является потенциальным источником внесения ошибок в программу. Поэтому выполнение какого-либо оптимизирующего преобразования должно гарантировать исключение возможности внесения ошибок в программу. [6]
Области Тг - Tk заполняются в процессе обнаружения неэффективных мест в программе. В них записываются информация о возможности выполнения оптимизирующих преобразований над циклами. [7]
В связи с этим процедура собственно оптимизации программ предусматривает обнаружение неэффективных мест в программе для тех оптимизирующих преобразований, которые наиболее эффективны и наиболее часто встречаются в литературе, посвященной проблеме оптимизации программ. Рассмотрим подробнее оптимизирующие преобразования и те условия, которые должны быть выполнены для обнаружения возможности их применения. [8]
Области ОРТ и NEWLAB таблицы BRANCH заполняются в процессе обнаружения неэффективных мест в программе. [9]
Если при этом рассматриваемый операнд является результатом вычисления ( номером строки промежуточного представления) или константой, то ему номер значений присваивается по методу, используемому в алгоритме 7.1 обнаружения неэффективных мест в контексте линейного участка. [10]
В предлагаемой книге автор попытался рассмотреть основные вопросы, связанные с созданием единой универсальной методики машинонезависимой оптимизации программ, такие, как место выполнения оптимизации в процессе создания программ, промежуточный язык, на уровне которого следует производить анализ и последующую оптимизацию программ, анализ хода выполнения программ, анализ информационных связей в программах, обнаружение неэффективных мест в программах и реализация оптимизирующих преобразований. Особое место в книге отводится проблеме увеличения глубины приложений различных оптимизирующих преобразований. [11]
Процедура собственно оптимизации программы состоит из двух этапов. Первый этап предназначен для обнаружения неэффективных мест в программе и установления тех оптимизирующих преобразований, которые следует выполнить над ними. [12]
Естественно, что неэффективные места в программе обнаруживаются в соответствии с теми оптимизирующими преобразованиями, для выполнения которых предусмотрена процедура собственно оптимизации. Поэтому не имеет смысла говорить об обнаружении неэффективных мест в программах вообще, без предварительной конкретизации каталога выполняемых оптимизирующих преобразований. [13]
При этом каждое присвоение номера значений рассматриваемому элементу данных ei учитывается процедурой обнаружения узких мест в программе. Для этого каждый раз после присвоения рассматриваемому элементу данных e eC / se ( n ( 1) очередного номера значений вычисление ( строка промежуточного представления), содержащее этот элемент данных в качестве первого или второго операнда, обрабатывается процедурами нумерации значений и обнаружения неэффективных мест в программе. Присвоение номера значений вычислениям ( выражениям) производится обычным способом, как раньше. [14]