Lompat ke konten Lompat ke sidebar Lompat ke footer

Makro Prediksi Cabang pada GCC dan Fungsinya

Salah satu teknik optimisasi yang sering digunakan pada kernel Linux adalah "_builtin_expect". Ketika dijalankan dengan kode kondisional (if-else statement), maka akan diketahui cabang mana yang benar dan cabang mana yang salah. Jika kompilator dapat mengetahui informasi ini pada tingkat lebih lanjut, maka hal ini dapat menghasilkan bentuk kode yang paling optimal.


Penjelasan Singkat, Makro Prediksi Cabang pada GCC
Ilustrasi Makro Prediksi GCC

Sebelum memahami lebih dalam materi tentang Makro Prediksi Cabang pada GCC dan Fungsinya, terlebih dahulu pelajari materi tentang: Makro Offset Bahasa C dan Fungsinya [klik], Makro Multibaris Bahasa C dan Fungsinya [klik], dan Variabel Panjang Argumen Untuk Makro Bahasa C [klik].

Perhatikan definisi makro dari "likely()" dan "unlikely()" dari kode kernel linux “http://lxr.linux.no/linux+v3.6.5/include/linux/compiler.h”.

#define likely(x) __builtin_expect(!!(x), 1) 
#define unlikely(x) __builtin_expect(!!(x), 0) 

Pada contoh berikut, kode program akan ditandai sebagai likely true:

const char *home_dir ; 
home_dir = getenv("HOME"); 

if (likely(home_dir)) 
printf("home directory: %s\n", home_dir); 

else
perror("getenv"); 

Pada contoh sebelumnya, kode program memiliki kodisional "IF" sebagai "likely()" true, sehingga kompilator akan menempatkan kode true secepatnya dan kode false setelahnya dalam instruksi cabang. Karena hal ini,  maka kompilator akan mecapai nilai optimalnya. Tetapi, jangan menggunakan "likely()" dan "unlikely()" makro secara sembarangan. Jika prediksi bernilai benar, maka artinya terdapat 0 siklus dari lompatan instruksi, tetapi jika prediksi bernilai salah, maka akan mengembalikan beberapa siklus, karena preprosesor dibutuhkan untuk melewatkan alirannya, dimana kondisi terburuk yang dapat terjadi adalah kompilator tidak akan memiliki nilai yang dapat diperkirakan.

'Akses memori' adalah operasi CPU yang paling lambat jika dibandingkan dengan jenis operasi CPU lainnya. Untuk menghindari batasan tersebut CPU menggunakan "CPU caches" atau L1-chache, L2-chache, dan lain sebagainya guna meningkatkan kecepatan akses dari CPU tersebut. Ide utama dari chache adalah mengkopi beberapa bagian dari memori ke dalam CPU itu sendiri. Sehingga, dapat dilakukan akses memori lebih cepat daripada memori yang pernaj dilakukan dengan metode sebelumnya. Namun terdapat masalah, dimana "chache memory" ukurannya terbatas, dan proses kopi data tidak dapat dilakukan pada semua ukuran memori tersebut. Sehingga, CPU hanya melakukan prediksi memori mana saja yang akan digunakan pada waktu dekat dan akan melakukan load memori menjadi CPU chache dan makro yang selanjutnya akan digunakan sebagai petunjuk untuk load memori pada cache CPU.

Artikel ini didedikasikan kepada: Ajeng Nur Fauziah, Ali Barokah, Ananda Fama Laudza Dwi Anjani, Anis Setyaningrum, dan Annas Bhakti Aditama.

6 komentar untuk "Makro Prediksi Cabang pada GCC dan Fungsinya"

  1. Apa yang dimaksud dengan GCC?

    BalasHapus
    Balasan
    1. GCC adalah singkatan dari GNU Compiler Collection yang merupakan kumpulan atau koleksi kompilator yang dikembangkan oleh proyek GNU. Dimana, pada awal rilisnya, GCC merupakan singkat dari GNU C Compoler karena hanya bisa melakukan kompilasi program terhadap bahasa C saja. Namun, pada Desember 1987, kompilator GCC tidak hanya bisa mendukung bahasa C tetapi juga dapat mendukung bahasa C++.

      Hapus
  2. Apa yang dimaksud dengan GNU?

    BalasHapus
    Balasan
    1. GNU adalah singkatan dari "GNU's No Unix". Kalimat ini diucapkan sebagai suatu suku kata dengan kata G digaungkan lebih keras. Richard Stallman membuat pengumuman awal proyek GNU pada bulan September 1983.


      Catatan: iya, benar, itu adalah singkatan dari GNU yang sebenarnya

      Sumber:
      https://www.gnu.org/gnu/pronunciation.html

      Hapus
    2. Iya tujuan dari pembuatan akronim GNU memang untuk lucu-lucuan aja!!

      Hapus
  3. Heish, akronim konyol macam apa ini -____-

    BalasHapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -