Teknik Kompiler 1 -...

21
Teknik Kompiler 11 oleh: antonius rachmat c, s.kom

Transcript of Teknik Kompiler 1 -...

Page 1: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Teknik Kompiler 11

oleh: antonius rachmat c, s.kom

Page 2: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Code Optimization

Adalah bagian yang melakukan tranformasi code namun tetap menjaga kebenaran source code dan bahkan meningkatkan performa dari hasil input. Optimisasi kode digunakan untuk menghasilkan kode program yang lebih kecil dan lebih cepat eksekusinya.Kriteria Transformasi

Tetap menjaga makna source dan output programDapat mempercepat waktu eksekusiProses transformasi tidak terlalu lama

Page 3: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Isu-isu pada Code Optimization

Teknik optimisasi bisa diterapkan pada:source codeintermediate codetarget machine code

Front End Code Optimizer Code Generator

Control Flow Analysis

Data Flow Analysis Transformation

Page 4: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Pembagian Teknik Optimasi

Berdasarkan tingkat ketergantungan pada mesin, teknikoptimasi dibagi menjadi:Machine Dependent Optimizer

Kode dioptimasi sehingga optimal dan efisien pada mesin tertentu saja. Optimasi ini memerlukan informasi mengenai feature yang ada pada mesin tujuan, mengambil keuntungan dari mesin tujuan agar kode lebih pendek dan eksekusinya cepat.Yang dioptimasi adalah object code

Machine Independent OptimizerOptimasi ini bisa diaplikasikan tanpa tergantung pada mesin tujuan.Yang dioptimasi adalah intermediate code

Page 5: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Example

Page 6: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Example (2)T6 = 4 * I T6 = 4 * IX = A[T6] X = A[T6]T7 = 4 * I T8 = 4 * jT8 = 4 * j T9 = A[T8]T9 = A[T8] A[T6] = T9A[T7] = T9 A[T8] = XT10 = 4 * jA[T10] = X ….…

Page 7: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Teknik-teknik Optimasi LokalPeephole (Lubang Intip)

Untuk lokal intermediate code atau bahasa assembly.Melihat dalam satu sekuens dari statementMengkoreksi prosedur yang inefektif karena prosedur tersebutterlalu “berlebihan”.Digunakan untuk menghilangkan redundant instructionsUnreachable code

L1: IF X > 2 GOTO L2GOTO L3L2: GOTO L4GOTO L1 ; never executedL3: X := X + 1GOTO L1L4: ...

Page 8: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Teknik-teknik OptimasiFlow-of-control fixes: remove redundant

L1: IF X > 2 GOTO L4X := X + 1GOTO L1L4: ...

More Peephole OptimizationsAlgebraic Simplification

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

Page 9: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Teknik-teknik Optimasi

Strength ReductionTarget hardware may have cheaper ways todo certain operations. E.g., multiplication or division by a power of 2 is better done by shifting.

MUL R1, 8 => SHL R1, 3, R2 X ^ 2 => X * X2 * X => X + X

Page 10: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Code Motion

T := b * d;Case p of

1: c:=a+T;2: m:=T-r;3: f:=a-T;4: c:=q/(T-r);

End;

Case p of1: c := a + b * d;2: m := b * d – r;3: f := a – b * d;4: c := q / (b * d + r);

End;

Page 11: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Optimasi LokalConstant Folding

Mengganti konstanta atau ekspresi yang bisadievaluasi pada saat compile time dengan nilaikomputasinya.Contoh:

X := 4 + 2 – B;Diganti menjadi:

X := 6 – B;

Page 12: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Optimasi LokalRedundant Common Sub Expression Elimination

Membuang/mengganti ekspresi yang sudah pernahdikomputasi dan ternyata digunakan lagi pada urutaninstruksi berikutnya.Contoh:

A:=B+C+Z;D:=Y+B+C;

Kompuatasi B+C harusnya bisa diperoleh dari barispertama saja tanpa harus dikomputasi ulang. Catatan: asal belum ada perubahan nilai variabel B dan C.Contoh:

i := j + 1a[i] := a[i] + j + 1

Page 13: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Optimasi Lokal

Copy propagationa := b + 1 => a := b + 1c := a c := a ; maybe can now omitd := c d := a

a := d + e; b:= d + e; => a := d + e; b:= a;

Algebraic IdentitiesE.g., use associativity and commutativity of +a := b + c => a := b + cb := c + d + b b := b + c + d ; now do CSE

Page 14: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Optimasi Lokal

Optimasi pada PerulanganLoop UnrollingMengganti suatu loop dengan menulis statement dalam loop beberapa kali. Hal ini didasari olehpemikiran bahwa pada level rendah loop akanmelakukan operasi:

Inisialisasi nilai awal variabel loop. Dilakukan sekali sajapada awal loopPengetesan kondisi loopPenambahan/pengurangan nilai (increment/decrement) variabel loop dengan jumlah tertentu.Operasi yang terjadi pada loop body.

Page 15: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Optimasi Lokal (loop)For i:=1 to 2 do

A[i] := 0;Diperlukan :

Satu instruksi pengesetan variabel awal (i:=1)Diperlukan pengecekan kondisiDiperlukan increment variabel loopDiperlukan 2x operasi assigment A[i] :=0Jadi total ada 5 instruksi

Dioptimasi jadi:A[1] := 0;A[2] := 0;

Hanya membutuhkan 2 instruksi.

Page 16: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Optimasi LokalFrequency Reduction

Pemindahan statement ke tempat yang lebih jarang dieksekusiFor i:=1 to 10 doBegin

X := 5;A := A + 2;

End;Terlihat bahwa X tidak mengalami perubahan nilai, tetap 5 terusselama 10 kali loop. Maka dioptimasi menjadi:

X := 5;For i:=1 to 10 doBegin

A := A + 2;End;

Page 17: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Optimasi LokalStrength Reduction

Penggantian jenis operasi tertentu dengan jenisoperasi lain yang lebih cepat ekesekusinya. Misal operasi perkalian lebih lambat maka bisadiganti dengan operasi penjumlahan

Contoh lain:A=A+1 bisa diganti dengan INC(A)

Page 18: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Optimasi GlobalDilakukan pada seluruh programDead Code

Kode yang tidak pernah dieksekusiX:=5;If X = 0 then B:=B+1;

Unused ParameterParameter yang tidak pernah dipakaiProcedure Kali(a,b,c:integer);Begin

Result := a*b;End;

Page 19: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

Optimasi GlobalUnused Variabel

Variabel yang tidak terpakaiProcedure Coba;Var a,b,c;Begin

Result:=a*b;End;

Variabel tanpa nilai awalVar a,b:integer;Begin

A:=1;A:=A*B;

End;

Page 20: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

LatihanA=B+10*4C=B+DF=B+D-GFOR I=1 TO 100 DOBEGIN

X = X+1A=A+XB=7

END

Page 21: Teknik Kompiler 1 - Gunadarmawahyukr.staff.gunadarma.ac.id/Downloads/files/38540/11.+Code+Optimization.pdfPembagian Teknik Optimasi zBerdasarkan tingkat ketergantungan pada mesin,

NEXT

Code Generation