33
Новиков Сергей Анализ потока управления и потока данных в программе

Новиков Сергей

  • Upload
    verna

  • View
    55

  • Download
    2

Embed Size (px)

DESCRIPTION

Анализ потока управления и потока данных в программе. Новиков Сергей. Agenda. Содержание. Структура компилятора Пример программы на С Линейная последовательность операций Анализ потока управления Анализ потока данных Примеры оптимизаций Литература к лекции. Compiler structure. - PowerPoint PPT Presentation

Citation preview

Page 1: Новиков Сергей

Новиков Сергей

Анализ потока управления и потока данных в программе

Page 2: Новиков Сергей

Содержание

• Структура компилятора• Пример программы на С• Линейная последовательность операций• Анализ потока управления• Анализ потока данных• Примеры оптимизаций• Литература к лекции

Agenda

Page 3: Новиков Сергей

ядро компилятора

Структура компилятора

Компилятор - переводит исходный код программы (написанные на языке высокого уровня) в эквивалентный код на языке целевой платформы

Compiler structure

.c.cpp.f77...

.c.cpp

.F

...

High-Level IR

High-Level IR

High-Level IR Low-Level

IR

Low-LevelIR

Low-Level IRasm

.o.obj

.out.exe

1 2 4 5 6

1. 1.Препроцессор2. 2.Front-End3. 3.Оптимизации4. 4.Кодогенератор5. 5.Ассемблер6. 6.Линкер

Page 4: Новиков Сергей

1.int func( int a, int b)2.{3.int res = 0;4.int c = 10;5.int d = 20;6.int i, j, k = 0;7.for ( i = 0; i < 100; i++ )8.{9.for ( j = 0; j < 100; j++ )10.{11.if ( i + j < a + b )12.{13.res += a + b + i;14.} else15.{16.res += c + d + j;17.}18.res += b + i;19.}20.k++;21.}22.return res;23.}

Пример (исходый код программы на С)

Page 5: Новиков Сергей

1. MOVE.s32 <s32:0> -> res // line:3,02. MOVE.s32 <s32:10> -> c // line:4,03. MOVE.s32 <s32:20> -> d // line:5,04. MOVE.s32 <s32:0> -> k // line:6,05. MOVE.s32 <s32:0> -> i // line:8,06. GOTO <mo_l0:#nil> // line:8,07. LABEL //

…52. IF bool_tvar.15, <mo_l0:#nil>, <mo_l0:#nil> // line:8,053. LABEL //54. MOVE.s32 res -> D.1572 // line:23,055. MOVE.s32 D.1572 -> D.1552 //56. RETURN D.1552 //

Линейная последовательность операций

Page 6: Новиков Сергей

Граф потока управления

Page 7: Новиков Сергей

Граф потока управления

Page 8: Новиков Сергей

Граф потока управления с промежуточным представлением

Page 9: Новиков Сергей

• Обход (нумерация)o Обход в глубину (depth first) 1. для каждого преемника { 2. устанавливаем номер ++ 3. обходим рекурсивно преемника }o Обход в ширину (reverse post order) 1. для каждого преемника { 2. обходим рекурсивно преемника } 3. устанавливаем номер --

• Маркирование• Клонирование• Построение дерева доминаторов/постдоминаторов• Построение дерева циклов

Действия на графе потока управления

Page 10: Новиков Сергей

Обязательное предшествование (доминирование)

Page 11: Новиков Сергей

• Узел d доминирует/постдоминирует узел n если любой путь от стартового/стопового узла к n проходит через d

• Алгоритмы построения дерева доминаторов/постдоминаторовo Простейший алгоритм O(N*N)o Lengauer-Tarjan алгоритм O((N+E)log(N+E))

Свойство доминирования/постдоминирования

Page 12: Новиков Сергей

Дерево доминаторов

Page 13: Новиков Сергей

Дерево постдоминаторов

Page 14: Новиков Сергей

Глубинное остовное дерево (depth-first spanning tree)

Page 15: Новиков Сергей

Глубинное остовное дерево (пример)

Page 16: Новиков Сергей

Выделение сильно связных подграфов

Page 17: Новиков Сергей

Разметка циклов

Page 18: Новиков Сергей

Дерево циклов

Page 19: Новиков Сергей

• Несводимый цикл – цикл с более, чем одним входом• Цикл можно свести путем дублирования кода

Несводимые циклы

Page 20: Новиков Сергей

Компоненты с одним входом и одним выходом

Page 21: Новиков Сергей

Дерево структуры программы (program structure tree)

Page 22: Новиков Сергей

Классический анализ потока данных

Page 23: Новиков Сергей

Время жизни переменных

Page 24: Новиков Сергей

Итерационный алгоритм определения времени жизни переменных

Page 25: Новиков Сергей

Форма статического единственного присваивания

Фрагмент программыz = 3;if(P){y = 5;} else{y = z + 2;}x = y;

SSA - форма

z = 3

if(P)

y1=5 y2=z+2

y3=phi(y1,y2)

x=y3

Page 26: Новиков Сергей

Форма статического единственного присваивания в виде Def-Use графа

Page 27: Новиков Сергей

• Построение phi-функцийo Для каждой переменной определяем узлы cfg, в которых она

инициализируетсяo Запускаем алгоритм поиска итерационного фронта

доминирования (сложность O(|N|*|DF|)*B/size(word)) N – количество узлов в графе потока управления DF – итерационный фронт доминирования для одного узла (в среднем

1-2 на задачах) B – количество переменных size(word) – размер слова в битовом векторе

o По результатам работы алгоритма строим phi-функции• Линковка записей и чтений

Построение SSA/Def-Use графа

Page 28: Новиков Сергей

• CFG CFG+DOM Dominance Frontier

Фронт доминирования

START

STOP

d

STOP

START

J-дуги

дуги дерева доминаторов

b

START

STOP

Page 29: Новиков Сергей

• Хорошо зарекомендовавшая себя техника потокового анализа.

• Анализ присваивает одинаковые номера операциям, вырабатывающие одинаковые значения. Номера называются классами эквивалентности.

• Алгоритмическая сложность O(N * D * Argmax)o N количество операцийo D глубина дерева цикловo Argmax максимальное число аргументов у операции

Метод нумераций значений

Page 30: Новиков Сергей

• Классы эквивалентности: 1,2,3,4

Метод нумераций значений (пример)

A = i;B = j;

A = j + 100;B = i + 100;

foo += a[i] + (3*A + 2*B);bar += a[j] + (7*B – 2*A);i++; j++;

if ( i % 2)

return (foo – bar);

foo = bar = 0;j = i = 0;

1

2

3

4

“0”

Page 31: Новиков Сергей

1.int func( int a, int b)2.{3.int res = 0;4.int c = 10;5.int d = 20;6.int i, j, k = 0;7.for ( i = 0; i < 100; i++ )8.{9.for ( j = 0; j < 100; j++ )10.{11.if ( i + j < a + b )12.{13.res += a + b + i;14.} else15.{16.res += c + d + j;17.}18.res += b + i;19.}20.k++;21.}22.return res;23.}

Исходый код программы

Page 32: Новиков Сергей

• 16 (с + d) подстановка констант • 11,13 (a+b) сбор общих подвыражений• 13,18 (b+i) удаление частично избыточных вычислений• 20 (k++) удаление избыточных вычислений• 11 (a+b) вынос инвариантных вычислений из цикла

Примеры оптимизаций

Page 33: Новиков Сергей

Литература к лекции