Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Kuliah 22 Optimisasi Kode.

Presentasi serupa


Presentasi berjudul: "Kuliah 22 Optimisasi Kode."— Transcript presentasi:

1 Kuliah 22 Optimisasi Kode

2 Blok Dasar dan Graph Alur (Basic Blocks and Flow Graphs)
Blok dasar adalah suatu barisan statement berurutan dimana kendali alur (flow of control) memasuki blok pada awal blok dan meninggalkan blok pada bagian akhir blok tanpa halt atau branching kecuali pada bagian akhir. Berikut contoh blok dasar t1 := a*a t2 a*b t3 2*t2 t4 t1+t3 t5 b*b t6 t4+t5

3 Algoritma: Partisi ke blok dasar
Input: barisan statement tiga alamat Output : list blok dasar, kode tiga alamat terpilah-pilah masing-masing hanya dalam masing-masing satu blok Metoda: Tentukan himpunan leader, yakni statement pertama dari blok dasar. Statement pertama adalah leader Sembarang statement yang merupakan target dari goto bersyarat atau non bersyarat adalah leader Sembarang statement tepat mengikuti statement goto (bersyarat atau tidak) merupakan leader Untuk masing-masing leader, blok dasarnya memuat leader itu sendiri dan semua statement sampai (tapi tak termasuk) leader berikutnya atau akhir program

4 Contoh proses partisi ke blok
(1) Prod :=0 /* leader B1 */ (2) I:=1 (3) T1:=4*i /* leader B2 */ (4) T2:=a[t1 ] /* hitung a[I] */ (5) T3:=4*i (6) T4:=b[t3 ] /* hitung b[I] */ (7) T5:=t2 * t4 (8) T6:= prod + t5 (9) Prod := t6 (10) T7 := I +1 (11) I:=t7 (12) If I <= 20 goto (3) /* Source Code */ Begin prod := 0; I:= 1; do begin prod := prod + a[I]*b[j]; I := I+1; end while I <= 20 End Gambar 9.9 menampilkan flow graph program ini.

5 Transformasi dalam blok Dasar
Transformasi ini tidak merubah struktur Common sub expression elimination Dead code elimination Renaming of temporary variables Interchange of two independent adjacent statements Transformasi ini sering dipakai utk optimisasi

6 Optimisasi Kode Machine Independent
Dilakukan dengan memakai transformasi (lokal dan global terhadap blok) pada kodenya. Sifat transformasi: Tidak merubah arti program Mempercepat jalannya program Harus ada manfaat / hasilnya Optimisasi dapat dilakukan oleh user dan compiler

7 Optimisasi Kode Data-flow analysis: proses pengumpulan informasi tentang cara bagaimana variabel-variabel dipakai dalam program.

8 Optimisasi Kode Keuntungan struktur di atas:
1. Operasi yang dibutuhkan untuk mengimplementasikan konstrak tingkat tinggi dibuat eksplisit oleh kode intermediate, sehingga memungkinkan dilakukan optimisasi. Contoh: penghitungan address a[i] diberikan secara eksplisit pada gambar berikut sehingga 4 * i dapat dihapus.

9 Statement tiga alamat diberikan pada Gambar 10.4

10 Gambar 10.4 Blok dasar dari statement ini pada Gambar 10.5

11 Gambar 10.5

12 Optimisasi Kode Keuntungan struktur di atas:
Kode intermediate dapat tidak bergantung pada mesin sasaran, sehingga pengoptimasi tidak perlu diubah banyak jika dipakai mesin yang lain.

13 Optimisasi Kode Beberapa transformasi untuk optimisasi:
Penghapusan instruksi yang berlebihan (redundant-instruction elimination), juga instruksi yang tidak tercapai (dead code). Optimisasi flow-of-control. Penyederhanaan aljabar. Pemakaian idiom mesin. (1 s/d 4  optimisasi peephole Penghapusan sub ekspresi yang sama. Rambatan copy (copy propagation). Penghapusan kode-mati (dead-code elimination) Optimisasi loop: - Pemindahan kode (code motion) - Variabel induksi - reduction in strength

14 Optimisasi Kode (1) MOV R0, a (2) MOV a, R0
(2) harus dihapus, karena (1) sudah memastikan bahwa nilai dari a sudah ada di R0. (2) tidak dapat dihapus kalau mengandung label. #define debug 0 ….. if(debug) { print debugging information /* tidak dapat dicapai kalau debug masih 0 */ }

15 Optimisasi Kode Ubah goto L1 goto L2 … menjadi …
L1: goto L2 L1: goto L2 Jika tidak ada lompatan ke L1, statement L1: goto L2 dapat dihapus. if a < b goto L1 if a < goto L2

16 Optimisasi Kode Ubah goto L1(*) if a < b goto L2(**)
… menjadi goto L3 L1: if a < b goto L2 … L3: L3: (*) dan (**) punya jumlah instruksi yang sama, tetapi pada (*) goto L1 selalu dieksekusi, sedangkan pada (**), goto L3 tidak selalu dieksekusi.

17 Optimisasi Kode 4. Statement berikut tidak perlu dieksekusi x := x + 0
5. INC, x untuk x := x + 1 DEC, x untuk x := x – 1 Untuk contoh 6 – 9 mengacu pada gambar 10.6, 10.7, 10.9,

18 Optimisasi Kode 6. Penghapusan subekspresi sama secara lokal pada gambar 10.6, dan secara global pada gambar 10.7 Gambar 10.6

19 Optimisasi Kode 7. Rambatan copy
Ada statement f := g, g dipakai sebagai pengganti f. Contoh: Rambatan copy dilakukan pada B5 gambar 10.7 yang menghasilkan: x := t3 a[t7] := t5 a[t10] := t3 goto B2

20 Gambar 10.7

21 Optimisasi Kode 8. Penghapusan kode mati, pada contoh 6: x := t3 dapat dihapus karena tidak dipakai lagi, maka dihasilkan: a[t7] := t5 a[t10] := t3 goto B2 9. Pemindahan kode (code motion) while(i <= limit –2) tidak bergantung pada loop while bisa diubah menjadi t := limit – 2; while(i <= t)

22 Reduction strength pada Gambar 10.9

23 Gambar 10.10


Download ppt "Kuliah 22 Optimisasi Kode."

Presentasi serupa


Iklan oleh Google