Jumat, 22 April 2016

HAZARD IN PIPELINE

HAZARD IN PIPELINE

Pipeline adalah suatu cara yang digunakan untuk melakukan sejumlah kerja secara bersama tetapi dalam tahap yang berbeda yang dialirkan secara kontinu pada unit pemrosesor. Dengan cara ini, maka unit pemrosesan selalu bekerja.


Masalah-masalah pada Pipeline :

Dengan adanya persyaratan bahwa setiap instuksi yang berdekatan harus tidak saling bergantung, maka ada kemungkinan terjadinya situasi dimana pipeline gagal dilaksanakan (instuksi berikutnya tidak bisa dilaksanakan). Situasi ini disebut Hazards. Hazards mengurangi performansi dari CPU dimana percepatan ideal tidak dapat dicapai. Ada 3 kelompok Hazards :


1. Structural Hazards muncul dari konflik resource sistem yaitu ketika hardware tidak dapat
    mensuport semua kemungkinan kombinasi pelaksanaan instruksi
2. Data Hazards muncul ketika data untuk suatu instruksi tergantung pada hasil instruksi sebelumnya
3. Control Hazards muncul pada pelaksanaan instruksi yang mengubah PC (contoh : branch) 

Adanya Hazards menyebabkan pipeline terhambat (stalled). Tidak ada instruksi baru yang dijemput sampai hambatan itu selesai. Ini berarti instruksi-instruksi selanjutnya akan ditunda pula penjemputannya

  • Structural Hazards 
Ketika suatu mesin di-pipeline, eksekusi dari instruksi yang bertumpukan tersebut membutuhkan pemasangan pipeline pada unit-unit fungsional dan duplikasi resource untuk memperbolehkan semua kemungkinan kombinasi pelaksanaan instruksi di pipeline. Jika beberapa kombinasi dari instruksi tidak dapat diakomodasikan karena konflik resource, CPU tersebut dikatakan memliki structural hazards.

Sebagai contoh, sebuah mesin yang memiliki sistem memori dengan hanya 1 port (1 set address bus dan 1 set data bus) untuk membaca dan menulis, akan menghasilkan stall setiap kali tahapan EX dan IF terjadi bersamaan dimana suatu instruksi pada tahap EX ingin menulis memori dan pada saat yang bersamaan instruksi lainnya ada pada tahap IF yang berarti pembacaan memori. 

Pada t3 terjadi dua buah akses ke memori. Yang pertama untuk mengirim isi register AX ke stack dan yg kedua untuk menjemput instruksi ketiga (ADD). Jika memori tidak mendukung 2 pembacaan sekaligus seperti ini, maka akan terjadi Structural Hazard dimana penjemputan instruksi ketiga (ADD) akan ditunda sampai detik keempat. 
Untuk menghilangkan terjadinya Structural Hazard, maka setiap resource harus diduplikasi sebanyak jumlah stage dalam pipeline (jumlah tahapan pengerjaan instruksi). Seperti misalnya instruksi kedua dan ketiga dieksekusi pada saat yg bersamaan, maka ini berarti komponen-komponen yg terlibat dalam eksekusi harus diduplikasi. Salah satu untuk mengeksekusi instruksi pertama, dan satunya lagi untuk mengeksekusi instruksi kedua.

  • Data Hazards 

Data hazards terjadi ketika pipeline merubah urutan baca/tulis ke operand sehingga urutannya menjadi berbeda dengan urutan yang dilihat dengan menjalankan instruksiinstruksi tersebut pada mesin yang tidak di-pipeline. Data Hazards dapat diklasifikasikan menjadi 3 tipe dilihat dari urutan operasi baca-tulis oleh instruksi yang berdekatan. Jika ada 2 instruksi X dan Y dimana instruksi X dikerjakan lebih dahulu dari instruksi Y : 

RAW (Read After Write) Y mencoba untuk membaca suatu cell memori sebelum X menulisnya sehingga Y mendapatkan harga lama dari memori tersebut. 
Jika ketiga instruksi tersebut dikerjakan pada uP tanpa pipeline, maka data yang di-Push ke stack adalah FFFF. Namun ternyata jika dikerjakan pada uP dengan pipeline, yang di-Push ke stack adalah 0000. Hal ini disebabkan karena register AX akan diisi harga 0000 oleh instruksi pertama pada t5, dan kemudian akan ditumpuk oleh instruksi kedua dengan data FFFF pada t6. Instruksi ketiga akan membaca AX pada t5 sehingga yang dibaca adalah 0000 bukan FFFF. RAW adalah type yang paling sering terjadi diantara tipe yg lain. 
WAW (Write After Write) : Y mencoba untuk menulis suatu cell memori sebelum ditulis oleh X. Urutan penulisan menjadi terbalik sehingga isi dari memori adalah hasil proses instruksi X padahal yang diinginkan adalah hasil proses dari instruksi Y (tertumpuk oleh hasil instruksi X) 

Jika kedua instruksi tersebut dikerjakan pada uP tanpa pipeline, maka data yang ada di AX adalah dari stack. Namun ternyata jika dikerjakan pada uP dengan pipeline, data yang ada di AX adalah 0000. Hal ini disebabkan karena register AX akan diisi data dari stack oleh instruksi kedua pada t4 sedangkan instruksi pertama akan menumpuknya dengan data 0000 karena instruksi kedua baru selesai pada t5.
    
WAR (Write After Read) : Y mencoba untuk menulis suatu cell memori sebelum dibaca oleh X. 

Jika ketiga instruksi tersebut dikerjakan pada uP tanpa pipeline, maka data yang ada di BX adalah FFFF. Namun ternyata jika dikerjakan pada uP dengan pipeline, data yang ada di BX berasal dari stack. Hal ini disebabkan karena register AX akan diisi data dari stack oleh instruksi ketiga pada t5, dan data ini akan menumpuk data FFFF yang diberikan oleh instruksi pertama.  

0 komentar:

Posting Komentar