Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемwww.mcst.ru
1 Оптимизация управляющего графа программ, имеющих избыточные условные вычисления Выполнил: Степнов Денис, 816 гр. Научный руководитель: Бучнев А.Ю. Выпускная квалификационная работа
2 Общие понятия Нумерация значений – разбиение множества операций промежуточного представления на классы конгруэнтности (эквивалентности); Класс конгруэнтности – подмножество операций, безусловно имеющих одинаковый результат; Гиперблок – непрерывная последовательность инструкций, имеющая одну точку входа; CTP – операция подготовки передачи управления; Станок – регистр, необходимый для выполнения операции CTP.
3 Проблематика Наличие в программах избыточных условных вычислений, вырабатывающих предикат, который используется для постановки операций под условие; Наличие безусловно исполняемых и ненужных операций передачи управления; Потери в производительности, которые могут быть вызваны ограниченным числом станков для подготовок и давлением на кэш инструкций.
4 Постановка задачи Реализовать отдельную оптимизацию, устраняющую избыточные вычисления предикатов Внедрить оптимизацию в оптимизирующий компилятор «Эльбрус» Определить место в линейке оптимизаций Провести верификацию на стандартных пакетах тестов Поддержка оптимизации Провести оценку эффективности на пакете SPEC
5 Подход к решению задачи 1.Поиск избыточных условных вычислений Используя результаты анализа «Нумерация значений», выявить избыточные условные вычисления; 2.Применение оптимизации Дублировать If-узел с избыточным условием по всем входящим в него дугам, по которым оно однозначно определяется, и перенаправить на копии исходящие дуги; Удалить невыполнимые исходящие дуги из полученных копий If-узла и быть может оригинала (если у него осталась одна входящая дуга по которой условие однозначно определяется), преобразовать If- узлы в Simple-узлы.
6 Простейший пример Если в узлах 2, 3, 4 нет операций, изменяющих переменные a или b, то вычисление предиката в узле 4 является избыточным нужно создать копию узла 4 (узел 7) и упростить узлы 4 и 7
7 НетДа НетДа 1. Поиск избыточных условных вычислений Осуществить обход по всем возможным парам If-узлов рассматриваемой процедуры Осуществить обход по всем исходящим дугам доминатора и входящим дугам доминируемого узла Один из узлов доминирует над другим Преемник исходящей дуги доминирует над предшественником входящей дуги & класс конгруэнтности операций, вырабатывающих предикат, совпадает Занести доминируемый узел, входящую дугу, значение предиката в специальный список Алгоритм
8 В данном примере существует единственная подходящая для рассмотрения пара If-узлов: If-узел 1 доминирует If-узел 4. Осуществив обход по дугам, можно выявить две входящие в узел 4 дуги, в предшественниках которых значение предиката точно известно. Однако оптимизацию возможно применить только по одной из входящих в узел 4 дуг, так как переменная «a» переопределяется в узле Поиск избыточных условных вычислений Пример
9 Осуществить обход списка, полученного анализирующим алгоритмом НетДа В узел входит более одной дуги Удалить лишнюю исходящую дугу и вычисление предиката Дублировать узел со всеми исходящими дугами Удалить у копии лишнюю исходящую дугу и вычисление предиката Перенаправить на копию дугу, содержащуюся в списке 2. Применение оптимизации Алгоритм
10 Создаём узел 7 копию узла 4. При копировании узла CFG- графа средствами компилятора «Эльбрус» (функция graph_GetNodeCopy), автоматически копируются исходящие из него дуги. Входящие дуги не копируются. 2. Применение оптимизации Пример
11 Перенаправляем входящую дугу, по которой значение предиката точно известно, на скопированный узел. 2. Применение оптимизации Пример
12 Удаляем дугу, исходящую из узла 7, соответствующую отрицательному значению предиката. Удаляем вычисление предиката и преобразовываем узел 7 из If- узла в Simple-узел. 2. Применение оптимизации Пример
13 Оценка эффективности Ускорение, полученное на пакете тестов spec2000, в среднем составило 0,5%
14 Результаты исследования Оптимизация реализована и внедрена в линейку оптимизирующего компилятора «Эльбрус»: Применение на 3-м уровне оптимизации Применение перед объединением базовых блоков в гипер-узлы (оптимизация if_conversion) Проведена верификация на пакетах дневного тестирования при вливе в основную ветку компилятора, а так же на генераторе тестов Проведена оценка эффективности на пакете тестов spec2000
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.