Степнов Денис «Оптимизация управляющего графа программ

реклама
Выпускная квалификационная работа
Оптимизация управляющего графа
программ, имеющих избыточные условные
вычисления
Выполнил: Степнов Денис, 816 гр.
Научный руководитель: Бучнев А.Ю.
Общие понятия
• Нумерация значений – разбиение множества
операций промежуточного представления на классы
конгруэнтности (эквивалентности);
• Класс конгруэнтности – подмножество операций,
безусловно имеющих одинаковый результат;
• Гиперблок – непрерывная последовательность
инструкций, имеющая одну точку входа;
• CTP – операция подготовки передачи управления;
• Станок – регистр, необходимый для выполнения
операции CTP.
Проблематика
• Наличие в программах избыточных условных
вычислений, вырабатывающих предикат, который
используется для постановки операций под условие;
• Наличие безусловно исполняемых и ненужных
операций передачи управления;
• Потери в производительности, которые могут быть
вызваны ограниченным числом станков для
подготовок и давлением на кэш инструкций.
Постановка задачи
• Реализовать отдельную оптимизацию, устраняющую
избыточные вычисления предикатов
• Внедрить оптимизацию в оптимизирующий
компилятор «Эльбрус»
• Определить место в линейке оптимизаций
• Провести верификацию на стандартных пакетах тестов
• Поддержка оптимизации
• Провести оценку эффективности на пакете SPEC
Подход к решению задачи
1. Поиск избыточных условных вычислений
•
Используя результаты анализа «Нумерация
значений», выявить избыточные условные
вычисления;
2. Применение оптимизации
•
Дублировать If-узел с избыточным условием по всем
входящим в него дугам, по которым оно однозначно
определяется, и перенаправить на копии исходящие
дуги;
•
Удалить невыполнимые исходящие дуги из
полученных копий If-узла и быть может оригинала
(если у него осталась одна входящая дуга по которой
условие однозначно определяется), преобразовать Ifузлы в Simple-узлы.
Простейший пример
Если в узлах 2, 3, 4 нет операций, изменяющих переменные a или b,
то вычисление предиката в узле 4 является избыточным  нужно
создать копию узла 4 (узел 7) и упростить узлы 4 и 7
1. Поиск избыточных условных вычислений
• Алгоритм
Осуществить обход по всем
возможным парам If-узлов
рассматриваемой процедуры
Нет
Один из узлов доминирует
над другим
Да
Осуществить обход по всем
исходящим дугам доминатора и
входящим дугам доминируемого узла
Нет
Преемник исходящей дуги доминирует
над предшественником входящей дуги &
класс конгруэнтности операций,
вырабатывающих предикат, совпадает
Да
Занести доминируемый узел, входящую дугу,
значение предиката в специальный список
1. Поиск избыточных условных вычислений
• Пример
В данном примере существует
единственная подходящая для
рассмотрения пара If-узлов:
If-узел 1 доминирует If-узел 4.
Осуществив обход по дугам, можно
выявить две входящие в узел 4
дуги, в предшественниках которых
значение предиката точно известно.
Однако оптимизацию возможно
применить только по одной из
входящих в узел 4 дуг, так как
переменная «a» переопределяется
в узле 2.
2. Применение оптимизации
• Алгоритм
Осуществить обход списка,
полученного анализирующим
алгоритмом
Нет
В узел входит более одной
дуги
Удалить лишнюю исходящую
дугу и вычисление предиката
Да
Дублировать узел со всеми
исходящими дугами
Перенаправить на копию дугу,
содержащуюся в списке
Удалить у копии лишнюю
исходящую дугу и вычисление
предиката
2. Применение оптимизации
• Пример
Создаём узел 7 — копию узла 4.
При копировании узла CFGграфа средствами компилятора
«Эльбрус» (функция
graph_GetNodeCopy),
автоматически копируются
исходящие из него дуги.
Входящие дуги не копируются.
2. Применение оптимизации
• Пример
Перенаправляем входящую
дугу, по которой значение
предиката точно известно, на
скопированный узел.
2. Применение оптимизации
• Пример
Удаляем дугу, исходящую из
узла 7, соответствующую
отрицательному значению
предиката. Удаляем
вычисление предиката и
преобразовываем узел 7 из Ifузла в Simple-узел.
Оценка эффективности
3.00%
2.72%
2.50%
2.00%
1.92%
1.50%
1.17%
1.00%
0.50%
0.37%
0.22%
0.14%
0.00%
176.gcc
181.mcf
186.crafty
253.perlbmk
255.vortex
301.apsi
Ускорение, полученное на пакете тестов spec2000, в среднем
составило 0,5%
Результаты исследования
• Оптимизация реализована и внедрена в линейку
оптимизирующего компилятора «Эльбрус»:
• Применение на 3-м уровне оптимизации
• Применение перед объединением базовых блоков в
гипер-узлы (оптимизация if_conversion)
• Проведена верификация на пакетах дневного
тестирования при вливе в основную ветку компилятора,
а так же на генераторе тестов
• Проведена оценка эффективности на пакете тестов
spec2000
Скачать