วันอาทิตย์ที่ 14 สิงหาคม พ.ศ. 2554

Pipeline

Pipeline คือ เทคนิคทำให้คำสั่งหลายๆ คำสั่งทำงานพร้อมๆ กัน แต่ละส่วนจะทำงานให้เสร็จในส่วนของมัน แต่ละส่วนจะทำงานต่างกัน แต่ละส่วนเรียกว่า "Pipe Stage" และแต่ละส่วนจะทำงานต่อเนื่องเป็นทอด ๆ เขาเลยเปรียบเทียบ pipeline กับสายพานเครื่องจักรไงครับ เวลาที่ใช้เคลื่อนที่จากส่วนหนึ่ง (Pipe Stage) ไปยังอีกส่วนหนึ่ง เราเรียกว่า "Machine Cycle" เนืองจากทุกๆ ส่วนทำงานพร้อมกันดังนั้น ค่า Machine Cycle จะดูจากเวลาที่ใช้ใน Pipe Stage ที่ช้าที่สุด

...เป้า หมายสูงสุดของ Pipeline ก็คือ ต้องการให้ความยาวของ Pipeline แต่ละขั้นตอนเกิดความสมดุล ถ้าขั้นตอนแต่ละขั้นตอนสมดุลกันแล้วเวลาที่ใช้ต่อ 1 คําสั่งใน Pipeline จะเท่ากับการใช้ Pipeline จะส่งผลทําให้เวลาการทํางานต่อคําสั่ง 1 คําสั่งลดลง

...ดังนั้น ถ้ามีจำนวน Pipeline เยอะๆ ก็จะช่วยให้การประมวลผลคำสั่งได้เร็วยิ่งขึ้นไงครับ แต่ทั้งนี้ก็ขึ้นอยู่กับการออกแบบ Pipeline และองค์ประกอบอื่นๆ ด้วยครับ เพราะว่าคำอธิบายการทำงานมันก็เป็นแค่ทฤษฎีครับ

จริงๆ มันก็คือ การออกแบบขั้นตอนการประมวลต่อ 1 คำสั่งให้ใช้เวลาน้อยที่สุดอ่ะครับ จะได้ไม่เปลือง Clock และถ้ามีหลายๆ Pipeline มันก็จะช่วยประมวลผลพร้อมๆ กัน ทำให้เพิ่มความเร็วในการประมวลได้ครับ ไม่จำเป็นต้องเพิ่มความถี่สัญญาณนาฬิกา (Clock) ให้สูงเสมอไปไงครับ

pipeline จะแบ่งการทำงาน 1 งาน ออกเป็นงานย่อยแล้วทำพร้อมๆกัน เช่นการทำงานของ CPU แบ่งเป็นสมมติว่าแบ่งเป็น 5 ขั้นตอน
1. อ่านคำสั่ง
2. แปลคำสั่ง
3. ประมวลผล
4. อ่านข้อมูลจากหน่วยความจำ
5. เขียนค่ากลับไปยังรีจิสเตอร์
พอ อ่านคำสั่งที่ไปแล้วก็จะเริ่มแปลคำสั่งในขณะที่แปลคำสั่งก็อ่านคำสั่งต่อไป เลย (เหมือนที่คุณ PSNR อธิบายแหละ) สมมติว่าแต่ละงานใช้เวลาอย่างละ 1 วินาที ถ้าทำทีละอย่าง 1 คำสั่งจะใช้เวลา 5 วินาที แต่พอใช้ pipeline จะทำให้โดยรวมแล้ว(ไม่นับ 4 วินาทีแรก) ทำได้ 1 คำสั่งใน 1 วินาที ทีนี้มันมีปัญหาตรงที่ว่าการทำงานแต่ละงานบางครั้ง(จริงๆแล้วส่วนใหญ่)มัน ไม่ได้ทำคำสั่งตามลำดับ 1 2 3 .. เช่นการเขียนโปรแกรมโดยใช้เงื่อนไข IF คือพอ pipeline ประมวลผลเสร็จสรุปได้ว่าต้องกระโดดไปทำงานที่คำสั่งอื่น

ไม่มีความคิดเห็น:

แสดงความคิดเห็น