next up previous contents index
Next: การจัดเรียงคำสั่งใหม่เพื่อหลีกเลี่ยงการ Stall Up: Pipeline Hazard Previous: Data Hazard   Contents   Index

การทำการ Forwarding กับคำสั่งสองคำสั่ง

จากตัวอย่างขั้นต้น เราสามารถเขียนการทำงานของไพพ์ลายน์ได้ดังรูป 6.4 ที่แสดงภาพการทำงานของโปรเซสเซอร์ไพพ์ลายน์ของคำสั่ง add $s0, $t0, $t1 ในรูป 6.5 แสดงการทำการ forward ค่าที่คำนวณได้จากเอาท์พุทของ ALU ของคำสั่ง add ไปยังคำสั่ง sub

Figure 6.4: การทำงานของโปรเซสเซอร์ไพพ์ลายน์ของคำสั่ง add $s0, $t0, $t1
\includegraphics[width=6in]{fig/Chapter_6/Figure_6.4.eps}

Figure 6.5: การ forward ค่าที่คำนวณได้จากเอาท์พุทของ ALU ของคำสั่ง add ไปยังคำสั่ง sub
\includegraphics[width=5.5in]{fig/Chapter_6/Figure_6.5.eps}

ถึงแม้ว่าการทำ Forward จะสามารถใช้งานได้ดีในตัวอย่างขั้นต้น แต่เราจะไม่สามารถ Forward ค่าจากการ Load memory ให้กับอินพุทของ ALU ในคำสั่งที่ติดกันได้เนื่องจากจะเป็นการ Forward ที่ย้อนเวลา ดังนั้นในการทำการ load และ มี Data Dependency ยังคงต้องหยุดไพพ์ลายน์ หรือเรียกว่า Pipeline Stall หรือมีชื่อเล่นว่า Bubble ซึ่งแสดงตัวอย่างในรูป 6.6

Figure 6.6: การ load และ มี Data Dependency ต้องทำการหยุดไพพ์ลายน์
\includegraphics[width=6in]{fig/Chapter_6/Figure_6.6.eps}



Vara Varavithya 2006-11-06