Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

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.

Presentasi serupa


Presentasi berjudul: "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."— Transcript presentasi:

1 1 Kuliah 22 Optimisasi Kode

2 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 t1t1 := a*a t2t2 := a*b t3t3 :=2*t 2 t4t4 := t 1 +t 3 t5t5 := b*b t6t6 :=t 4 +t 5

3 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: 1. Tentukan himpunan leader, yakni statement pertama dari blok dasar. 1. Statement pertama adalah leader 2. Sembarang statement yang merupakan target dari goto bersyarat atau non bersyarat adalah leader 3. Sembarang statement tepat mengikuti statement goto (bersyarat atau tidak) merupakan leader 2. Untuk masing-masing leader, blok dasarnya memuat leader itu sendiri dan semua statement sampai (tapi tak termasuk) leader berikutnya atau akhir program

4 4 Contoh proses partisi ke blok /* Source Code */ Begin prod := 0; I:= 1; do begin prod := prod + a[I]*b[j]; I := I+1; end while I <= 20 End (1)Prod :=0 /* leader B1 */ (2) I:=1 (3)T 1 :=4*i /* leader B2 */ (4)T 2 :=a[t 1 ] /* hitung a[I] */ (5)T 3 :=4*i (6)T 4 :=b[t 3 ] /* hitung b[I] */ (7)T 5 :=t 2 * t 4 (8)T 6 := prod + t 5 (9)Prod := t 6 (10)T 7 := I +1 (11)I:=t 7 (12)If I <= 20 goto (3) Gambar 9.9 menampilkan flow graph program ini.

5 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 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 7 Optimisasi Kode Data-flow analysis: proses pengumpulan informasi tentang cara bagaimana variabel-variabel dipakai dalam program.

8 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 10.4 berikut sehingga 4 * i dapat dihapus.

9 9 Gambar 10.2 Statement tiga alamat diberikan pada Gambar 10.4

10 10 Gambar 10.4 Blok dasar dari statement ini pada Gambar 10.5

11 11 Gambar 10.5

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

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

15 15 Optimisasi Kode 3. Ubah goto L 1 goto L 2 …menjadi… L 1 :goto L 2 Jika tidak ada lompatan ke L 1, statement L 1 : goto L 2 dapat dihapus. Ubah if a < b goto L 1 if a < goto L 2 …menjadi… L 1 :goto L 2

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

17 17 Optimisasi Kode 4. Statement berikut tidak perlu dieksekusi x := x + 0 x := x * 1 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 18 Optimisasi Kode 6. Penghapusan subekspresi sama secara lokal pada gambar 10.6, dan secara global pada gambar 10.7 Gambar 10.6

19 19 Optimisasi Kode 7. Rambatan copy Ada statement f := g, g dipakai sebagai pengganti f. Contoh: Rambatan copy dilakukan pada B 5 gambar 10.7 yang menghasilkan: x := t 3 a[t 7 ] := t 5 a[t 10 ] := t 3 goto B 2

20 20 Gambar 10.7

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

22 22 Reduction strength pada Gambar 10.9

23 23 Gambar 10.10


Download ppt "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."

Presentasi serupa


Iklan oleh Google