Lompat ke konten Lompat ke sidebar Lompat ke footer

Code Optimization

Kriteria transformasi:

  1. Tetap menjaga makna program
  2. Dapat mempercepat waktu eksekusi
  3. Proses transformasi tidak terlalu lama

Optimasi dapat dilakukan pada level

Untitled Diagram


Struktur code optimizer

Untitled Diagram

Di dalam optimizer, program dipresentasikan dalam flow graph.

Contoh

(1) i:=m-1 (16) t7 := 4 * i
(2) j:=n (17) t8 := 4 * j
(3) t1 := 4 * n (18) t9 := a[t8]
(4) v := a[t1] (19) a[t7] := t9
(5) i := i + 1 (20) t10 := 4 * j
(6) t2 := 4 * i (21) a[t10] := x
(7) t3 := a[t2] (22) goto(5)
(8) if t3 < v goto (5) (23) t11 := 4 * i
(9) j := j - 1 (24) x := a[t11]
(10) t4 := 4 * j (25) t12 := 4 * i
(11) t5 := a[t4] (26) t13 := 4 * n
(12) if t5 < v goto (9) (27) t14 := a[t13]
(13) if i >= j goto (23) (28) a[t12] := t14
(14) t6 := 4 * i (29) t15 := 4 * n
(15) x := a[t6] (30) a[t15] := x


akan ditransformasikan dalam bentuk:

= flowchart = 


Prinsip optimasi:

  • Eliminasi ekspresi yang sama
  • Copy propagation
  • Dead code elimination
  • Loop optimazation
  • Code motion

Eliminasi lokal dan global menghasilkan

B5

Sebelum -> Sesudah

==  || == 


Code MotionL


Copy propagation

Contoh:


=====

A:= d + e ->            a:= d + e
B:= d + e ->            b:= a


Dead Code Elimination:

Contoh:

:
:                                                ->                    x := x - k
x := x + T1                                                       y := x - k
y := x + T1


Optimasi Basic Block

Dengan menggunakan presentasi DAG

Contoh:

a:= b + c
b:= a - d
c:= b + c
d:= a - d

direpresentasikan dalam bentuk:

====


Ada 3 (tiga) node -> perlu 3 (tiga) statement.

Jika harga tidak diperlukan, selain di blok tersebut, disederhanakan menjadi

a=b+c
b=a-d
c=d+c

Jika harga b dan d masih dipakai makan presentasi DAG adalah:

Mula-mula:

a:= b + c
b:= b - d
c:= c + d
e:= b + c


===0=0=0=


dan penyederhanaannya

a := b + c
b := b - d
c := c + d
d := b + c

Operasi berdasarkan operasi aljabar

Contoh:

x + 0 = 0 + x = x
x - 0 = x
x *1 = 1*x = x
x/1 = x

-> penyederhanaan ekspresi

Optimasi dengan menggantikan operator.

Contoh:

x ** 2 = x * x
2.0* x = x + x
x/2 = x * 0.5

Optimasi looping.

00000000