Dependensi Optimasi
TEKNIK OPTIMASI
Menghasilkan kode program dengan ukuran yang lebih kecil, sehingga lebih cepat eksekusinya.
Berdasarkan ketergantungan pada mesin : Machine Dependent Optimizer Machine Independent Optimizer (Optimasi Lokal dan Optimasi Global)
Machine Independent Optimizer
Optimasi Lokal Dilakukan hanya pada suatu blok dari source code.
Optimasi Global Dilakukan dengan analisis flow, yaitu suatu graph berarah yang menunjukkan jalur yang mungkin selama eksekusi program.
Optimasi Lokal 1. Folding Nilai konstanta atau ekspresi pada saat compile time diganti dengan nilai komputasinya. Contoh instruksi : A:=2+3+B diganti menjadi
A:=5+B
1
Optimasi Lokal 2. Redundant – Subexpression Elimination Menggunakan hasil komputasi terdahulu daripada melakukan komputasi ulang. Contoh urutan instruksi : A:=B+C X:=Y+B+C B+C redundan, bisa memanfaatkan hasil komputasi sebelumnya, selama tidak ada perubahan nilai pada variabel.
Optimasi Lokal Penge-test-an,
apakah variabel loop telah mencapai kondisi terminasi. Adjustment yaitu : penambahan atau pengurangan nilai pada variabel loop dengan jumlah tertentu. Operasi yang terjadi pada tubuh perulangan (loop body) Contoh instruksi : FOR I:=1 to 2 DO A[I]:=0;
Optimasi Lokal 3. Optimasi
dalam sebuah iterasi Loop Unrolling : menggantikan suatu loop dengan menulis statement dalam loop beberapa kali. Karena sebuah iterasi pada implementasi ke level rendah, memerlukan : Inisialisasi nilai awal, pada loop dilakukan sekali pada saat permulaan eksekusi loop.
Optimasi Lokal dioptimasi menjadi A[1] := 0; A[2] := 0; Pada instruksi pertama yang menggunakan iterasi perlu dilakukan inisialisasi setiap eksekusi loop, pengetesan, adjustment, dan operasi pada tubuh perulangan. Yang kesemuanya itu menghasilkan banyak instruksi. Karena itu dengan optimasi hanya memerlukan dua instruksi assignment.
2
Optimasi Lokal
Frequency Reduction : memindahkan statement ke tempat yang lebih jarang dieksekusi. Contoh instruksi : FOR I:=1 TO 10 DO BEGIN X:=5; A:=A+I; END;
Optimasi Lokal 4. Strength Reduction Mengganti suatu operasi dengan jenis operasi lain yang lebih cepat dieksekusi. Contoh : pada beberapa komputer operasi perkalian memerlukan waktu lebih banyak dari pada operasi penjumlahan. Contoh lain : A := A + 1 dapat digantikan dengan Inc(A)
Optimasi Lokal variabel X dapat dikeluarkan dari iterasi, menjadi : X:=5; FOR I:=1 TO 10 DO BEGIN A:=A+I END;
Optimasi Global Optimasi global biasanya dilakukan dengan suatu graph terarah yang menunjukkan jalur yang mungkin selama eksekusi program. Ada dua kegunaan optimasi global yaitu bagi programmer dan untuk compiler itu sendiri:
3
Bagi Programmer (Pembuat Program dengan Bahasa Tingkat Tinggi)
Unreachable / Dead Code: Kode yang tidak pernah dieksekusi. Misalnya : X := 5; If X = 0 Then A := A +1 Instrusksi A := A+1 tidak pernah dikerjakan karena kondisi X tidak pernah menjadi 0, sehingga memperlambat proses.
Unused Parameter : Parameter yang tidak pernah digunakan dalam procedure Misalnya : Procedure Penjumlahan (a,b,c : Integer); Var x : Integer; Begin x := a + b; End. Parameter c tidak pernah digunakan sehingga tidak perlu diikut sertakan disebabkan pada prosedur penjumlahan c tidak pernah dikenakan suatu proses atau nilai.
Unsused Variabel : variabel yang tidak pernah dipergunakan. Misal : Program pendek; Var a, b : Integer; Begin a := 5; End. Variabel b tidak pernah digunakan dalam manipulasi, sehingga tidak perlu untuk dideklarasikan.
Variabel : variabel yang dipakai tanpa nilai awal. Contoh: Program Awal; Var a, b : Integer; Begin a := 5; a := a + b; End. Variabel b digunakan tetapi tidak memiliki nilai awal.
4
Bagi Compiler Meningkatkan efisiensi
LATIHAN eksekusi
1.
program Menghilangkan useless code/kode yang tidak terpakai
LATIHAN 2.
Apakah kita dapat melakukan optimasi Redundant Sub-expression elimination pada statement berikut, mengapa ? a.
b.
A := B + C; A := X + Y ; F := B + C + G + H ; A := B + C; B := X + Y; F := B + C + G + H ;
Lakukan optimasi lokal yang diperlukan pada potongan program berikut, dan jelaskan optimasi apa saja yang diterapkan. A := B + 10 * 4; C := B + D; F := B + D – G; For I:= 1 To 100 Do Begin X := X + 1; A := A + X; B := 7 ; End;
LATIHAN 3.
4.
Bisakah kita melakukan optimasi frequency reduction pada loop berikut : 10 For I := 1 To 10 Do 20 A := I + 1 ; 30 Mengapa kita tidak dapat melakukan optimasi pada instruksi baris ke-20 ? Apakah cukup efisien melakukan optimasi loop unrolling untuk statement berikut : For I := 1 To 100 Do A(I) := “”
5
LATIHAN 5.
Lakukan optimasi global sederhana pada program berikut : PROGRAM Tes; Var A, B, C : Integer; Begin B := 5; While B < 3 Do B := B + 1; C := 10 + B ; End ;
6