d9002c0b60ecdb4f574a58cde4496e28.ppt
- Количество слайдов: 14
Выпускная квалификационная работа Оптимизация управляющего графа программ, имеющих избыточные условные вычисления Выполнил: Степнов Денис, 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_Get. Node. Copy), автоматически копируются исходящие из него дуги. Входящие дуги не копируются.
2. Применение оптимизации • Пример Перенаправляем входящую дугу, по которой значение предиката точно известно, на скопированный узел.
2. Применение оптимизации • Пример Удаляем дугу, исходящую из узла 7, соответствующую отрицательному значению предиката. Удаляем вычисление предиката и преобразовываем узел 7 из Ifузла в Simple-узел.
Оценка эффективности 3. 00% 2. 72% 2. 50% 2. 00% 1. 92% 1. 50% 1. 17% 1. 00% 0. 37% 0. 50% 0. 22% 0. 14% 0. 00% 176. gcc 181. mcf 186. crafty 253. perlbmk 255. vortex 301. apsi Ускорение, полученное на пакете тестов spec 2000, в среднем составило 0, 5%
Результаты исследования • Оптимизация реализована и внедрена в линейку оптимизирующего компилятора «Эльбрус» : • Применение на 3 -м уровне оптимизации • Применение перед объединением базовых блоков в гипер-узлы (оптимизация if_conversion) • Проведена верификация на пакетах дневного тестирования при вливе в основную ветку компилятора, а так же на генераторе тестов • Проведена оценка эффективности на пакете тестов spec 2000
d9002c0b60ecdb4f574a58cde4496e28.ppt