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 ( dan Optimasi Global) Machine Independent Optimizer 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. 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
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. 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. 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 perulangan (loop body) pada tubuh Contoh instruksi : FOR I:=1 to 2 DO A[I]:=0; 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
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; variabel X dapat dikeluarkan dari iterasi, menjadi : X:=5; FOR I:=1 TO 10 DO BEGIN A:=A+I END; 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 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; 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; 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; a := 5; a := a + b; End. Variabel b digunakan tetapi tidak memiliki nilai awal. 4
Bagi Compiler Meningkatkan efisiensi eksekusi program Menghilangkan useless code/kode yang tidak terpakai LATIHAN 1. 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 X := X + 1; A := A + X; B := 7 ; End; LATIHAN 2. Apakah kita dapat melakukan optimasi Redundant Sub-expression elimination pada statement berikut, mengapa? a. A := B + C; A := X + Y ; F := B + C + G + H ; b. A := B + C; B := X + Y; F := B + C + G + H ; LATIHAN 3. 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? 4. 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; B := 5; While B < 3 Do B := B + 1; C := 10 + B ; End ; 6