21/1/2010
1
Bài 13
Tiưumã
Ti
ưu
M đầu
Yêu cu
Chương trình sau khi ti ưu phi tương
đương
Tc độ thc hin trung bình tăng
Hiu qu đạt được tương xng vi công sc
b ra
Có th ti ưu mã vào lúc nào
Mã ngun- do người lp trình (gii thut)
Mã trung gian
đích
Ti ưu cc b
1. K thut để ci tiến mã đích mt cách cc b.
2. Mt phương pháp để ci tiến chương trình đích bng cách xem xét mt
dãy lnh trong mã đích và thay thế chúng bng nhng đon mã ngn hơn
và hiu qu hơn
Xu hướn
g
chính
g
1. Loi b lnh dư tha
2. Thông tin dòng điu khin
3. Gin lược biu thc đại s
4. S dng các đặc trưng ngôn ng
Ti ưu cc b
Tính toán biu thc hng
x := 32 tr thành x := 64
x := x + 32
Mã không đến được
goto L2
x := x + 1 ÅKhông cn
Ti ưu dòng điu khin
goto L1 tr thành goto L2
L1: goto L2 ÅKhông cn nếu không còn lnh
sau L2
21/1/2010
2
Ti ưu cc b
Gin lược biu thc đại s
x := x + 0 ÅKhông cn
Mã chết
x := 32 Åx không được dùng trong
nhng lnh tiếp theo
y := x + y Æy := y + 32
Gim chi phí tính toán
x := x * 2 Æx := x + x
Æx := x << 2
Ti ưu trong tng khi cơ s
1. Loi b biu thc con chung
2. Tính giá tr hng
3. Copy Propagation
4. Loi mã chết…
Ví d: a[i+1] = b[i+1]
Loi biu thc con chung
t1 = i+1
t2 = b[t1]
t3 = i + 1
a[t3] = t2
t1 = i + 1
t2 = b[t1]
t3 = i + 1
Å
Không cn
a[t1] = t2
i = 4
t1 = i+1
t2 = b[t1]
[t1] t2
i = 4
t1 = 5
t2 = b[t1]
[t1] t2
i là hng
i = 4
t1 = 5
t2 = b[5]
a[5] = t2
a
[t1]
=
t2
a
[t1]
=
t2
a[5]
=
t2
i = 4
t2 = b[5]
a[5] = t2
Mã nhn được:
21/1/2010
3
Ti ưu trên DAG
Vn đề cn quan tâm
Loi b biu thc con chung
Tính c biuthchng
Tính
các
biu
thc
hng
Loi mã chết
Loi nhng dư tha cc b
ng dng mt phương pháp ti ưu dn
đến vic to ra nhng đon mã có th ng
dng phương pháp ti ưu khác.
Ti ưu vòng đơn gin
Phương pháp
Chuyn nhng đon mã bt biến ra ngoài vòng
lp.
Ví d:
while (i <= limit - 2)
Chuyn thành
t := limit - 2
while (i <= t)
Mã ba địa ch ca Quick Sort
i = m - 1
j = n
t1 =4 * n
v = a[t1]
i = i + 1
t2= 4 * i
1
2
3
4
5
6
t7= 4 * I
t8= 4 * j
t9= a[t8]
a[t7] = t9
t10 = 4 * j
a[t10] = x
16
17
18
19
20
21
t3= a[t2]
if t3< v goto (5)
j = j – 1
t4= 4 * j
t5= a[t4]
if t5> v goto (9)
if i >= j goto (23)
t6 = 4 * i
x = a[t6]
7
8
9
10
11
12
13
14
15
goto (5)
t11 = 4 * I
x = a[t11]
t12 = 4 * i
t13 = 4 * n
t14 = a[t13]
a[t12] = t14
t15 = 4 * n
a[t15] = x
22
23
24
25
26
27
28
29
30
Khi cơbn (basic block)
Chui các lnh kếtiếp nhau trong đó dòng điu khin
đi vào lnh đầu tiên ca khi và ra lnh cui cùng
ca khi mà không bdng hoc rnhánh.
d
d
t1 := a * a
t2 := a * b
t3 := 2 * t2
t4 := t1 + t2
t5 := b * b
t6 := t4 + t5
21/1/2010
4
Gii thut phân chia các khi cơ bn
Input: Dãy lnh ba địa ch.
Output: Danh sách các khi cơbn vimã lnh ba địa ch ca
tng khi
Phư
n
g
p
p
:
gp p
1. Xác định tp các lnh đầu (leader), ca tng khi cơ bn
i) Lnh đầu tiên ca chương trình là lnh đầu.
ii) Bt k lnh nào là đích nhy đến ca các lnh GOTO
hoc không có điu kin là lnh đầu
iii) Bt k lnh nào đi sau lnh GOTO có hoc không có điu
kin là lnh đầu
2. Vi mi lnh đầu, khi cơ bn bao gm nó và tt c các lnh
tiếp theo không phi là lnh đầu hay lnh kết thúc chương
trình
Ví d
(1) prod := 0
(2) i := 1
(3) t1 := 4 * i
(4) t2 := a[t1]
Lnh (1) là lnh đầu
theo quy tc i,
Lnh (3) là lnh đầu
theo quy tc ii
(5) t3 := 4 * i
(6) t4 := b[t3]
(7) t5 := t2 * t4
(8) t6 := prod + t5
(9) prod := t6
(10) t7 := i + 1
(11) i := t7
(12) if i<=20 goto (3)
Lnh sau lnh (12) là
lnh đầu theo quy tc
iii.
Các lnh (1)và (2) to
nên khi cơbn th
nht.
Lnh (3) đến (12) to
nên khi cơbn th
hai.
Xác
định
khi
i = m - 1
j = n
t1 =4 * n
v = a[t1]
i = i + 1
t2= 4 * i
t
3
= a[t
2
]
1
2
3
4
5
6
7
t7= 4 * I
t8= 4 * j
t9= a[t8]
a[t7] = t9
t10 = 4 * j
a[t10] = x
goto (5)
16
17
18
19
20
21
22
khi
cơ
bn
3
2
if t3< v goto (5)
j = j – 1
t4= 4 * j
t5= a[t4]
if t5> v goto (9)
if i >= j goto (23)
t6 = 4 * i
x = a[t6]
8
9
10
11
12
13
14
15
t11 = 4 * i
x = a[t11]
t12 = 4 * i
t13 = 4 * n
t14 = a[t13]
a[t12] = t14
t15 = 4 * n
a[t15] = x
23
24
25
26
27
28
29
30
DAG
i = m - 1
j = n
t1 =4 * n
v = a[t1]
i = i + 1
t2= 4 * i
t3= a[t2]
t6 = 4 * i
x = a[t6]
t7= 4 * i
t8= 4 * j
t11 = 4 * i
x = a[t11 ]
t12 = 4 * i
t
13
=
4
*
n
B1
B2
B5B6
if t3< v goto B2
j = j – 1
t4= 4 * j
t5= a[t4]
if t5> v goto B3
if i >= j goto B6
t9= a[t8]
a[t7] = t9
t10 = 4 * j
a[t10] = x
goto B2
t
13
4
n
t14 = a[t13]
a[t12] = t14
t15 = 4 * n
a[t15] = x
B3
B4
21/1/2010
5
Loi biu thc con chung
i = m - 1
j = n
t1 =4 * n
v = a[t1]
i = i + 1
t2= 4 * i
t3= a[t2]
t6 = 4 * i
x = a[t6]
t7= 4 * i
t8= 4 * j
t11 = 4 * i
x = a[t11 ]
t12 = 4 * i
t
13
=
4
*
n
B1
B2
B5B6
if t3< v goto B2
j = j – 1
t4= 4 * j
t5= a[t4]
if t5> v goto B3
if i >= j goto B6
t9= a[t8]
a[t7] = t9
t10 = 4 * j
a[t10] = x
goto B2
t
13
4
n
t14 = a[t13]
a[t12] = t14
t15 = 4 * n
a[t15] = x
B3
B4
Loi biu thc con chung
i = m - 1
j = n
t1 =4 * n
v = a[t1]
i = i + 1
t2= 4 * i
t3= a[t2]
t6 = 4 * i
x = a[t6]
t8= 4 * j
t9= a[t8]
t11 = 4 * i
x = a[t11 ]
t12 = 4 * i
t
13
=
4
*
n
B1
B2
B5B6
if t3< v goto B2
j = j – 1
t4= 4 * j
t5= a[t4]
if t5> v goto B3
if i >= j goto B6
a[t6] = t9
t10= 4 * j
a[t10] = x
goto B2
t
13
4
n
t14 = a[t13]
a[t12] = t14
t15 = 4 * n
a[t15] = x
B3
B4
Loi biu thc con chung
i = m - 1
j = n
t1 =4 * n
v = a[t1]
i = i + 1
t2= 4 * i
t3= a[t2]
t6 = 4 * i
x = a[t6]
t8= 4 * j
t9= a[t8]
t11 = 4 *i
x = a[t11 ]
t12 = 4 * i
t
13
=
4
*
n
B1
B2
B5B6
if t3< v goto B2
j = j – 1
t4= 4 * j
t5= a[t4]
if t5> v goto B3
if i >= j goto B6
a[t6] = t9
a[t8] = x
goto B2
t
13
4
n
t14 = a[t13]
a[t12] = t14
t15 = 4 * n
a[t15] = x
B3
B4
Loi biu thc con chung
i = m - 1
j = n
t1 =4 * n
v = a[t1]
i = i + 1
t2= 4 * i
t3= a[t2]
t6 = 4 * i
x = a[t6]
t8= 4 * j
t9= a[t8]
t11 = 4 * i
x = a[t11 ]
t12 = 4 * i
t
13
=
4
*
n
B1
B2
B5B6
if t3< v goto B2
j = j – 1
t4= 4 * j
t5= a[t4]
if t5> v goto B3
if i >= j goto B6
a[t6] = t9
a[t8] = x
goto B2
t
13
4
n
t14 = a[t13]
a[t12] = t14
t15 = 4 * n
a[t15] = x
B3
B4