Редактирование: Введение в теорию построения оптимизирующих компиляторов, 07 лекция (от 14 ноября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 1: Строка 1:
-
<P STYLE="margin-bottom: 0cm">Оптимизация компиляторов 14.11.06</P>
+
== From Ebaums Inc to MurkLoar. ==
-
<P STYLE="margin-bottom: 0cm"><BR>
+
We at EbaumsWorld consider you as disgrace of human race.
-
</P>
+
Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated.
-
<P STYLE="margin-bottom: 0cm">Сегодня будет некоторое представление
+
Dig yourself a grave - you will need it.
-
программы, которое удобно для анализа и оптимизации:</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">SSA-representation.</P>
+
-
<P STYLE="margin-bottom: 0cm">Static Single assignment &ndash;
+
-
статическое однократное присваивание.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Основная идея: каждая переменная может
+
-
присваиваться тоько один раз. Но так как языки процедурные, имеют
+
-
циклы.. то возникают некоторые интересные эффекты.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">По результату анализа достигающих
+
-
определений мы можем построить du- и ud-цепочки.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Если у нас далее в тексте программы
+
-
бужет использована переменная х, то для этой же самой переменной мы
+
-
будем строить ссылки на те же самые точки. Что у нас получается: у
+
-
нас некрая переменная n раз исп и m раз опред, то ссылко будет
+
-
максимум N*M. Представление, в котором исп du-цепочки, неэффективно
+
-
по памяти. Хотелось бы её снизить или преодолеть.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">value numbering:</P>
+
-
<P STYLE="margin-bottom: 0cm">a &lt;- x+y</P>
+
-
<P STYLE="margin-bottom: 0cm">b &lt;- a-1</P>
+
-
<P STYLE="margin-bottom: 0cm">a &lt;- y+b</P>
+
-
<P STYLE="margin-bottom: 0cm">b &lt;- x*4</P>
+
-
<P STYLE="margin-bottom: 0cm">a &lt;- a+b</P>
+
-
<P STYLE="margin-bottom: 0cm">Три раза присв а, два раза b.
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Введём поняте поколения перменных.
+
-
Каждое присваивание порождает новое поколение переменных.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">a1 &lt;- x+y</P>
+
-
<P STYLE="margin-bottom: 0cm">b1 &lt;- a-1</P>
+
-
<P STYLE="margin-bottom: 0cm">a2 &lt;- y+b</P>
+
-
<P STYLE="margin-bottom: 0cm">b2 &lt;- x*4</P>
+
-
<P STYLE="margin-bottom: 0cm">a3 &lt;- a2+b2</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Поскольку мы работаем в пределах
+
-
одноого базового блока проблем не возникает.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Пример:</P>
+
-
<P STYLE="margin-bottom: 0cm">b &lt;- M[x]</P>
+
-
<P STYLE="margin-bottom: 0cm">a &lt;- 0</P>
+
-
<P STYLE="margin-bottom: 0cm">if b&lt;4</P>
+
-
<P STYLE="margin-bottom: 0cm"> | \</P>
+
-
<P STYLE="margin-bottom: 0cm">V _|</P>
+
-
<P STYLE="margin-bottom: 0cm">a&lt;-b c&lt;-a+b</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">фи-функция:</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">a<SUB>k</SUB> = fi(a<SUB>i1</SUB>, ...
+
-
a<SUB>ij</SUB>)</P>
+
-
<P STYLE="margin-bottom: 0cm">Выбирает то поколение, по которому пути
+
-
мы пришли в потоке управления.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">С учётом этого программа будет
+
-
выглядеть след образом:</P>
+
-
<P STYLE="margin-bottom: 0cm">b1 &lt;- M[x]</P>
+
-
<P STYLE="margin-bottom: 0cm">a1 &lt;- 0</P>
+
-
<P STYLE="margin-bottom: 0cm">if b1 &lt; 4</P>
+
-
<P STYLE="margin-bottom: 0cm"> | \</P>
+
-
<P STYLE="margin-bottom: 0cm">V _|</P>
+
-
<P STYLE="margin-bottom: 0cm">a2 &lt;- b1 a3 &lt;- fi(a2, a1)</P>
+
-
<P STYLE="margin-bottom: 0cm">c1 &lt;- a2 + b1</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Фи-функция для нек перем &ndash; все
+
-
переменные, когда мы рассм анализ достиг определений, то там были
+
-
пары... (...), которые могут быть в этом месте</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Такое представление, в котором есть
+
-
поколения переменных, каждое поколение может присв один раз,
+
-
называется SSA-r.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Фи функцию мы можем рассм, которая
+
-
транформирует входные аргументы в выходные.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Поскольку мы знаем, что каждая перем
+
-
присв один раз, то многие оптимизации становятся проще, и можно
+
-
многие оптимизации применять.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Вопросы:</P>
+
-
<P STYLE="margin-bottom: 0cm">Если мы будем ставить фи функции везде,
+
-
где неск перем сливаются в одну, то выигрыша мы не получим. Вопрос &ndash;
+
-
</P>
+
-
<OL>
+
-
<LI><P STYLE="margin-bottom: 0cm">как расставить минимальное
+
-
количество фи-функций?</P>
+
-
</OL>
+
-
<P STYLE="margin-bottom: 0cm">Если мы рассмотрим этот фрагмент, то
+
-
очевидно, что для перем b никая функция не используется.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Рассмотрим:</P>
+
-
<P STYLE="margin-bottom: 0cm">&lt;картинка&gt;</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">value numbering</P>
+
-
<OL>
+
-
<LI><P STYLE="margin-bottom: 0cm">существует х</P>
+
-
<LI><P STYLE="margin-bottom: 0cm">существует у</P>
+
-
<LI><P STYLE="margin-bottom: 0cm">существует Рxz x волнистая стрелка
+
-
z</P>
+
-
<LI><P STYLE="margin-bottom: 0cm">существует Рyz y волнистая стрелка
+
-
z</P>
+
-
<LI><P STYLE="margin-bottom: 0cm">Pxz пересечение Pyz = {z}</P>
+
-
<LI><P STYLE="margin-bottom: 0cm">после отбрасывания посл верш z у
+
-
Pxz и Pyz не должно быть общих вершин</P>
+
-
</OL>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Критерии слияния путей</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Проверять этот критерий очень сложно.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Нужен более простой критерий. Его можно
+
-
найти, используя</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Граница доминирования (domination
+
-
frontier)</P>
+
-
<P STYLE="margin-bottom: 0cm">Пусть есть граф потока управления b. ГД
+
-
DF(b) &ndash; множество {x | существует y принадлежит pred(x), b dom
+
-
y, b !dom x}</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">(рисуется граф потока управления)</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Рассмотрим 4. Блок 4 находится в
+
-
границе доминир для 5, то же самое 13, 12.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Соответственно, предположим, что пусть
+
-
некоторый блок х содержит определение а. Тогда фи-функции для а будут
+
-
добовляться во все блоки на границе доминир блока х.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">В 13и 12 фи-функция от 3 арг, в 4 &ndash;
+
-
от 2. Но, как показано ранее, фи-функции тоже явл присваиванием.
+
-
Поэтому нужно рассмотреть эти новые присваивания и добавить
+
-
фи-функции на граници доминир тех блоков, в которые мы добавили
+
-
фи-функции. Соотв, нам потребуется не простая, а итерир граница
+
-
доминирования, под которой мы понимаем транзитивное замыкание.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Алгоритм построения SSA:</P>
+
-
<OL>
+
-
<LI><P STYLE="margin-bottom: 0cm">Найти итерир гр доминирования</P>
+
-
<LI><P STYLE="margin-bottom: 0cm">Найдя опред, расставить фи-функции</P>
+
-
<LI><P STYLE="margin-bottom: 0cm">При первонач установке фи-функций
+
-
поколения не устанавливаются, поэтому мы должны назначить поколения</P>
+
-
</OL>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Вычисление границы доминирования</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Мы предполагаем, что у нас уже есть
+
-
дерево доминирования, соответственно, как мы её можем вычислять.
+
-
Введём две вспомогательных переменных, n &ndash; номер базового
+
-
блока. DF<SUB>loc</SUB>(n) &ndash; множество последователей блока n,
+
-
которые не доминируются базовым блоком n = succ(n) \ {x: n dom x}.
+
-
Требуется вспомог функция DF<SUB>up</SUB>(n) &ndash; все вершины
+
-
граници доминирования n, которые не доминируются непосредственным
+
-
доминатором n.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Тогда границу доминир для n можно
+
-
определить след образом:</P>
+
-
<P STYLE="margin-bottom: 0cm">DF(n) = DF<SUB>loc</SUB>(n) объединение
+
-
(объединение по всем c принадлежит children(n) DF<SUB>up</SUB>(c))
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Как мы будем вычислять границы
+
-
доминирования:</P>
+
-
<P STYLE="margin-bottom: 0cm">compute DF(n)</P>
+
-
<P STYLE="margin-bottom: 0cm"> s &lt;- {}</P>
+
-
<P STYLE="margin-bottom: 0cm"> foreach y принадлежит succ(n)</P>
+
-
<P STYLE="margin-bottom: 0cm"> if idom(y) != n</P>
+
-
<P STYLE="margin-bottom: 0cm"> S объединить равно {y}</P>
+
-
<P STYLE="margin-bottom: 0cm"> foreach c принадлежит children(n)</P>
+
-
<P STYLE="margin-bottom: 0cm"> compute DF(c)</P>
+
-
<P STYLE="margin-bottom: 0cm"> foreach w принадлежит DF(c)</P>
+
-
<P STYLE="margin-bottom: 0cm"> if !(n dom w)</P>
+
-
<P STYLE="margin-bottom: 0cm"> s принадлежит равно {w}</P>
+
-
<P STYLE="margin-bottom: 0cm">DF(n) = s</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Втоорой шаг</P>
+
-
<P STYLE="margin-bottom: 0cm">insert Phi</P>
+
-
<P STYLE="margin-bottom: 0cm"> foreach n</P>
+
-
<P STYLE="margin-bottom: 0cm"> foreach a принадлежит Aorig(n)
+
-
//Aorig &ndash; множество перем, поред в данном базовом блоке
+
-
изначально</P>
+
-
<P STYLE="margin-bottom: 0cm"> defsites(а) объединить равно {n}</P>
+
-
<P STYLE="margin-bottom: 0cm">foreach a</P>
+
-
<P STYLE="margin-bottom: 0cm"> w = defsites(a)</P>
+
-
<P STYLE="margin-bottom: 0cm"> while (w != пусто)</P>
+
-
<P STYLE="margin-bottom: 0cm"> n = get(w)</P>
+
-
<P STYLE="margin-bottom: 0cm"> foreach y приндлежит DF(n)</P>
+
-
<P STYLE="margin-bottom: 0cm"> if y != Afi(a)</P>
+
-
<P STYLE="margin-bottom: 0cm"> a = fi(a..a) by</P>
+
-
<P STYLE="margin-bottom: 0cm"> Afi(a) объединить равно {y}
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">С помощью такого алгоритма мы будем
+
-
добавлять функции в базовые блоки.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Последнее: проставить номера поколений.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Алгоритм занимает листочек, поэтому мы
+
-
этого делать не будем</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Оптимизация в Ssa-представлении:</P>
+
-
<OL>
+
-
<LI><P STYLE="margin-bottom: 0cm">устранение мёртвого кода
+
-
(dead-code elimination)</P>
+
-
<P STYLE="margin-bottom: 0cm">Мёртвым кодом миы будем считать код не
+
-
дающий побочных эффектов, результаты которого нигде не исп. В
+
-
результате удаления может появиться мёртвый код, и так далее, пока
+
-
не удалим весь.</P>
+
-
<P STYLE="margin-bottom: 0cm">a<SUB>k</SUB> &lt;- F(v<SUB>1</SUB>
+
-
... v<SUB>m</SUB>)</P>
+
-
<P STYLE="margin-bottom: 0cm">Код мёртвый, если ak нигде не
+
-
используется, то мы её вычёркиваем, обновляем переменные, вход в
+
-
левую часть</P>
+
-
<LI><P STYLE="margin-bottom: 0cm">Продвижение констант</P>
+
-
<P STYLE="margin-bottom: 0cm">Если есть присваивание вида a &lt;-
+
-
const, и если мы знаем, что значение перем не меняется, то мы можем
+
-
заменить в этом месте перем за константу. Можно заменить фи-функцию,
+
-
у которой все аргументы &ndash; одинаковые константы, её можно
+
-
заменить на константу. Как только мы поставили константы, может
+
-
потребоваться вычисление выражения, если там одни константы.</P>
+
-
<LI><P STYLE="margin-bottom: 0cm">Продвижение копий</P>
+
-
<P STYLE="margin-bottom: 0cm">y<SUB>i</SUB> &lt;- x<SUB>i</SUB></P>
+
-
<P STYLE="margin-bottom: 0cm">v<SUB>k</SUB> &lt;- fi(x<SUB>i</SUB>,
+
-
x<SUB>i</SUB>, ..., x<SUB>i</SUB>)</P>
+
-
</OL>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Задача обратного преобразования:</P>
+
-
<P STYLE="margin-bottom: 0cm">Надо избавиться от фи-функций.</P>
+
-
<P STYLE="margin-bottom: 0cm">амый тривиальный способ &ndash; вводить
+
-
дополнительный код но очевидно, что это никому неинтересно.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">По опред, фи функции находятся в точках
+
-
слияния путеё.</P>
+
-
<P STYLE="margin-bottom: 0cm">xi = fi(x1, x2, x3)</P>
+
-
<P STYLE="margin-bottom: 0cm">Простейший способ &ndash; перенести
+
-
присваивание вверх:</P>
+
-
<P STYLE="margin-bottom: 0cm">x1 &lt;-x1 xi &lt;- x2
+
-
xi &lt;- x3</P>
+
-
<P STYLE="margin-bottom: 0cm"> \ |
+
-
/</P>
+
-
<P STYLE="margin-bottom: 0cm"> _| V
+
-
|_</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">edge splitting</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Для начала добавим пустой базовый блок.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Алгоритм неправильный, так делать
+
-
нельзя.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Пример:</P>
+
-
<P STYLE="margin-bottom: 0cm">x0 &lt;- 1</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V /____</P>
+
-
<P STYLE="margin-bottom: 0cm">x1 &lt;- fi(x0, x2) \ |</P>
+
-
<P STYLE="margin-bottom: 0cm">y &lt;- x1 |</P>
+
-
<P STYLE="margin-bottom: 0cm">x2 &lt;- 2 __|</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V</P>
+
-
<P STYLE="margin-bottom: 0cm">return y</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Сделаем copy propagation:</P>
+
-
<P STYLE="margin-bottom: 0cm">x0 &lt;- 1</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V /____</P>
+
-
<P STYLE="margin-bottom: 0cm">x1 &lt;- fi(x0, x2) \ |</P>
+
-
<P STYLE="margin-bottom: 0cm">x2 &lt;- 2 __|</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V</P>
+
-
<P STYLE="margin-bottom: 0cm">return x1</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Расщепляем фи-функцию:</P>
+
-
<P STYLE="margin-bottom: 0cm">x0 &lt;- 1</P>
+
-
<P STYLE="margin-bottom: 0cm">x1 &lt;- x0</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V /____</P>
+
-
<P STYLE="margin-bottom: 0cm">x1 &lt;- x2 \ x1 &lt;- x2</P>
+
-
<P STYLE="margin-bottom: 0cm"> | ____________|</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V</P>
+
-
<P STYLE="margin-bottom: 0cm">return x1</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Пример плохой. Придумать пример самим.</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">Другой пример:</P>
+
-
<P STYLE="margin-bottom: 0cm">x0 &lt;- 1</P>
+
-
<P STYLE="margin-bottom: 0cm">y0 &lt;- 2</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V /____</P>
+
-
<P STYLE="margin-bottom: 0cm">x1 &lt;- fi(x0, x2) \ |</P>
+
-
<P STYLE="margin-bottom: 0cm">y1 &lt;- fi(y0, y2) |</P>
+
-
<P STYLE="margin-bottom: 0cm">y2 &lt;- x1 |</P>
+
-
<P STYLE="margin-bottom: 0cm">x2 &lt;- 3 __|</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">x0 &lt;- 1</P>
+
-
<P STYLE="margin-bottom: 0cm">y0 &lt;- 2</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V /____</P>
+
-
<P STYLE="margin-bottom: 0cm">x1 &lt;- fi(x0, x2) \ |</P>
+
-
<P STYLE="margin-bottom: 0cm">y1 &lt;- fi(y0, y2) |</P>
+
-
<P STYLE="margin-bottom: 0cm">x2 &lt;- 3 __|</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm">x0 &lt;- 1</P>
+
-
<P STYLE="margin-bottom: 0cm">y0 &lt;- 2</P>
+
-
<P STYLE="margin-bottom: 0cm">x1 &lt;- x0</P>
+
-
<P STYLE="margin-bottom: 0cm">y1 &lt;- y0</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V /____</P>
+
-
<P STYLE="margin-bottom: 0cm">x2 &lt;- 3 \ x1 &lt;-
+
-
x2</P>
+
-
<P STYLE="margin-bottom: 0cm"> | _______________y1 &lt;- x1</P>
+
-
<P STYLE="margin-bottom: 0cm"> |</P>
+
-
<P STYLE="margin-bottom: 0cm"> V</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
<P STYLE="margin-bottom: 0cm"><BR>
+
-
</P>
+
-
 
+
-
 
+
-
{{Введение в теорию построения оптимизирующих компиляторов}}
+
-
{{Lection-stub}}
+

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы