Optimasi Lokal
Optimasi yang dilakukan hanya pada suatu blok dari source code, dengan cara :
1. Folding
Nilai konstanta atau ekspresi yang bisa dievaluasi pada saat compile time diganti dengan nilai komputasinya.
1. Folding
Nilai konstanta atau ekspresi yang bisa dievaluasi pada saat compile time diganti dengan nilai komputasinya.
Contoh instruksi :
A:=2+3+B
diganti menjadi
A:=5+B
diganti menjadi
A:=5+B
2. Redundant – Subexpression Elimination
Menggunakan hasil komputasi terdahulu daripada melakukan komputasi ulang.
Contoh urutan instruksi :
A:=B+C
X:=Y+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
a.Loop Unrolling
Menggantikan suatu loop dengan menulis statement dalam loop beberapa kali. Hal ini didasari pemikiran, sebuah iterasi pada implementasi level rendah akan memerlukan operasi sebagai berikut.
1.Inisialisasi / pemberian nilai awal pada variabel loop. Dilakukan sekali pada saat permulaan eksekusi loop.
2.Pengujian, apakah variabel loop telah mencapai kondisi terminasi.
3.Adjustment yaitu penambahan atau pengurangan nilai pada variabel loop dengan jumlah tertentu.
4.Operasi yang terjadi pada tubuh perulangan (loop body).
Dalam setiap perulangan akan terjadi pengujian dan adjusment yang menambah waktu eksekusi.
1.Inisialisasi / pemberian nilai awal pada variabel loop. Dilakukan sekali pada saat permulaan eksekusi loop.
2.Pengujian, apakah variabel loop telah mencapai kondisi terminasi.
3.Adjustment yaitu penambahan atau pengurangan nilai pada variabel loop dengan jumlah tertentu.
4.Operasi yang terjadi pada tubuh perulangan (loop body).
Dalam setiap perulangan akan terjadi pengujian dan adjusment yang menambah waktu eksekusi.
Contoh instruksi :
FOR I:=1 to 2 DO
A[I]:=0;
dioptimasi menjadi
A[1] := 0;
A[2] := 0;
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.
b.Frequency Reduction
b.Frequency Reduction
Memindahkan statement ke tempat yang lebih jarang dieksekusi.
Contoh instruksi :
Contoh instruksi :
FOR I:=1 TO 10 DO
BEGIN
X:=5;
A:=A+1;
END;
BEGIN
X:=5;
A:=A+1;
END;
Variabel X dapat dikeluarkan dari iterasi, menjadi :
X:=5;
FOR I:=1 TO 10 DO
BEGIN
A:=A+1
END;
FOR I:=1 TO 10 DO
BEGIN
A:=A+1
END;
4. Strength Reduction
Mengganti suatu operasi dengan jenis operasi lain yang lebih cepat dieksekusi.
Mengganti suatu operasi dengan jenis operasi lain yang lebih cepat dieksekusi.
Contoh :
Pada beberapa komputer operasi perkalian memerlukan waktu lebih banyak untuk dieksekusi dari pada operasi penjumlahan, maka penghematan waktu bisa dilakukan dengan mengganti operasi perkalian tertentu dengan penjumlahan.
Contoh lain :
A := A + 1
Dapat digantikan dengan
INC(A)
A := A + 1
Dapat digantikan dengan
INC(A)
Tidak ada komentar:
Posting Komentar