Главная страница

Тема 13 2018Распределение_и_назначение. 13. Распределение и назначение регистров 13. 1


Скачать 0.73 Mb.
Название13. Распределение и назначение регистров 13. 1
Дата20.11.2018
Размер0.73 Mb.
Формат файлаpdf
Имя файлаТема 13 2018Распределение_и_назначение.pdf
ТипДокументы
#57018
страница3 из 4
1   2   3   4
LR
i

LR
j
не порождают конкуренции между
LR
i
и
LR
j
, так как эти значения могут занимать один и тот же регистр.

13.3
Глобальное распределение и назначение регистров
13.3.8
Построение графа конфликтов

Более точно алгоритм можно выразить следующим образом:
for each LR
i
do
create a node n
i

N;
for each basic block b do{
LiveNow = LiveOut(b)
for I
n
, I
n-1
, …, I
1
in b do{
||I
k
имеет вид op
k
LR
a
, LR
b
, LR
c
for each LR
i

LiveNow{
add (LR
a
, LR
i
) to E
remove LR
a
from LiveNow
add LR
b
to LiveNow
add LR
c
to LiveNow
}
}
}

13.3
Глобальное распределение и назначение регистров
13.3.9
Слияние интервалов жизни

Рассмотрим команду копирования
LR
i
=
LR
j
Если ИЖ
LR
i
и
LR
j
не находятся в конфликте (не являются смежными узлами ГК), то команду можно исключить и все ссылки на
LR
j
заменить ссылками на
LR
i
. В результате ИЖ
LR
i
и
LR
j
как бы
сольются

Слияние
ИЖ приносит следующие выгоды:

Исключается команда копирования(код становится меньше и тем самым потенциально быстрее)

Снижается степень каждого узла (ИЖ), который был в конфликте либо с
LR
i
, либо с
LR
j

Множество ИЖ сокращается (в литературе приводится пример, когда в результате слияния ИЖ удалось исключить свыше 30% всех ИЖ).

13.3
Глобальное распределение и назначение регистров
13.3.9
Слияние интервалов жизни

Пример. Рассмотрим фрагмент программы:
ADD
LR
a
, LR
t
, LR
u
.....................
LD
LR
b
, LR
a
LD
LR
c
,
LR
a
.....................
ADD
LR
x
,
LR
b
, LR
w
ADD
LR
z
,
LR
c
, LR
y
Отрезки справа от кода отмечают ИЖ
LR
a
LR
b
LR
c
(
красным показано определение переменной, зеленым –
ее последнее использование
).
Несмотря на то, что ИЖ
LR
a
пересекается и с
LR
b
, и с
LR
c
, он не находится в конфликте ни с тем, ни с другим, так как источник и приёмник соответствующих команд копирования не находятся в конфликте.
LR
b
и
LR
c
находятся в конфликте, так как
LR
b
жив при определении LR
c
ИЖ из обеих операций копирования являются кандидатами на слияние.
a
b
c

13.3
Глобальное распределение и назначение регистров
13.3.9
Слияние интервалов жизни

После слияния
LR
a
и LR
b
:
ADD
LR
ab
, LR
t
, LR
u
.....................
LD
LR
c
, LR
ab
.....................
ADD
LR
x
, LR
ab
, LR
w
ADD
LR
z
, LR
c
, LR
y

После слияния ИЖ
LR
a
и
LR
b
получаем новый ИЖ
LR
ab

Теперь ИЖ
LR
c
получается из
LR
ab
командой копирования, и следовательно
LR
c
и
LR
ab
не находятся в конфликте, так что слияние
LR
a
и
LR
b
в
LR
ab
понизило степень
LR
c
Слияние ИЖ может или уменьшить степени смежных узлов (ИЖ), или оставить их без изменения.

Команда копирования
LD LR
c
,LR
ab
позволяет продолжить процесс слияния ИЖ, заменив
LR
ab
на
LR
abc
ab
c

13.3
Глобальное распределение и назначение регистров
13.3.10 Эвристики раскраски графа конфликтов

После того как ГК построен, необходимо решить две задачи
:

Для построенного ГК необходимо найти
n
- раскраску
(
n

число регистров целевой машины)

Необходимо разработать алгоритм обработки ситуации, когда при необходимости раскраски очередного интервала жизни (узла ГК) выясняется, что все
n
цветов исчерпаны

Поскольку проблема
n
- раскраски графа
NP
-полна, применяются быстрые эвристические алгоритмы. При этом нет гарантии, что
n
- раскраска будет построена

При исчерпании регистров применяются либо
слив
, либо
расщепление
ИЖ (узлов ГК).
В обоих случаях исходный ГК преобразуется к новому ГК, который может допускать
n
- раскраску.

13.3
Глобальное распределение и назначение регистров
13.3.10
Алгоритм раскраски графа конфликтов

