Optimasi Perangkat Lunak

Optimasi Perangkat Lunak

 Optimasi Perangkat Lunak: Ujung depan kompiler umumnya bertanggung jawab untuk membuat representasi perantara dari program sumber sedangkan ujung belakang kompiler membangun program target yang di inginkan dari representasi perantara dan informasi dalam tabel simbol. Sebelum kode perantara di teruskan ke bagian belakang kompilator, kode perantara perlu diperbaiki sehingga kode target yang lebih baik akan dihasilkan. Fase optimasi kode dalam kompiler mencoba untuk meningkatkan kode target tanpa mengubah outputnya atau tanpa efek samping.

Saat ini, sebagian besar penelitian kompiler di lakukan dalam fase optimasi. Ada banyak teknik klasik (mis.

Menghilangkan sub-ekspresi umum, eliminasi Dead-Code, Constant Folding, dll.) yang telah di gunakan dalam optimasi kode. Namun, peningkatan ukuran dan kompleksitas produk perangkat lunak dan penggunaan produk ini dalam sistem tertanam, berbasis web, dan seluler menghasilkan permintaan untuk versi kode sumber yang lebih optimal. Makalah penelitian ini membahas tantangan yang terlibat dalam optimasi kode untuk sistem tersebut dan beberapa teknik baru-baru ini di kembangkan dalam optimasi kode.

Optimasi Kode adalah proses mengubah sepotong kode sumber untuk menghasilkan kode target yang lebih efisien. Efisiensi di ukur baik dari segi waktu maupun ruang. Optimasi umumnya di implementasikan menggunakan satu set transformasi pengoptimalan, yaitu, algoritma yang mengambil sepotong kode sumber dan mengubahnya untuk menghasilkan kode keluaran yang setara secara semantik yang menggunakan lebih sedikit sumber daya. Sebagian besar teknik optimasi berusaha untuk meningkatkan kode target dengan menghilangkan instruksi yang tidak perlu dalam kode objek, atau dengan mengganti satu urutan instruksi dengan urutan instruksi lain yang lebih cepat.

Optimasi adalah salah satu fase terpenting dalam Compiler. Pengoptimalan kode berupaya meningkatkan kode sumber sehingga kode target yang lebih baik akan di hasilkan. Biasanya, kode target yang lebih baik adalah yang lebih baik dalam hal ruang dan waktu. Namun, beberapa tujuan lain juga dapat di pertimbangkan untuk mengukur kebaikan kode, seperti kode target yang mengkonsumsi lebih sedikit daya. Di zaman modern, arsitektur prosesor menjadi lebih kompleks. Dengan di perkenalkannya multicore dan sistem tertanam yang membutuhkan kode target yang lebih cepat yang mengkonsumsi lebih sedikit ruang dan daya untuk dijalankan. Fase optimasi kode dalam kompiler mencoba untuk menyelesaikan masalah ini dan menghasilkan kode target yang lebih baik tanpa mengubah output yang diinginkan.

1.3 Kehadiran fase Optimasi dalam Arsitektur Kompilator

Pengoptimalan kode dapat di lakukan pada representasi perantara dari kode sumber atau pada versi kode mesin target yang tidak di optimalkan. Jika diterapkan pada representasi perantara, fase optimasi kode akan mengurangi ukuran Pohon Sintaks Abstrak atau instruksi Tiga Kode Alamat. Jika tidak, jika di terapkan sebagai bagian dari pembuatan kode akhir, fase optimasi kode mencoba untuk memilih instruksi mana yang akan dipancarkan, bagaimana mengalokasikan register dan kapan harus tumpah, dan seterusnya.

2. TEKNIK OPTIMASI

Ada banyak teknik optimasi klasik yang telah di gunakan dalam optimasi kode sejak dekade terakhir. Beberapa dari teknik ini di terapkan pada blok dasar dalam kode sumber dan yang lainnya diterapkan pada seluruh fungsi. Sebagai hasil dari penelitian terbaru, banyak teknik optimasi baru telah di perkenalkan. Dalam makalah penelitian ini, penekanannya adalah pada teknik baru optimasi kode; Namun, gambaran singkat tentang teknik klasik juga telah di perkenalkan.

2.1 Teknik Optimasi Klasik

Teknik klasik untuk optimasi kode dapat di kategorikan sebagai:

1. Optimasi Lokal

2. Pengoptimalan Global

3. Optimasi Antar-Prosedural

2.1.1 Optimasi Lokal

Fase optimasi kode dalam kompiler di mulai dengan mempartisi urutan instruksi tiga alamat ke dalam blok dasar. Blok dasar ini menjadi simpul dari grafik aliran. Optimasi lokal di lakukan dalam setiap blok dasar. Kita sering dapat memperoleh peningkatan substansial dalam waktu menjalankan kode dengan melakukan optimasi lokal dalam setiap blok dasar dengan sendirinya.

Karena blok dasar tidak memiliki aliran kontrol, pengoptimalan ini memerlukan sedikit analisis.

Optimasi lokal dapat di lakukan dengan menggunakan teknik berikut

(I) Menghilangkan subekspresi umum lokal,

(ii) Penghapusan kode mati

(iii) Penggunaan identitas aljabar-

(a) Penggunaan identitas aritmatika

(b) Pengurangan kekuatan lokal, yaitu mengganti operator yang lebih mahal dengan yang lebih murah.

(c) Lipat Konstan

(iv) Menata ulang pernyataan-pernyataan yang tidak bergantung satu sama lain.

2.1.2 Optimasi Global (Metode Intra-Prosedural)

Teknik optimasi global bekerja pada seluruh fungsi. Dalam pengoptimalan global, peningkatan memperhitungkan apa yang terjadi di seluruh blok dasar.

Sebagian besar teknik optimasi global di dasarkan pada analisis aliran data. Hasil analisis aliran data semuanya memiliki

bentuk yang sama: untuk setiap instruksi dalam program, mereka menentukan beberapa properti yang harus di miliki setiap kali instruksi di eksekusi.

Perangkat Lunak