นี่เป็นคำถามที่ตรงไปตรงมาพร้อมคำตอบที่ซับซ้อนมาก
ก่อนอื่นพื้นหลังบางส่วน
การออกแบบ VLSI ในโลกแห่งความจริงเป็นฟิลด์ทางเทคนิคที่ยอดเยี่ยมซึ่งมีการเปลี่ยนแปลงสมดุลของการแลกเปลี่ยน เวลาที่วงจรใช้ในการคำนวณคำตอบนั้นเป็นเพียงปัจจัยสำคัญเท่านั้น นอกจากนี้ยังมีการวาดกำลังและพื้นที่ทางกายภาพรวมถึงปัจจัยอีกหลายอย่างที่เปิดเผยว่าวงจรที่คุณกำลังออกแบบนั้นเป็นแบบอะนาล็อก (เช่นการต้านทานลวดความจุของกาฝาก) ทั้งหมดนี้มีความสำคัญในวงจรจริงและอาจส่งผลกระทบต่อการออกแบบที่เลือก
ประการที่สองคุณต้องพิจารณาวงจรชีวิตทั้งหมดของโครงการ adder ที่เหมาะสมสำหรับการทำให้เกิด VLSI อาจไม่เหมาะสมสำหรับการทำให้เกิด FPGA หากการออกแบบกำลังจะผ่านขั้นตอนการทดสอบบน FPGA ... คุณจะได้ภาพ
ประการที่สามไม่ adder ทุกทำเท่ากัน บน CPU ทั่วไปมีส่วนเสริมมากมายที่แขวนอยู่รอบ ๆ ซึ่งทำงานต่างกัน อาจมีจำนวนเต็ม ALU หลายตัวซึ่งเป็นเลขลอยตัว mantissa adder ซึ่งเป็น adder ที่ทำการคำนวณที่อยู่ adder ที่คำนวณเป้าหมายสาขาและอื่น ๆ นั่นไม่นับส่วนเสริมที่ประหยัดได้ที่คุณพบในหน่วยคูณที่ทันสมัย แต่ละคนมีลักษณะและข้อ จำกัด ของตัวเอง
ตัวอย่างเช่นการคำนวณเป้าหมายสาขามักเกี่ยวข้องกับการเพิ่มค่าคงที่ขนาดเล็กให้กับคำเต็มซึ่งแนะนำการออกแบบ adder ที่แตกต่างจากที่เพิ่มคำสองคำเข้าด้วยกัน ในทำนองเดียวกันการเพิ่มจุดลอยต้องใช้ขั้นตอนการปัดเศษการโพสต์นอกจากนี้ซึ่งอาจใช้เวลาน้อยกว่ารอบดังนั้นจึงไม่มีเหตุผลที่คุณไม่สามารถขโมยส่วนที่เหลือของรอบเพื่อเสร็จสิ้นการเพิ่ม
สุดท้ายและที่สำคัญที่สุดคือผู้เล่นรายใหญ่ (เช่น Intel, AMD, NVIDIA) มีรายละเอียดในระดับต่ำเกี่ยวกับรายละเอียดการใช้งานอย่างชัดเจนเนื่องจากพวกเขาคิดว่าพวกเขาสามารถรับกระดาษและ / หรือสิทธิบัตรได้ ถึงอย่างนั้นคุณก็มักจะไม่สามารถมั่นใจได้ว่าสิ่งที่พวกเขาทำจริง ๆ โดยไม่มีวิศวกรรมย้อนกลับ
ต้องบอกว่ามีบางสิ่งที่เรารู้
สิ่งสำคัญที่คุณต้องรู้คือเมธอดแบบพกพา - อัลเลเฮดคือแบบเอกสารสำเร็จรูปและไม่จำเป็นต้องมีวิธีการในตัวเอง การเปรียบเทียบอาจเป็นไปตามลำดับที่นี่
หากคุณคิดเกี่ยวกับคลาสอัลกอริทึมคุณอาจได้เรียนรู้อัลกอริทึมการเรียงลำดับมากมายเช่นการเรียงแบบด่วนการเรียงแบบผสานการเรียงลำดับการแทรกและอื่น ๆ ในโลกแห่งความเป็นจริงถ้าการเรียงลำดับเป็นคอขวดของการปฏิบัติงานวิศวกรที่ดีจะคิดว่าสิ่งเหล่านี้เป็นหน่วยการสร้างแบบดั้งเดิมที่สามารถสร้างการเรียงลำดับ "ของจริง" ได้
อัลกอริทึมการจัดเรียงจากไลบรารีมาตรฐาน GNU C ++ ใช้การจัดเรียงอย่างรวดเร็วโดยใช้การเรียงการแทรกเมื่อช่วงเวลามีขนาดเล็กพอ อย่างไรก็ตามหากหลังจากผ่านไปสองสามครั้งดูเหมือนว่าการแบ่งพาร์ติชันแบบเร็วจะมีพฤติกรรมทางพยาธิวิทยามันจะกลับไปที่การจัดเรียงฮีป นั่นคืออัลกอริทึมการเรียงลำดับสามแบบที่แตกต่างกันเพื่อสร้างความแข็งแกร่งทางอุตสาหกรรม
เช่นเดียวกับวงจรบวก ยกตัวอย่างเช่นเป็นที่ทราบกันว่าหน่วย Pentium 4 จำนวนเต็มใช้ตัวบวก Han-Carlson ซึ่งเป็นการผสมผสานระหว่าง Kogge-Stone และ Brent-Kung (ฮัน - คาร์ลสันเป็นที่น่าสนใจเป็นพิเศษเพราะมันเป็น "จุดหวาน" ในการแลกเปลี่ยนระหว่างความล่าช้าในการแพร่กระจายและพื้นที่ตายซึ่งยังค่อนข้างมีประสิทธิภาพด้านพลังงาน) มันมักจะจ่ายเงินเพื่อใช้หลายวิธีผสมกัน
"บริสุทธิ์" ตัวเสริมแบบพกพา lookahead ยังคงเป็นบรรทัดฐานในวงจรสังเคราะห์ (เช่นถ้าคุณป้อนตัวดำเนินการ Verilog "+" ให้กับ Cadence หรือ Synopsys) เมื่อพูดถึงการออกแบบมือซีพียูระดับไฮเอนด์รุ่นใหม่ เอ็นจิ้นการดำเนินการตามคำสั่งดูเหมือนจะเคลื่อนไปสู่การออกแบบที่แตกต่างกันเล็กน้อยสำหรับหน่วยจำนวนเต็ม
Adders เก็งกำไรเป็นวงจรที่มีความล่าช้าในการแพร่กระจายต่ำมาก แต่ทำงานได้อย่างถูกต้องบางครั้ง (95% ของเวลาเป็นเรื่องปกติ) และเป็นไปได้ที่จะบอกด้วยตรรกะน้อยมากว่า adder เก็งกำไรส่งกลับผลลัพธ์ที่ถูกต้องหรือไม่ ดังนั้นความคิดคือการเพิ่มการเก็งกำไรและครึ่งหนึ่งของการเพิ่มแบบพกพา - อัลเลเฮดขนานในหนึ่งรอบ หากบวก adder กลับคำตอบที่ถูกต้องคำสั่งจะทำ มิฉะนั้นให้หยุดการต่อท่อและทำอีกครึ่งหนึ่งของการเติมที่ถูกต้อง
เนื่องจากคุณรู้ว่าเส้นทางที่ช้าจะใช้เวลาสองรอบนักออกแบบสามารถใช้พื้นที่มากขึ้นและวิธีการประหยัดพลังงานแม้ว่ามันจะช้าเกินไปสำหรับการใช้งานทั่วไป