1
фаза. Установление порядка рассмотрения узлов
узлы по очереди удаляются из ГК и помещаются в стек.

Узел ГК называется неограниченным, если его степень
< n
, и ограниченным, если его степень

n.

Сначала в произвольном порядке удаляются неограниченные узлы вместе с дугами, соединяющими их со смежными узлами, при этом степень части смежных узлов понижается, так что некоторые из ограниченных узлов после удаления могут стать неограниченными.

Если после удаления всех неограниченных узлов в ГК все еще остаются узлы, то все они ограничены. Для каждого из ограниченных узлов вычисляется их степень
(
количество смежных узлов).

Ограниченные узлы удаляются из графа и помещаются в стек в порядке возрастания степени.
В конце фазы граф конфликтов пуст, а все его узлы (ИЖ) находятся в стеке в некотором порядке.

13.3
Глобальное распределение и назначение регистров
13.3.10
Алгоритм раскраски графа конфликтов

2 фаза. Раскраска узлов
распределитель восстанавливает ГК, выбирая из стека очередной узел
l
и раскрашивая его в цвет, отличный от цвета смежных узлов. Если оказывается, что все цвета использованы, узел
l
остается нераскрашенным
В конце фазы стек пуст, а ГК восстановлен и часть его узлов раскрашена

13.3
Глобальное распределение и назначение регистров
13.3.10
Алгоритм раскраски графа конфликтов

3
фаза. Проверка на окончание процесса раскраски
Если нераскрашенных узлов не осталось, алгоритм завершается.
Если часть узлов ГК осталась нераскрашенной, то для каждого такого узла либо генерируются команды сброса (
слив
), либо интервал жизни, соответствующий узлу
расщепляется
(на два или более подинтервалов), после чего ГК перестраивается с учетом слива и/или разделенных узлов. После перестройки ГК делается переход на первую фазу.

Ключевым моментом является порядок в котором узлы ГК помещаются в стек.
Наиболее распространенный эвристический критерий слива узла –
минимум отношения
узла
степень
сброса
цена
_
_


Найти ИЖ всех переменных, построить ГК
, вычислить стоимость сброса для каждого ИЖ, выполнить раскраску ГК. После этого либо каждый ИЖ получит цвет
(
положительный исход
), либо часть ИЖ останутся неокрашенными
(
отрицательный исход
).

В случае положительного исхода каждому ИЖ присваивается физический регистр

В случае отрицательного исхода ГК перестраивается и снова выполняется раскраска ГК.
Определение
ИЖ
Построение
ГК
Вычисление стоимости сброса
Раскраска
ГК
Перестройка
ГК
Назначение регистров
Раскраска получена
13.3
Глобальное распределение и назначение регистров
13.3.11
Структура распределителя регистров

13.3.12 Перестройка графа конфликтов
13.3
Глобальное распределение и назначение регистров

Перестройка ГК достигается помимо слияния ИЖ (п. 13.3.9) с помощью
сливания
переменных (п. 13.3.13) и
расщепления
ИЖ (п.13.3.14).


13.3.13
Сливание переменных
13.3
Глобальное распределение и назначение регистров

Сливание
временной переменной
t
состоит в следующем:

в «автоматической» памяти процедуры выделить ячейку
ta
для хранения значений
t
(эту ячейку называют
«дом»
t
);

перед каждой командой, использующей
t
, вставить команду
LD t, ta
;

после каждой команды, определяющей
t
, вставить команду
ST ta, t
;

просматривают текст полученной процедуры с целью выявить и удалить лишние команды
LD
и
ST
(иногда это удается).

13.3.13 Сливание переменных
13.3
Глобальное распределение и назначение регистров
ADD a, b, c
UMN d, a
ADD e, d, f
MUL f, 2, e
ADD b, d, e
ADD e, e, 1
B
1
B
2
B
3
B
4
ADD b, f, c
ADD a, b, c
UMN d, a
LD f, fa
ADD e, d, f
MUL f, 2, e
ST fa, f
ADD b, d, e
ADD e, e, 1
B
1
B
2
B
3
B
4
LD f, fa
ADD b, f, c
d
a
b
c
e
f
ГК
Хроматическое число 3
d
a
b
c
e
f
Хроматическое число 4

13.3.14 Расщепление интервалов жизни
13.3
Глобальное распределение и назначение регистров
a
и
b
в конфликте
ADD a, m, 1
ADD b, k, 4
ADD r, b, m
ADD a, m, 1
ADD a, m, 1
ST mem, a
ADD b, k, 4
ADD r, b, m
LD a, mem
ADD a, m, 1
Конфликт между
a
и
b
устранен

На левом рисунке
LR
a
и
LR
b
полностью пересекаются.
Расщепив
LR
a
на два
LR
, удается устранить конфликт.

