140 likes | 358 Views
Выпускная квалификационная работа. Оптимизация управляющего графа программ, имеющих избыточные условные вычисления. Выполнил : Степнов Денис, 816 гр. Научный руководитель : Бучнев А.Ю. Общие понятия.
E N D
Выпускная квалификационная работа Оптимизация управляющего графа программ, имеющих избыточные условные вычисления Выполнил: Степнов Денис, 816 гр. Научный руководитель: Бучнев А.Ю.
Общие понятия • Нумерация значений – разбиение множества операций промежуточного представления на классы конгруэнтности (эквивалентности); • Класс конгруэнтности – подмножество операций, безусловно имеющих одинаковый результат; • Гиперблок – непрерывная последовательность инструкций, имеющая одну точку входа; • CTP – операция подготовки передачи управления; • Станок – регистр, необходимый для выполнения операции CTP.
Проблематика • Наличие в программах избыточных условных вычислений, вырабатывающихпредикат, который используется для постановки операций под условие; • Наличие безусловно исполняемых и ненужных операций передачи управления; • Потери в производительности, которые могут быть вызваны ограниченным числом станков для подготовок и давлением на кэш инструкций.
Постановка задачи • Реализовать отдельную оптимизацию, устраняющую избыточные вычисления предикатов • Внедрить оптимизацию в оптимизирующий компилятор «Эльбрус» • Определить место в линейке оптимизаций • Провести верификацию на стандартных пакетах тестов • Поддержка оптимизации • Провести оценку эффективности на пакете SPEC
Подход к решению задачи • Поиск избыточных условных вычислений • Используя результаты анализа «Нумерация значений», выявить избыточные условные вычисления; • Применение оптимизации • Дублировать 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-узел. • Пример
Оценка эффективности Ускорение, полученное на пакете тестов spec2000, в среднем составило 0,5%
Результаты исследования • Оптимизация реализована и внедрена в линейку оптимизирующего компилятора «Эльбрус»: • Применение на 3-м уровне оптимизации • Применение перед объединением базовых блоков в гипер-узлы (оптимизация if_conversion) • Проведена верификация на пакетах дневного тестирования при вливе в основную ветку компилятора, а так же на генераторе тестов • Проведена оценка эффективности на пакете тестов spec2000