การประมวลผลคำสั่งแบบสายท่อ
ในวิศวกรรมคอมพิวเตอร์ การประมวลผลคำสั่งแบบสายท่อ (อังกฤษ: instruction pipelining) เป็นเทคนิคสำหรับการนำการทำงานแบบคู่ขนานระดับคำสั่งไปทำให้เกิดผลภายในหน่วยประมวลผลเดียว การประมวลผลแบบสายท่อพยายามที่จะทำให้ทุกส่วนของหน่วยประมวลผลยุ่งอยู่กับคำสั่งบางอย่าง โดยการแบ่งคำสั่งที่เข้ามาออกเป็นชุดของขั้นตอนตามลำดับ (ซึ่งก็คือ "สายท่อ" (pipeline) ที่เป็นชื่อของเทคนิคนี้) ซึ่งดำเนินการโดยหน่วยประมวลผลที่แตกต่างกัน พร้อมกับการประมวลผลส่วนต่าง ๆ ของคำสั่งเหล่านั้นไปพร้อม ๆ กัน
แนวคิด
[แก้]ในคอมพิวเตอร์ที่ประมวลผลแบบสายท่อ คำสั่งจะเดินทางผ่านหน่วยประมวลผลกลาง (ซีพียู) เป็นหลายขั้นตอน ตัวอย่างเช่น อาจมีหนึ่งขั้นตอนสำหรับแต่ละขั้นของวัฏจักรฟอนนอยมันน์ ได้แก่ การดึงคำสั่ง การดึงตัวถูกดำเนินการ การทำคำสั่ง และการเขียนผลลัพธ์ คอมพิวเตอร์ที่ประมวลผลแบบสายท่อมักจะมี "รีจิสเตอร์สายท่อ" (pipeline register) อยู่หลังแต่ละขั้นตอน ซึ่งทำหน้าที่จัดเก็บข้อมูลจากคำสั่งและการคำนวณ เพื่อให้ลอจิกเกตของขั้นตอนถัดไปสามารถทำขั้นตอนต่อไปได้
การจัดเรียงแบบนี้ช่วยให้ซีพียูสามารถประมวลผลคำสั่งได้เสร็จสิ้นหนึ่งคำสั่งต่อหนึ่งรอบสัญญาณนาฬิกา โดยเป็นเรื่องปกติที่ขั้นตอนที่เป็นเลขคู่จะทำงานที่ขอบด้านหนึ่งของสัญญาณนาฬิกาแบบคลื่นสี่เหลี่ยม ในขณะที่ขั้นตอนที่เป็นเลขคี่จะทำงานที่อีกขอบหนึ่ง ซึ่งทำให้ปริมาณงานของซีพียูสูงกว่าคอมพิวเตอร์แบบหลายรอบสัญญาณนาฬิกาที่อัตราสัญญาณนาฬิกาเดียวกัน แต่ก็อาจเพิ่มเวลาแฝงเนื่องจากภาระค่าใช้จ่ายอื่นที่เพิ่มขึ้นของกระบวนการประมวลผลแบบสายท่อเอง นอกจากนี้ แม้ว่าลอจิกอิเล็กทรอนิกส์จะมีขีดจำกัดความเร็วสูงสุดที่แน่นอน คอมพิวเตอร์ที่ประมวลผลแบบสายท่อสามารถทำให้เร็วขึ้นหรือช้าลงได้โดยการเปลี่ยนแปลงจำนวนขั้นตอนในสายท่อ เมื่อมีจำนวนขั้นตอนมากขึ้น แต่ละขั้นตอนก็จะทำงานน้อยลง ดังนั้นขั้นตอนนั้น ๆ ก็จะมีความล่าช้าจากลอจิกเกตน้อยลง และสามารถทำงานที่อัตราสัญญาณนาฬิกาที่สูงขึ้นได้
คอมพิวเตอร์รุ่นที่ประมวลผลแบบสายท่อมักจะเป็นทางเลือกที่ประหยัดที่สุด เมื่อพิจารณาจากต้นทุนที่วัดเป็นจำนวนลอจิกเกตต่อคำสั่งต่อวินาที ในแต่ละช่วงเวลา คำสั่งหนึ่งจะอยู่ในขั้นตอนของสายท่อเพียงขั้นตอนเดียวเท่านั้น และโดยเฉลี่ยแล้ว ขั้นตอนของสายท่อจะมีต้นทุนต่ำกว่าคอมพิวเตอร์แบบหลายรอบสัญญาณนาฬิกา นอกจากนี้ เมื่อสร้างมาอย่างดี ลอจิกส่วนใหญ่ของคอมพิวเตอร์ที่ประมวลผลแบบสายท่อก็จะถูกใช้งานเกือบตลอดเวลา ในทางตรงกันข้าม คอมพิวเตอร์ที่ประมวลผลแบบไม่เป็นลำดับ (out of order) มักจะมีลอจิกจำนวนมากที่ไม่ได้ถูกใช้งานในช่วงเวลาใดเวลาหนึ่ง การคำนวณที่คล้ายกันยังแสดงให้เห็นว่าคอมพิวเตอร์ที่ประมวลผลแบบสายท่อมักจะใช้ พลังงานต่อคำสั่งน้อยกว่าอีกด้วย
อย่างไรก็ตาม คอมพิวเตอร์ที่ประมวลผลแบบสายท่อมักจะมีความซับซ้อนและมีค่าใช้จ่ายสูงกว่าคอมพิวเตอร์แบบหลายรอบสัญญาณนาฬิกาที่เทียบเท่ากัน ซึ่งคอมพิวเตอร์ที่ประมวลผลแบบสายท่อโดยปกติแล้วจะมีลอจิกเกต รีจิสเตอร์ และหน่วยควบคุมที่ซับซ้อนกว่า นอกจากนี้ในทำนองเดียวกัน คอมพิวเตอร์ที่ประมวลผลแบบสายท่ออาจจะใช้ พลังงานโดยรวมมากกว่า แม้ว่าจะใช้พลังงานต่อคำสั่งน้อยกว่าก็ตาม ส่วนซีพียูที่ประมวลผลแบบไม่เป็นลำดับมักจะสามารถทำคำสั่งได้จำนวนมากขึ้นต่อวินาที เนื่องจากสามารถทำหลาย ๆ คำสั่งได้ในเวลาเดียวกัน
ในคอมพิวเตอร์ที่ประมวลผลแบบสายท่อ หน่วยควบคุมจะทำหน้าที่จัดการให้การไหลของงานเริ่มต้น ดำเนินต่อไป และหยุดลงตามที่โปรแกรมสั่งการ ข้อมูลคำสั่งมักจะถูกส่งผ่านรีจิสเตอร์สายท่อจากขั้นตอนหนึ่งไปยังขั้นตอนถัดไป โดยมีส่วนของลอจิกควบคุมที่แยกออกมาสำหรับแต่ละขั้นตอน หน่วยควบคุมยังรับประกันว่าคำสั่งในแต่ละขั้นตอนจะไม่ ส่งผลเสียต่อการทำงานของคำสั่งในขั้นตอนอื่น ๆ ตัวอย่างเช่น หากสองขั้นตอนจำเป็นต้องใช้ข้อมูลชุดเดียวกัน ลอจิกควบคุมจะทำให้มั่นใจว่าการใช้งานเหล่านั้นจะเกิดขึ้นตามลำดับที่ถูกต้อง
เมื่อทำงานได้อย่างมีประสิทธิภาพ คอมพิวเตอร์แบบที่ประมวลผลแบบสายท่อจะมีคำสั่งอยู่ในแต่ละขั้นตอน ซึ่งหมายความว่าคอมพิวเตอร์ดังกล่าวกำลังทำงานกับคำสั่งเหล่านั้นทั้งหมดในเวลาเดียวกัน และสามารถประมวลผลคำสั่งได้เสร็จสิ้นประมาณหนึ่งคำสั่งต่อหนึ่งรอบสัญญาณนาฬิกา แต่เมื่อโปรแกรมเปลี่ยนไปใช้ลำดับคำสั่งที่แตกต่างกัน บางครั้งสายท่ออาจจะต้องละทิ้งข้อมูลที่อยู่ระหว่างการประมวลผลและเริ่มต้นใหม่ ซึ่งสภาวะนี้เรียกว่า "การหยุดชะงัก" (stall)
การออกแบบส่วนใหญ่ของคอมพิวเตอร์ที่ประมวลผลแบบสายท่อจะมุ่งเน้นไปที่การป้องกันการแทรกสอดระหว่างขั้นตอนต่าง ๆ และการลดการหยุดชะงักที่จะเกิดขึ้น