При этом команды
ST
и
LD
применяются только здесь, а не перед всеми
a

13.3.15 Примеры глобального распределения регистров
1)
Распределение виртуальных (символических) регистров
a

2
b

3
d

c
e

a
g

+ c, 1
a < d
b

+ b, 1
d

* 2, d
b < 10
d

+ d, 1
f

+ a, b
g

+ e, g
print(b,d,e,g)
B
1
B
2
B
3
B
4
s1

2
s2

3
s3

c
s4

s1
s5

+ s3,1
s1 < s3
s2

+ s2,1
s3

* 2,s3
s2 < 10
s3

+ s3,1
s6

+ s1,s2
s5

+ s4,s5
print(s2,s3,s4,s5)
B
1
B
2
B
3
B
4
13.3
Глобальное распределение и назначение регистров

13.3
Глобальное распределение и назначение регистров
Применим слияние интервалов к команде копирования
s4 = s1 (
в блоке
B1
). Получим
s1 = 2
s2 = 3
s3 = c
s5 = s3 + 1
s1 < s3
s2 = s2 + 1
s3 = 2 * s3
s2 < 10
s3 = s3 + 1
s6 = s1 + s2
s5 = s1 + s5
print(s2,s3,s1,s5)
B
1
B
2
B
3
B
4
Оценим стоимости сброса для оставшихся символических регистров s1
,
s2
,
s3
,
s5
и s6
Символич.
регистр
Стоимость сброса s1 2.0 s2 1.0 + 21.0 + 2.0 + 2.0 = 26.0 s3 6.0 + 20.0 + 4.0 + 2.0 = 32.0 s5 2.0 + 4.0 + 2.0 = 8.0 s6

Стоимость сброса вычисляется по формуле












LR
copy
copy
Depth
LR
use
use
Depth
LR
def
def
Depth
CopyWt
UseWt
DefWt
Spill_cost
)
(
)
(
)
(
10 10 10
где def
,
use
и copy

отдельные команды определения, использования и копирования в LR
, а DefWt
,
UseWt
и CopyWt

стоимости соответствующих команд
При вычислении стоимости сброса считается DefWt = UseWt
= 2.0
,
CopyWt
= 1.0
Стоимость s6 =

, так как регистр s6

не является живым
B
1
B
2
B
3
B
4

13.3
Глобальное распределение и назначение регистров
2)
Построение графа конфликтов
(
s1
, …, s6

виртуальные регистры, R1, …, R5

физические регистры
)
s1
s2
s3
s4
s5
s6
R1
R2
R3
R4
R5

Все физические регистры считаются всегда живыми

Пусть частота выполнения блоков B
1
,
B
3
и B
4
равна 1, а частота выполнения блока B
2
равна 7

Каждому символическому регистру соответствует один интервал жизни, поэтому,
например, LR
a
и s1

синонимы

На символических регистрах
s1
,
s2
,
s3
,
s4
хранятся значения, поэтому результаты всех вычислений в блоках B
2
и
B
3
будем помещать на R5
13.3.15
Примеры глобального распределения регистров

Матрица смежности графа конфликтов имеет вид
1 1
1 1
1 1
0 0
0 0
6 1
1 1
1 0
0 0
0 0
5 1
1 1
1 0
0 0
0 4
1 1
1 0
0 0
0 3
1 1
0 0
0 0
2 1
0 0
0 0
1 1
1 1
1 5
1 1
1 4
1 1
3 1
2 5
4 3
2 1
5 4
3 2
1
s
s
s
s
s
s
R
R
R
R
s
s
s
s
s
R
R
R
R
R
13.3
Глобальное распределение и назначение регистров
13.3.15
Примеры глобального распределения регистров

Граф конфликтов и его матрица смежности примут вид
s1
s2
s3
s5
s6
R1
R2
R3
R4
R5
1 1
1 1
0 0
0 0
0 6
1 1
1 1
0 0
0 0
5 1
1 1
0 0
0 0
3 1
1 0
0 0
0 2
1 0
0 0
0 1
1 1
1 1
5 1
1 1
4 1
1 3
1 2
5 3
2 1
5 4
3 2
1
s
s
s
s
s
R
R
R
R
s
s
s
s
R
R
R
R
R
13.3
Глобальное распределение и назначение регистров
13.3.15
Примеры глобального распределения регистров

Поскольку каждый из узлов R1
,
R2
,
R3
,
R4
имеет меньше пяти смежных узлов, заталкиваем их в стек (порядок произвольный) и удаляем из графа конфликтов.
Получается граф, изображенный на правом рисунке
s1
s2
s3
s5
s6
R5
s1
s2
s3
s5
s6
R1
R2
R3
R4
R5
R4
R3
R2
1   2   3   4


написать администратору сайта