Bagian depan kompilator umumnya bertanggung jawab untuk membuat representasi perantara dari program sumber sedangkan ujung belakang kompilator menyusun program target yang diinginkan dari representasi perantara dan informasi dalam tabel simbol. Sebelum kode perantara diteruskan ke ujung belakang kompiler, kode perantara perlu diperbaiki sehingga kode target yang lebih baik akan dihasilkan. Fase pengoptimalan kode dalam kompilator mencoba meningkatkan kode target tanpa mengubah keluarannya atau tanpa efek samping.
Saat ini, sebagian besar penelitian compiler dilakukan dalam tahap pengoptimalan. Ada banyak teknik klasik (mis
Menghilangkan sub-ekspresi umum, penghapusan Kode-Mati, Melipat Konstan, dll.) Yang telah digunakan dalam pengoptimalan 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 dioptimalkan. Makalah penelitian ini membahas tantangan yang terlibat dalam pengoptimalan kode untuk sistem semacam itu dan beberapa teknik yang baru-baru ini dikembangkan dalam pengoptimalan kode.
Pengoptimalan Kode adalah proses mengubah sepotong kode sumber untuk menghasilkan kode target yang lebih efisien. Efisiensi diukur baik dari segi waktu dan ruang. Pengoptimalan umumnya diimplementasikan menggunakan seperangkat transformasi pengoptimalan, yaitu algoritme yang mengambil sepotong kode sumber dan mengubahnya untuk menghasilkan kode keluaran yang setara secara semantik yang menggunakan lebih sedikit sumber daya. Sebagian besar teknik pengoptimalan mencoba 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 tahapan terpenting dalam Compiler. Pengoptimalan kode mencoba untuk meningkatkan kode sumber sehingga kode target yang dihasilkan lebih baik. Biasanya, kode target yang lebih baik adalah yang lebih baik dalam hal ruang dan waktu. Namun, beberapa tujuan lain juga dapat dipertimbangkan untuk mengukur kebaikan kode, seperti kode target yang mengkonsumsi lebih sedikit daya. Di zaman modern, arsitektur prosesor menjadi lebih kompleks. Dengan diperkenalkannya multicore dan sistem tertanam yang membutuhkan kode target yang lebih cepat yang mengkonsumsi lebih sedikit ruang dan daya untuk dieksekusi. Fase pengoptimalan kode dalam kompilator mencoba menyelesaikan masalah ini dan menghasilkan kode target yang lebih baik tanpa mengubah keluaran yang diinginkan.
1. Adanya fase Optimasi dalam Arsitektur Penyusun
Pengoptimalan kode dapat dilakukan pada representasi perantara dari kode sumber atau pada versi kode mesin target yang tidak dioptimalkan. Jika diterapkan pada representasi perantara, fase pengoptimalan kode akan mengurangi ukuran instruksi Pohon Sintaks Abstrak atau Kode Alamat Tiga. Sebaliknya, jika diterapkan sebagai bagian dari pembuatan kode akhir, fase pengoptimalan kode mencoba memilih instruksi mana yang akan dikirim, bagaimana mengalokasikan register dan kapan harus menumpahkan, dan seterusnya.
2. TEKNIK OPTIMASI
Ada banyak teknik pengoptimalan klasik yang telah digunakan dalam pengoptimalan kode sejak dekade terakhir. Beberapa dari teknik ini diterapkan ke blok dasar dalam kode sumber dan yang lainnya diterapkan ke seluruh fungsi. Sebagai hasil dari penelitian terbaru, banyak teknik pengoptimalan baru telah diperkenalkan. Dalam artikel ini, dikutip dari https://www.teknoanime.com, kita akan membahas teknik-teknik baru pengoptimalan kode
2.1 Teknik Optimasi Klasik
Teknik klasik untuk pengoptimalan kode dapat dikategorikan sebagai:
1. Pengoptimalan Lokal
2. Optimasi Global
3. Optimasi Antar Prosedural
2.1.1 Pengoptimalan Lokal
Fase pengoptimalan kode dalam kompiler dimulai dengan mempartisi urutan instruksi tiga alamat menjadi blok dasar. Blok dasar ini menjadi simpul dari grafik aliran. Pengoptimalan lokal dilakukan dalam setiap blok dasar. Kami sering kali dapat memperoleh peningkatan substansial dalam waktu berjalan kode dengan melakukan pengoptimalan lokal dalam setiap blok dasar dengan sendirinya. Karena blok dasar tidak memiliki aliran kontrol, pengoptimalan ini memerlukan sedikit analisis.
Pengoptimalan lokal dapat dilakukan dengan menggunakan teknik berikut-
(I) Menghilangkan subekspresi umum lokal,
(ii) Penghapusan kode mati
(iii) Penggunaan identitas aljabar-
(a) Penggunaan identitas aritmatika
(b) Penurunan kekuatan lokal, yaitu mengganti operator yang lebih mahal dengan yang lebih murah.
(c) Lipat Konstan
(iv) Menyusun ulang pernyataan yang tidak bergantung satu sama lain.
2.1.2 Pengoptimalan Global (Metode Intra-prosedural)
Teknik pengoptimalan global bekerja pada seluruh fungsi. Dalam pengoptimalan global, peningkatan memperhitungkan apa yang terjadi di seluruh blok dasar.