Saturday, 13 December 2014

Hazard in Pipelining

Dalam mengimplementasi pipelining, terdapat 3 kondisi yang menyebabkan pipelining kehilangan sebagian total kinerja yang bisa diraih. 3 kondisi ini dikenal dengan hazard.

1.       Structural Hazard
Structural hazard terjadi karena adanya konflik dalam penggunaan resource oleh masing-masing instruksi yang sedang berada dalam pipeline.

Pipelining pada dasarnya memungkinkan beberapa instruksi dikerjakan dalam waktu yang bersamaan. Ketika masing-masing instruksi tersebut dieksekusi, mesin harus mampu memenuhi resource yang dibutuhkan. Ada kalanya mesin tidak mampu melakukan hal tersebut, yang menyebabkan sebuah resource mengalami konflik dalam penggunaannya oleh instruksi-instruksi yang kebetulan akan mengakses resource yang sama.

Kondisi umum yang dapat menyebabkan structural hazard adalah sebagai berikut :
  •         Ada functional unit yang belum siap untuk digunakan. Functional unit adalah komponen yang dimiliki processor yang mampu melakukan komputasi sesuai dengan perintah yang dibawa sebuah instruksi. Ada kalanya functional unit yang dimiliki processor belum siap untuk di-pipeline. Hal ini berakibat instruksi yang sudah di-pipeline harus di-stall untuk beberapa clock cycle sampai functional unit siap untuk di-pipeline

  •         Resource belum seluruhnya diduplikasi. Duplikasi resource memungkinkan resource yang sama diakses oleh beberapa instruksi yang berbeda. Contoh umum resource yang dapat diduplikasi adalah memory.

            Cara mengatasi structural hazard adalah dengan melakukan stall terhadap pipeline selama 1 clock atau lebih sesuai dengan prediksi control logic. Stall selama 1 cycle atau lebih ini menyebabkan adanya delay terhadap salah satu instruksi yang terlibat, yang pada akhirnya menghilangkan terjadinya konflik pada resource yang akan diakses.

2.       Data Hazard
Data hazard disebabkan oleh terjadinya perbedaan urutan eksekusi insruksi baca dan tulis dibanding sebelum instruksi tersebut belum dipecah secara paralel. Urutan instruksi menjadi penting karena ada kalanya sebuah instruksi membutuhkan input dari hasil operasi instruksi sebelumnya.

Data hazard dibagi 3, yaitu :
  •         Read after Write (true data dependency)

Operasi baca dilakukan setelah operasi tulis selesai, di mana nilai hasil pembacaan dibutuhkan oleh operasi tulis tersebut.
  •         Write after Write (Output dependency)

Operasi tulis dilakukan tepat setelah sebuah operasi tulis lainnya dilakukan. Dapat terjadi pada pipeline yang membolehkan operasi tulis dilakukan di lebih dari 1 stage. Pada kasus ini sebuah register digunakan oleh dua operasi tulis.
  •         Write after Read (Anti data dependency)

Operasi tulis dilakukan setelah operasi baca, di mana operasi baca seharusnya membaca nilai yang dihasilkan oleh operasi tulis tersebut.

Secara umum, penanganan ketika akan terjadi sebuah data hazard (terutama true data dependency) adalah dengan melakukan stall terhadap instruksi yang membutuhkan nilai dari instruksi lainnya. Hal ini menyebabkan adanya penalty terhadap kinerja dari pipeline tersebut. Untuk mengurangi penalty yang harus dihadapi, maka sebuah teknik yang dikenal dengan forwarding diimplementasi.

Forwarding memungkinkan nilai hasil instruksi yang dihasilkan pada tahapan lanjut pipeline langsung disimpan pada memory tanpa harus dipipeline terlebih dahulu. Ketika ada sebuah instruksi yang membutuhkan nilai yang dihasilkan oleh instruksi di tahapan lanjut pipeline, instruksi tersebut memiliki 2 pilihan input : nilai yang dihasilkan oleh instruksi sebelumnya secara normal, atau nilai yang di-forward oleh instruksi di tahapan pipeline setelah instruksi tersebut.

3.       Control Hazard
Hazard yang terjadi karena adanya instruksi yang dieksekusi sebelum seluruh branch pada jalur eksekusi selesai dievaluasi. Control hazard dapat menyebabkan terjadinya perubahan nilai PC (Program Counter). 

Perubahan ini mengharuskan adanya program baru yang harus dieksekusi, menyebabkan seluruh instruksi yang sudah masuk pipeline menjadi tidak berguna untuk dieksekusi.

Cara mengatasi control hazard adalah dengan melakukan branch handling dan branch prediction.

No comments:

Post a Comment