Анализ методов
компиляторной оптимизации модельного кода САЕ системы ФРУНД
Горобцов Александр Сергеевич,
доктор технических наук,
профессор,
Шапочкин Евгений Алексеевич,
магистрант.
Волгоградский
государственный технический университет.
В
настоящее время моделирование объектов и процессов является неотъемлемой частью
исследовательских и промышленых задач. Для расчетов этих моделей используются
САЕ системы, такие как система многотельного
моделирования ФРУНД. Общая для всех моделей тенденция увеличения детализации
приводит к увеличению объемов и времени обработки модельного кода. Специфика
генерации модельного кода системы ФРУНД затрудняет его оптимизацию
компиляторами. Поэтому было решено произвести анализ специфики генерируемого
системой ФРУНД модельного кода, и анализ методов компиляторной оптимизации с
целью выявить направления дальнейших улучшений кода.
При
анализе специфики модельного кода системы ФРУНД было выявлено:
·
модельный код написан на языке FORTRAN (из-за оптимизации на
уровне ассемблерного кода математических функций);
·
модельный код содержит большое количество
математических операций;
·
в модельном коде в явном виде отсутствуют
циклы;
·
модельный код генерируется в несколько
файлов. Среди них можно выделить файлы геометрии модели (fas*.for), содежащие
символьные уравнения (f0*.for), и файлы значений переменных(IDAN) [1].
Эти
особенности позволяют произвести анализ существующих методов оптимизации
программного кода осуществляемых компиляторами [2]. Результаты анализа представлены
в таблице 1.
Таблица 1.
Сводная
таблица основных методов оптимизации программного кода компиляторами.
метод |
эффект
оптимизации методом |
идея
метода / характерный пример |
Недостатки
метода применительно к оптимизации модельного кода системы ФРУНД |
удаление
излишних инструкций |
сокращение
модельного кода |
удалению
подвергаются множественные инструкции, которые повторяют смысл уже осуществленных |
удаляются
только инструкции, но не переменные |
удаление
недостижимого кода |
сокращение
модельного кода |
удаление
участков кода с недостижимым условием выполнения |
структура
модельного кода системы ФРУНД не содержит недостижимых участков |
применение
алгебраических упрощений |
сокращение
модельного кода, использование более быстрых частей кода |
А^2=А*А 0*Х*7=0 .... |
оптимизации
подвергаются только константы, но не переменные |
выделение
общих подвыражений |
сокращение
количества пересылок данных в оперативной памяти |
если выражение было
ранее вычислено и значения переменных с того времени не изменились, то повторного
вычисления можно избежать, если использовать ранее вычисленное значение. |
на
данный момент компиляторы не обрабатывают общие подвыражения, если они находятся
в разных файлах |
оптимизация
циклов |
увеличение
модельного кода, использование более быстрых частей кода |
перемещение
кода вовне цикла, устранение индуктивно переменной, снижение временной стоимости
операций |
отсутствие
циклов в явном виде в файлах модельного кода системы ФРУНД делает эти методы
нецелесообразными |
использование
распространения констант |
сокращение
модельного кода |
А*7*4*9 В*7*4*9 С=А+В => А*252 В*252 С=А+В |
оптимизации
подвергаются только константы, но не переменные |
анализ
активных переменных |
сокращение
количества пересылок данных в оперативной памяти |
можно не сохранять
значение вычисленной переменной в регистре, если при выходе из логического
блока переменная будет неактивна. |
на
данный момент достаточно хорошо реализуется компиляторами. Перерботки не
требует |
поиск
оптимального покрытия |
сокращение
количества пересылок данных в оперативной памяти, использование более быстрых
частей кода |
выбор
самого быстрого способа реализации последовательностями машинных команд конструкций
исходного кода |
на
данный момент достаточно хорошо реализуется компиляторами. Перерботки не
требует |
представление
операторов управления в виде переходов |
использование
более быстрых частей кода |
представление
управляющих операторов в виде меток и условных и безусловных переходов |
на
данный момент достаточно хорошо реализуется компиляторами. Перерботки не
требует |
На основе проведенного
анализа были сделаны выводы об узких местах компиляторной оптимизации
модельного кода системы многотельного моделирования
ФРУНД и были предложены способы его дальнейшей оптимизации:
·
применение
алгебраических упрощений – можно подвергать оптимизации не только константы, но
и переменные, учитывая их значения, хранящиеся в файле IDAN;
·
выделение
общих подвыражений – следует учитывать при оптимизации распределение модельного
кода на несколько разных файлов;
·
удаление
излишних инструкций – можно развить эту идею до удаления «мертвых переменных» -
удаление переменных встречающихся
в коде лишь однажды в левой части алгебраического присваивания, и в дальнейшем
не используемых.
Литература
1.
Шапочкин Е.А. Модуль предкомпиляторной
оптимизации модельного кода САЕ системы ФРУНД / Е.А. Шапочкин, А.С. Горобцов //
Каспийский инновационный форум: матер. Выступл. На конф. Молодых ученых и инноваторов
«Инно-Каспий», 8-10 февр.
2.
Шапочкин Е.А. Оптимизирующие
преобразования программного кода САЕ-систем. Е.А.
Шапочкин, А.С. Горобцов // Инновационные технологии в обучении и производстве:
матер. V
всерос. Н.-пр. конф.,
Камышин, 4-6 дек.
Поступила
в редакцию 30.04.2009 г.