Program komputer adalah set instruksi yang diberikan kepada perangkat keras, untuk melakukan tugas. Program-program ini sebagian besar ditulis dalam bahasa tingkat tinggi, dan komputer tidak mengerti bahasa itu. Oleh karena itu, kompiler digunakan untuk mengubah instruksi tersebut menjadi kode mesin atau kode target. Itu melewati beberapa fase untuk membangun kode target. Optimasi kode adalah salah satunya. Ada dua teknik optimasi seperti, ketergantungan mesin dan optimisasi kode independen mesin. Itu perbedaan utama antara ketergantungan mesin dan optimisasi kode bebas mesin adalah bahwa optimisasi ketergantungan mesin diterapkan ke kode objek sedangkan optimisasi kode independen mesin diterapkan ke kode perantara.
1. Ikhtisar dan Perbedaan Utama
2. Apa yang dimaksud dengan Optimalisasi Kode Bergantung Mesin
3. Apa itu Pengoptimalan Kode Independen Mesin
4. Kesamaan Antara Ketergantungan Mesin dan Optimasi Kode Independen Mesin
5. Perbandingan Berdampingan - Mesin Bergantung vs Optimalisasi Kode Independen Mesin dalam Bentuk Tabular
6. Ringkasan
Saat mengonversi kode sumber ke kode objek atau kode target, kompilator melewati beberapa fase. Pertama, kode sumber diberikan kepada penganalisa Lexical yang menghasilkan token. Kemudian, output diberikan ke penganalisis sintaks yang menyelidiki apakah token yang dihasilkan dalam urutan logis. Keluaran itu diberikan kepada penganalisa semantik. Asumsikan ada sepotong kode sebagai p = q + r;
Di sini, p, q adalah bilangan bulat, tetapi r adalah float. Menggunakan semantic analyzer, variabel integer c dikonversi menjadi float. Oleh karena itu, ia melakukan analisis semantik. Output dari penganalisis semantik pergi ke generator kode Intermediate. Ini mengembalikan kode perantara yang kemudian pergi ke pengoptimal kode. Optimasi kode adalah proses menghilangkan pernyataan program yang tidak penting tanpa mengubah arti kode sumber yang sebenarnya. Ini bukan optimasi wajib tetapi, dapat meningkatkan waktu berjalan kode target. Output dari pengoptimal kode diberikan kepada pembuat kode, dan akhirnya, kode target dibuat.
Gambar 01: Fase Penyusun
Dalam optimisasi kode dependen mesin, optimisasi diterapkan ke kode sumber. Mengalokasikan jumlah sumber daya yang cukup dapat meningkatkan pelaksanaan program dalam optimasi ini.
Ketika optimasi dilakukan pada kode perantara, ini disebut optimisasi kode independen mesin. Ada beberapa teknik berbeda untuk mencapai optimisasi kode independen mesin. Mereka dijelaskan menggunakan contoh-contoh berikut.
Baca di bawah baris kode.
untuk (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Menurut kode di atas, b = x + 2 dihitung berulang-ulang di setiap iterasi. Setelah b dihitung, itu tidak berubah. Jadi, baris ini dapat ditempatkan di luar loop sebagai berikut.
b = x + 2;
untuk (j = 0; j< 10; j++)
a [j] = 5 * j;
Ini disebut pergerakan kode.
Baca di bawah baris kode.
j = 5;
if (j == 10)
a = b + 20;
Menurut kode di atas, 'jika blok' tidak akan pernah dijalankan karena nilai j tidak akan pernah sama dengan 10. Itu sudah diinisialisasi ke nilai 5. Oleh karena itu, ini jika blok dapat dihapus. Teknik ini adalah penghapusan kode mati.
Metode lain adalah pengurangan kekuatan. Operasi aritmatika seperti perkalian membutuhkan lebih banyak memori, waktu, dan siklus CPU. Ekspresi mahal ini dapat diganti dengan ekspresi murah seperti b = a * 2; atau bisa diganti dengan tambahan, b = a + a;
Lihat kode di bawah ini.
untuk (j = 1; j <= 5; j ++)
nilai = j * 5;
Alih-alih multiplikasi, kode dapat diubah sebagai berikut.
int temp = 5;
untuk (j = 1; j<=5; j++)
temp = temp + 5;
nilai = temp;
Dimungkinkan untuk mengevaluasi ekspresi yang merupakan konstanta saat runtime. Itu disebut lipat konstan. Ada yang bisa dinyatakan seperti b [j + 1] = c [j + 1];
Sebagai gantinya, itu dapat diubah sebagai berikut.
n = j +1;
b [n] = c [n];
Bisa ada loop sebagai berikut.
untuk (j = 0; j<5; j++)
printf ("a \ n");
untuk (j = 0; j <5; j++)
printf ("b \ n");
Mencetak a dan b, keduanya memiliki jumlah iterasi yang sama. Keduanya dapat digabungkan menjadi satu untuk loop sebagai berikut.
untuk (j = 0; j <5; j++)
printf ("a \ n");
printf ("b \ n");
Teknik penting lainnya adalah Penghapusan sub ekspresi umum. Ini untuk mengganti ekspresi identik dengan variabel tunggal untuk melakukan perhitungan. Lihat kode di bawah ini.
a = b * c + k;
d = b * c + m;
Kode ini dapat dikonversi sebagai berikut.
temp = b * c;
a = temp + k;
d = temp + m;
Tidak perlu menghitung b * c lagi dan lagi. Nilai yang dikalikan dapat disimpan dalam variabel dan digunakan kembali.
Ketergantungan Mesin vs Optimalisasi Kode Independen Mesin | |
Optimasi kode ketergantungan mesin diterapkan ke kode objek. | Pengoptimalan kode independen-mesin diterapkan ke kode perantara. |
Keterlibatan dengan Perangkat Keras | |
Optimalisasi yang bergantung pada mesin melibatkan register CPU dan referensi memori absolut. | Optimalisasi kode independen mesin tidak melibatkan register CPU atau referensi memori absolut. |
Optimasi kode terdiri dari dua teknik optimisasi yaitu, ketergantungan mesin dan optimisasi kode independen mesin. Perbedaan antara ketergantungan mesin dan optimisasi kode bebas mesin adalah bahwa optimisasi ketergantungan mesin diterapkan ke kode objek sedangkan, optimasi kode independen mesin diterapkan ke kode perantara.
Anda dapat mengunduh versi PDF dari artikel ini dan menggunakannya untuk tujuan offline sesuai catatan kutipan. Silakan unduh versi PDF di sini Perbedaan Antara Ketergantungan Mesin dan Optimasi Kode Independen Mesin
1. "Desain Kompiler | Optimasi Kode. " GeeksforGeeks. Tersedia disini
2.Point, Tutorial. "Desain Kompiler - Optimasi Kode." Www.tutorialspoint.com, Tutorials Point, 15 Agustus 2017. Tersedia di sini
3.Estudies4you. "Materi Studi JNTUH CSE." Perbedaan antara Ketergantungan Mesin dan Optimasi Kode Independen. Tersedia disini
1.'Compiler 'Oleh I, Surachit, (CC BY-SA 3.0) melalui Commons Wikimedia