Pipelining & Hazards

เทคนิค Pipelining และปัญหาที่เกิดขึ้น

Pipelining & Hazards (สรุปด่วน)

1. Pipelining

คือเทคนิคที่ทำให้ CPU สามารถทำงานหลายคำสั่งพร้อมกันได้ (Instruction-Level Parallelism) โดยเปรียบเทียบเหมือน "สายพานในโรงงาน"

  • แบบเดิม (Non-Pipelined): ต้องรอให้คำสั่งที่ 1 ทำครบ 4 ขั้นตอน (Fetch, Decode, Execute, Store) ถึงจะเริ่มคำสั่งที่ 2 ได้
  • แบบ Pipelined: ขณะที่คำสั่งที่ 1 กำลัง Execute คำสั่งที่ 2 สามารถทำ Decode และคำสั่งที่ 3 สามารถทำ Fetch ได้พร้อมกันใน Clock Cycle เดียวกัน ทำให้ Throughput เพิ่มขึ้นมหาศาล

2. Pipeline Hazards (ปัญหาที่ทำให้สายพานสะดุด)

เมื่อคำสั่งทำงานซ้อนทับกัน อาจเกิดปัญหาที่ทำให้ Pipeline ต้องหยุดรอ (Stall / Bubble)

  1. Structural Hazard: Resource ไม่พอ (เช่น พยายามใช้ Memory ตัวเดียวกันในการอ่าน Instruction และอ่าน Data พร้อมกัน)
    • วิธีแก้: แยก Cache เป็น Instruction Cache และ Data Cache
  2. Data Hazard: คำสั่งที่ 2 ต้องใช้ผลลัพธ์จากคำสั่งที่ 1 แต่คำสั่งที่ 1 ยังประมวลผลไม่เสร็จ
    • วิธีแก้: ใช้เทคนิค Data Forwarding (ส่งผลลัพธ์ตรงจากวงจร ALU ข้ามกลับมาให้เลยโดยไม่ต้องรอเขียนลง Register)
  3. Control Hazard (Branch Hazard): เกิดจากการเจอคำสั่ง if-else หรือ jump ทำให้ CPU ไม่รู้ว่าคำสั่งถัดไปที่ต้อง Fetch คือเส้นทางไหน
    • วิธีแก้: ใช้เทคนิค Branch Prediction (เดาทางล่วงหน้า ถ้าเดาผิดค่อย Flush Pipeline ทิ้ง)

AI Knowledge Assistant

สวัสดีครับ! ผมคือ AI Assistant ประจำเว็บไซต์

คุณสามารถสอบถามข้อมูลด้าน Computer Science, Business, หรือ Finance ได้เลยครับ