Back to IF2224 Teori Bahasa Formal dan Otomata
Topic: Teknik Optimasi Kode
Questions/Cues
Tujuan Optimasi
Folding
Redundant Elimination
Loop Unrolling
Frequency Reduction
Strength Reduction
Optimasi Global
Reference Points
Slide 16_2025: Hal 29 - 37
1. Klasifikasi Optimasi
Optimasi bertujuan menghasilkan kode program yang lebih kecil ukurannya dan lebih cepat eksekusinya.
Machine Dependent: Bergantung pada arsitektur mesin tertentu.
Machine Independent: Optimasi pada level logika (Lokal dan Global).
2. Optimasi Lokal
Dilakukan pada blok kode sumber tertentu:
Folding: Mengganti ekspresi konstanta dengan nilai hasil komputasinya saat waktu kompilasi. Contoh:
A := 2 + 3 + BmenjadiA := 5 + B.Redundant-Subexpression Elimination: Menggunakan kembali hasil komputasi sebelumnya daripada menghitung ulang ekspresi yang sama.
Strength Reduction: Mengganti operasi berat dengan operasi yang lebih ringan. Contoh:
A := A + 1diganti denganINC(A).3. Optimasi dalam Iterasi (Loop)
Loop Unrolling: Mengganti loop dengan menuliskan pernyataan di dalamnya beberapa kali secara berurutan. Ini mengurangi beban inisialisasi, pengecekan kondisi, dan penyesuaian variabel loop.
Frequency Reduction: Memindahkan pernyataan yang nilainya tetap (tidak berubah dalam loop) ke luar loop agar dieksekusi lebih jarang.
4. Optimasi Global
Menganalisis seluruh alur eksekusi program (biasanya menggunakan graph terarah).
Kegunaan bagi Programmer (Mendeteksi Kode Bermasalah):
Unreachable/Dead Code: Kode yang tidak pernah dieksekusi (misal: instruksi di dalam blok
IF X=0padahalXselalu5).Unused Parameter: Parameter prosedur yang tidak pernah digunakan.
Unused Variable: Variabel yang dideklarasikan tetapi tidak pernah dipakai.
Uninitialized Variable: Variabel yang digunakan dalam operasi sebelum diberi nilai awal.
Kegunaan bagi Kompiler:
Meningkatkan efisiensi eksekusi.
Menghilangkan kode yang tidak terpakai secara otomatis.
Teknik Optimasi dibagi menjadi lokal dan global. Optimasi Lokal mencakup teknik seperti Folding, Redundant-Subexpression Elimination, dan Strength Reduction. Optimasi dalam perulangan melibatkan Loop Unrolling dan Frequency Reduction. Sementara itu, Optimasi Global berfungsi mendeteksi kode mati (Dead Code) serta parameter atau variabel yang tidak digunakan, demi menghasilkan program mesin yang ramping dan cepat.
Additional Information
Mengapa Operasi Penjumlahan Lebih Baik?
Dalam Strength Reduction, kita sering mengganti perkalian dengan penjumlahan berulang karena pada arsitektur komputer tradisional, operasi perkalian membutuhkan lebih banyak siklus clock CPU dibandingkan operasi penjumlahan.
Dampak Loop Unrolling
Meskipun Loop Unrolling mempercepat eksekusi (karena mengurangi jumlah instruksi kontrol loop), teknik ini dapat meningkatkan ukuran file eksekusi (binary size) karena kode yang sama ditulis berulang kali. Ini adalah bentuk trade-off antara kecepatan dan memori.
Spaced Repetition Questions (Review)
1. Berikan contoh teknik Folding dalam optimasi!
Jika terdapat pernyataan `X := 10 * 2 + Y`, kompiler akan mengubahnya menjadi `X := 20 + Y` pada saat kompilasi.2. Apa yang dimaksud dengan Dead Code?
Bagian dari kode program yang secara logika tidak akan pernah dieksekusi oleh komputer selama program berjalan.3. Apa tujuan dari Frequency Reduction pada perulangan?
Untuk memindahkan instruksi yang hasilnya konstan di dalam loop ke luar loop, sehingga instruksi tersebut hanya dieksekusi satu kali bukan berkali-kali sesuai jumlah iterasi.