DEALING WITH BRANCHES

Dalam sebuah siklus instruksi yang terjadi pada CPU, umumnya waktu eksekusi akan lebih lama dibandingkan dengan pengambilan instruksi. Karena eksekusi ini akan meliputi pembacaan dan penyimpanan operand serta kinerja sejumlah operasi sehingga tahapan pengambilan instruksi mungkin perlu menunggu beberapa saat sebelum mengosongkan buffer-nya.

Dengan adanya instruksi percabangan bersyarat maka akan membuat alamat instruksi berikutnya yang akan diambil tidak diketahui. Tahapan pengambilan harus menunggu sampai menerima alamat instruksi berikutnya dari tahapan eksekusi. Dengan demikian tahap eksekusi harus menunggu pada saat fetch. Kestabilan akan tergangggu saat instruksi mengalami percabangan karena belum bisa ditentukan tujuan percabangan tersebut. Untuk menjamin terjadinya aliran instruksi yang stabil ada beberapa metode atau teknik pendekatan yang dipakai :

1.        Multiple Streams

Multiple streams menggunakan dua jalur pipeline. Jadi, kedua instruksi percabangan diambil dengan dua buah streams. Teknik ini diterapkan pada IBM 370/168 dan IBM 3033

Metode ini memiliki beberapa kekalahan yaitu :

  • Adanya persaingan dalam mengakses register dan memori untuk dimasukkan dalam pipeline.
  • Bila dalam percabangan tersebut terdapat percabangan lagi, tidak mampu ditangani oleh dua stream.

Walaupun metode ini memiliki beberapa kelemahan tapi terbukti meningkatkan kinerja pipelining.

2.        Perfetch Branch Target

Pada metode ini target dari percabangan bersyarat telah diketahui. Sehingga pengambilan awal (prefetch) terhadap instruksi setelah percabangan dan target percabangan dapat dilakukan.

Tetapi ada kekurangan dari metode ini, yaitu diperlukannya buffer dan register untuk proses prefetch. Metode ini diimplementasikan pada IBM 360/91.

3.        Loop Buffer

Dalam metode ini apabila terdapat percabangan maka perangkat keras melakukan pemeriksaan terlebih dahulu pada buffer. Apabila target percabangan telah ada dalam buffer, maka instruksi berikutnya diambil dari buffer. Tidak perlu dari memory lagi.

Perbedaan Loop Buffer dengan Prefetch Branch Target adalah pada Loop Buffer akan melakukan buffer instruksi ke depan dalam jumlah yang banyak, sehingga bila target tidak berjauhan lokasinya maka secara otomatis telah terbuffer.

Teknik ini hampir mirip dengan Cache Memory, namun terdapat perbedaan karena Loop Buffer masih mempertahankan urutan instruksi yang diambilnya.

4.        Branch Prediction

Dalam proses instruksi komputer, sering terjadi perulangan. Karena itu diterapkan teknik prediksi ini dalam pengambilan instruksi pada Cache Memory. Dalam penentuan prediksi tersebut diperlukan algoritma khusus.

Yang harus diperhatikan dalam proses prediksi target percabangan adalah analisa yang akurat dan teliti terhadap eksekusi-eksekusi yang telah terjadi dan aspek lokalitas. Aspek lokalitas memori adalah kecenderungan penyimpanan instruksi yang berhubungan dalam tempat yang berdekatan.

5.        Delayed Branch

Dalam metode ini akan dilakukan penundaan proses eksekusi beberapa saat pada tahapan pipeline yang melibatkan percabangan, sampai didapatkan hasil percabangan.

Namun tahapan pipelining lainnya tetap dapat berjalan selama proses penundaan tersebut. Teknik penundaan ini menggunakan instruksi NOOP. Instruksi NOOP adalah instruksi yang tidak melakukan kegiatan apapun.

Referensi : Data and Computer Communications – William Stallings

Iklan

Jangan sungkan berpendapat

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s