โปรเซสเซอร์ซูเปอร์สเกลาร์


โปรเซสเซอร์แบบซูเปอร์สเกลาร์ (หรือโปรเซสเซอร์แบบหลายคำสั่ง[ 1 ] ) คือCPUที่ใช้รูปแบบการประมวลผลแบบขนานที่เรียกว่าการประมวลผลแบบขนานระดับคำสั่งภายในโปรเซสเซอร์เดียว[ 2 ]แตกต่างจากโปรเซสเซอร์แบบสเกลาร์ซึ่งสามารถประมวลผลคำสั่งได้มากที่สุดเพียงคำสั่งเดียวต่อรอบสัญญาณนาฬิกา โปรเซสเซอร์แบบซูเปอร์สเกลาร์สามารถประมวลผลหรือเริ่มประมวลผลคำสั่งได้มากกว่าหนึ่งคำสั่งในระหว่างรอบสัญญาณนาฬิกา โดยการส่งคำสั่งหลายคำสั่งไปยังหน่วยประมวลผล ต่างๆ บนโปรเซสเซอร์พร้อมกัน ดังนั้นจึงช่วยให้มีปริมาณงาน (จำนวนคำสั่งที่สามารถประมวลผลได้ในหน่วยเวลา ซึ่งอาจน้อยกว่า 1 ก็ได้) มากกว่าที่จะเป็นไปได้ในอัตราสัญญาณนาฬิกา ที่กำหนด แต่ละหน่วยประมวลผลไม่ใช่โปรเซสเซอร์แยกต่างหาก (หรือคอร์ หากโปรเซสเซอร์เป็นโปรเซสเซอร์แบบหลายคอร์ ) แต่เป็นทรัพยากรการประมวลผลภายใน CPU เดียว เช่นหน่วยคำนวณและตรรกะ
แม้ว่าซีพียูแบบซูเปอร์สเกลาร์โดยทั่วไปจะ มีการประมวลผลแบบ ไปป์ไลน์ ด้วย แต่การประมวลผลแบบซูเปอร์สเกลาร์และการประมวลผลแบบไปป์ไลน์นั้นถือเป็นเทคนิคการเพิ่มประสิทธิภาพที่แตกต่างกัน แบบแรก (ซูเปอร์สเกลาร์) จะประมวลผลคำสั่งหลายคำสั่งพร้อมกันโดยใช้หน่วยประมวลผลหลายหน่วย ในขณะที่แบบหลัง (ไปป์ไลน์) จะประมวลผลคำสั่งหลายคำสั่งในหน่วยประมวลผลเดียวกันพร้อมกันโดยการแบ่งหน่วยประมวลผลออกเป็นหลายขั้นตอน ในภาพ "ไปป์ไลน์ซูเปอร์สเกลาร์แบบง่าย" การดึงคำสั่งสองคำสั่งพร้อมกันคือการประมวลผลแบบซูเปอร์สเกลาร์ และการดึงคำสั่งอีกสองคำสั่งถัดไปก่อนที่คำสั่งคู่แรกจะถูกเขียนกลับเข้าไปคือการประมวลผลแบบไปป์ไลน์
เทคนิคซูเปอร์สเกลาร์นั้นโดยทั่วไปมักเกี่ยวข้องกับลักษณะเฉพาะหลายประการ (ภายในซีพียูที่กำหนด):
- คำสั่งต่างๆ จะถูกส่งมาจากกระแสคำสั่งตามลำดับ
- ซีพียูจะตรวจสอบความสัมพันธ์ของข้อมูลระหว่างคำสั่งต่างๆ แบบไดนามิกในระหว่างการทำงานของโปรแกรม (ต่างจากการตรวจสอบด้วยซอฟต์แวร์ในระหว่างการคอมไพล์ )
- ซีพียูสามารถประมวลผลคำสั่งได้หลายคำสั่งต่อรอบสัญญาณนาฬิกา
ประวัติศาสตร์
โปรเซสเซอร์ CDC 6600ของSeymour Crayจากปี 1964 แม้ว่าจะไม่สามารถออกคำสั่งหลายคำสั่งต่อรอบได้ แต่ก็มักถูกอ้างถึงว่าเป็นอิทธิพลในช่วงแรกของโปรเซสเซอร์แบบซูเปอร์สเกลาร์สมัยใหม่ เนื่องจากความสามารถในการประมวลผลคำสั่งพร้อมกันผ่านหน่วยการทำงานหลายหน่วย โปรเซสเซอร์IBM System/360 Model 91 จากปี 1967 เป็นอีกหนึ่งอิทธิพลในช่วงแรกที่นำเสนอการประมวลผลแบบไม่เรียงลำดับ โดยเป็นผู้บุกเบิกการใช้อัลกอริทึมของ Tomasulo [ 3 ] ไมโครโปรเซสเซอร์ Intel i960 CA (1989) [ 4 ] AMD 29000 - series 29050 (1990) และ Motorola MC88110 (1991) [ 5 ]เป็นไมโครโปรเซสเซอร์แบบซูเปอร์สเกลาร์ชิปเดี่ยวเชิงพาณิชย์ตัวแรก ไมโครโปรเซสเซอร์ RISCเช่นที่กล่าวมา เป็นไมโครโปรเซสเซอร์กลุ่มแรกที่มีการประมวลผลแบบซูเปอร์สเกลาร์ เนื่องจากสถาปัตยกรรม RISC ช่วยลดจำนวนทรานซิสเตอร์และพื้นที่บนชิป ซึ่งสามารถนำไปใช้เพื่อรวมหน่วยประมวลผลหลายหน่วย และความสม่ำเสมอของชุดคำสั่งแบบดั้งเดิมเอื้อต่อการประมวลผลแบบซูเปอร์สเกลาร์ (นี่คือเหตุผลที่การออกแบบ RISC เร็วกว่า การออกแบบ CISCในช่วงทศวรรษ 1980 และ 1990 และการประมวลผลแบบหลายคำสั่งนั้นซับซ้อนกว่ามากเมื่อคำสั่งมีความยาวบิตแปรผัน)
ยกเว้นซีพียูที่ใช้ในแอปพลิเคชันที่ใช้พลังงานต่ำระบบฝังตัวและ อุปกรณ์ที่ใช้พลังงานจาก แบตเตอรี่ซีพียูอเนกประสงค์เกือบทั้งหมดที่พัฒนาขึ้นตั้งแต่ประมาณปี 1998 เป็นต้นมาล้วนเป็นแบบซูเปอร์สเกลาร์
โปรเซสเซอร์P5 Pentiumเป็นโปรเซสเซอร์ x86 แบบ superscalar ตัวแรก โปรเซสเซอร์Nx586 , P6 Pentium ProและAMD K5เป็นหนึ่งในดีไซน์แรกๆ ที่ถอดรหัส คำสั่ง x86แบบอะซิงโครนัสเป็น ลำดับ ไมโครโอเปอเร ชันแบบไดนามิก คล้ายไมโครโค้ด ก่อนที่จะดำเนินการจริงบนสถาปัตยกรรมไมโคร แบบ superscalar ซึ่งเปิดโอกาสให้มีการจัดตารางเวลาแบบไดนามิกสำหรับ คำสั่ง บางส่วน ที่บัฟเฟอร์ไว้ และช่วยให้สามารถดึงเอาความขนานออกมาได้มากขึ้นเมื่อเทียบกับวิธีการที่เข้มงวดกว่าที่ใช้ใน P5 Pentium ที่เรียบง่ายกว่า นอกจากนี้ยังทำให้การประมวลผลแบบคาดการณ์ ง่ายขึ้น และอนุญาตให้ใช้ความถี่สัญญาณนาฬิกาที่สูงขึ้นเมื่อเทียบกับดีไซน์ต่างๆ เช่นCyrix 6x86 ขั้นสูง
จากสเกลาร์ไปเป็นซูเปอร์สเกลาร์
โปรเซสเซอร์ที่ง่ายที่สุดคือโปรเซสเซอร์แบบสเกลาร์ คำสั่งแต่ละคำสั่งที่ประมวลผลโดยโปรเซสเซอร์แบบสเกลาร์โดยทั่วไปจะจัดการกับข้อมูลหนึ่งหรือสองรายการในแต่ละครั้ง ในทางตรงกันข้าม คำสั่งแต่ละคำสั่งที่ประมวลผลโดยโปรเซสเซอร์แบบเวกเตอร์จะทำงานพร้อมกันกับข้อมูลหลายรายการ เปรียบเทียบได้กับความแตกต่างระหว่าง เลขคณิต แบบสเกลาร์และแบบเวกเตอร์ โปรเซสเซอร์แบบซูเปอร์สเกลาร์เป็นการผสมผสานระหว่างทั้งสองแบบ คำสั่งแต่ละคำสั่งประมวลผลข้อมูลหนึ่งรายการ แต่มีหน่วยประมวลผลหลายหน่วยภายใน CPU แต่ละตัว ดังนั้นจึงสามารถประมวลผลข้อมูลหลายรายการพร้อมกันได้
การออกแบบซีพียูแบบซูเปอร์สเกลาร์เน้นการปรับปรุงความแม่นยำของตัวส่งคำสั่งและทำให้สามารถใช้งานหน่วยประมวลผลหลายหน่วยได้อย่างต่อเนื่องตลอดเวลา ซึ่งมีความสำคัญมากขึ้นเรื่อยๆ เนื่องจากจำนวนหน่วยประมวลผลเพิ่มขึ้น ในขณะที่ซีพียูซูเปอร์สเกลาร์รุ่นแรกๆ จะมีALU สองตัวและ FPUหนึ่งตัวแต่การออกแบบในภายหลัง เช่นPowerPC 970 นั้นประกอบด้วย ALU สี่ตัว, FPU สองตัว และหน่วย SIMD สองหน่วย หากตัวส่งคำสั่งไม่มีประสิทธิภาพในการป้อนคำสั่งให้กับทุกหน่วยเหล่านี้ ประสิทธิภาพของระบบก็จะแย่ไปกว่าการออกแบบที่เรียบง่ายกว่าและราคาถูกกว่า
โดยทั่วไปแล้ว โปรเซสเซอร์แบบซูเปอร์สเกลาร์จะสามารถประมวลผลได้มากกว่าหนึ่งคำสั่งต่อรอบการทำงานของเครื่องแต่การประมวลผลหลายคำสั่งพร้อมกันเพียงอย่างเดียวไม่ได้ทำให้สถาปัตยกรรมนั้นเป็นแบบซูเปอร์สเกลาร์เสมอไป เนื่องจาก สถาปัตยกรรม แบบไปป์ไลน์มัลติโปรเซสเซอร์หรือมัลติคอร์ก็สามารถทำได้เช่นกัน แต่ใช้วิธีการที่แตกต่างกัน
ในซีพียูแบบซูเปอร์สเกลาร์ ตัวจัดการคำสั่งจะอ่านคำสั่งจากหน่วยความจำและตัดสินใจว่าคำสั่งใดบ้างที่สามารถประมวลผลแบบขนานได้ โดยจะส่งคำสั่งเหล่านั้นไปยังหน่วยประมวลผลหลายหน่วยที่อยู่ในซีพียูตัวเดียว ดังนั้น จึงอาจมองได้ว่าโปรเซสเซอร์แบบซูเปอร์สเกลาร์มีไปป์ไลน์แบบขนานหลายชุด ซึ่งแต่ละชุดจะประมวลผลคำสั่งพร้อมกันจากเธรดคำสั่งเดียว
ซีพียูแบบซูเปอร์สเกลาร์สมัยใหม่ส่วนใหญ่ยังมีตรรกะในการจัดลำดับคำสั่งใหม่เพื่อพยายามหลีกเลี่ยงการหยุดชะงักของไปป์ไลน์และเพิ่มการประมวลผลแบบขนาน
ข้อจำกัด
ประสิทธิภาพที่เพิ่มขึ้นจากเทคนิคซูเปอร์สเกลาร์นั้นถูกจำกัดด้วยสามประเด็นหลัก:
- ระดับของความขนานโดยเนื้อแท้ในกระแสคำสั่ง (คำสั่งที่ต้องการทรัพยากรการคำนวณเดียวกันจาก CPU)
- ความซับซ้อนและต้นทุนด้านเวลาของตรรกะการตรวจสอบการพึ่งพาและวงจรการเปลี่ยนชื่อรีจิสเตอร์
- การประมวลผลคำสั่งสาขา
โปรแกรมไบนารีที่สามารถเรียกใช้งานได้ในปัจจุบันมีระดับความขนานภายในที่แตกต่างกัน ในบางกรณี คำสั่งต่างๆ ไม่ขึ้นต่อกันและสามารถดำเนินการพร้อมกันได้ ในกรณีอื่นๆ คำสั่งเหล่านั้นขึ้นต่อกัน กล่าวคือ คำสั่งหนึ่งส่งผลกระทบต่อทรัพยากรหรือผลลัพธ์ของคำสั่งอื่น คำสั่งเหล่านั้นa = b + c; d = e + fสามารถทำงานแบบขนานได้เนื่องจากผลลัพธ์ไม่ขึ้นอยู่กับการคำนวณอื่นๆ อย่างไรก็ตาม คำสั่งเหล่านั้นa = b + c; b = e + fอาจไม่สามารถทำงานแบบขนานได้ ขึ้นอยู่กับลำดับที่คำสั่งเสร็จสมบูรณ์ขณะที่เคลื่อนที่ผ่านหน่วยต่างๆ
แม้ว่าลำดับคำสั่งอาจไม่มีการพึ่งพาซึ่งกันและกันระหว่างคำสั่ง แต่ซีพียูแบบซูเปอร์สเกลาร์ก็ยังต้องตรวจสอบความเป็นไปได้นั้นอยู่ดี เนื่องจากไม่มีการรับประกันอื่นใด และหากตรวจไม่พบการพึ่งพาซึ่งกันและกันจะทำให้ได้ผลลัพธ์ที่ไม่ถูกต้อง
ไม่ว่ากระบวนการผลิตเซมิคอนดักเตอร์ จะก้าวหน้าเพียงใด หรือความเร็วในการสลับสัญญาณจะเร็วแค่ไหน ก็ยังมีข้อจำกัดในทางปฏิบัติอยู่ดีว่าสามารถส่งคำสั่งพร้อมกันได้กี่คำสั่ง แม้ว่าความก้าวหน้าของกระบวนการผลิตจะช่วยให้มีหน่วยประมวลผล (เช่น ALU) มากขึ้นเรื่อยๆ แต่ภาระในการตรวจสอบความสัมพันธ์ของคำสั่งก็จะเพิ่มขึ้นอย่างรวดเร็ว เช่นเดียวกับความซับซ้อนของวงจรการเปลี่ยนชื่อรีจิสเตอร์เพื่อลดความสัมพันธ์บางอย่าง โดยรวมแล้ว การใช้พลังงานความซับซ้อน และต้นทุนความล่าช้าของเกต จะจำกัดความเร็วที่เพิ่มขึ้นอย่างมากในระดับซูเปอร์สเกลาร์
อย่างไรก็ตาม แม้จะมีตรรกะการตรวจสอบการพึ่งพาที่รวดเร็วอย่างไม่มีที่สิ้นสุดบนซีพียูแบบซูเปอร์สเกลาร์ทั่วไป แต่ถ้ากระแสคำสั่งเองมีการพึ่งพาจำนวนมาก ก็จะจำกัดความเร็วที่เพิ่มขึ้นได้เช่นกัน ดังนั้น ระดับของความขนานโดยธรรมชาติในกระแสโค้ดจึงเป็นข้อจำกัดประการที่สอง
ทางเลือกอื่นๆ
โดยรวมแล้ว ข้อจำกัดเหล่านี้กระตุ้นให้เกิดการวิจัยเกี่ยวกับการเปลี่ยนแปลงทางสถาปัตยกรรมทางเลือกอื่นๆ เช่นคำสั่งยาวมาก (VLIW), การประมวลผลคำสั่งแบบขนานอย่างชัดเจน (EPIC), การประมวล ผลแบบมัลติเธรดพร้อมกัน (SMT) และการประมวลผลแบบมัลติคอร์
ด้วย VLIW งานที่ยุ่งยากในการตรวจสอบการพึ่งพาของตรรกะฮาร์ดแวร์ในระหว่างการทำงานจะถูกกำจัดออกไปและมอบหมายให้คอมไพเลอร์ ทำ หน้าที่แทน การประมวลผลคำสั่งแบบขนานอย่างชัดเจน (EPIC) ก็คล้ายกับ VLIW แต่มีคำสั่งดึงข้อมูลแคชล่วงหน้าเพิ่มเติม
การประมวลผลแบบมัลติเธรดพร้อมกัน (Simultaneous Multithreading หรือ SMT) เป็นเทคนิคที่ช่วยเพิ่มประสิทธิภาพโดยรวมของโปรเซสเซอร์แบบซูเปอร์สเกลาร์ SMT อนุญาตให้เธรดการทำงานอิสระหลายเธรดทำงานพร้อมกัน เพื่อใช้ทรัพยากรที่สถาปัตยกรรมโปรเซสเซอร์สมัยใหม่มีให้ได้อย่างมีประสิทธิภาพมากขึ้น การที่เธรดเหล่านี้เป็นอิสระหมายความว่าคำสั่งของเธรดหนึ่งสามารถทำงานนอกลำดับและ/หรือทำงานพร้อมกันกับคำสั่งของเธรดอื่นได้ นอกจากนี้ เธรดอิสระหนึ่งเธรดจะไม่ทำให้เกิดปัญหา pipeline bubble ในกระแสโค้ดของเธรดอื่น เช่น เนื่องจากการกระโดด (branch)
โปรเซสเซอร์แบบซูเปอร์สเกลาร์แตกต่างจากโปรเซสเซอร์แบบมัลติคอร์ตรงที่หน่วยประมวลผลหลายหน่วยนั้นไม่ใช่โปรเซสเซอร์ทั้งหมด โปรเซสเซอร์เดียวประกอบด้วยหน่วยประมวลผลย่อยที่ละเอียดกว่า เช่นALU , ตัวคูณจำนวนเต็ม , ตัวเลื่อนจำนวนเต็ม, FPUเป็นต้น อาจมีหลายเวอร์ชันของแต่ละหน่วยประมวลผลเพื่อให้สามารถประมวลผลคำสั่งจำนวนมากพร้อมกันได้ ซึ่งแตกต่างจากโปรเซสเซอร์แบบมัลติคอร์ที่ประมวลผลคำสั่งจากหลาย เธรดพร้อมกัน โดยแต่ละ เธรดประมวลผลหนึ่งหน่วย(เรียกว่า "คอร์") นอกจากนี้ยังแตกต่างจากโปรเซสเซอร์แบบไปป์ไลน์ซึ่งคำสั่งหลายคำสั่งสามารถอยู่ในขั้นตอนการประมวลผลต่างๆ พร้อมกันได้ในลักษณะสาย การผลิต
เทคนิคทางเลือกต่างๆ ไม่ได้ขัดแย้งกันเอง—สามารถนำมาใช้ร่วมกันได้ (และมักจะใช้กัน) ในโปรเซสเซอร์ตัวเดียว ดังนั้นจึงเป็นไปได้ที่จะมีซีพียูแบบมัลติคอร์ โดยแต่ละคอร์เป็นโปรเซสเซอร์อิสระที่มีไปป์ไลน์แบบขนานหลายชุด ซึ่งแต่ละไปป์ไลน์เป็นแบบซูเปอร์สเกลาร์ โปรเซสเซอร์บางตัวยังมีคุณสมบัติเวกเตอร์ อีกด้วย
ดูเพิ่มเติม
- การดำเนินการอย่างกระตือรือร้น
- ไฮเปอร์เธรดดิ้ง
- การทำงานแบบมัลติเธรดพร้อมกัน
- การดำเนินการที่ไม่เป็นไปตามลำดับ
- บัฟเฟอร์ชั้นวางของ
- การดำเนินการเชิงเก็งกำไร
- การล็อกซอฟต์แวร์ซึ่งเป็นปัญหาในระบบมัลติโปรเซสเซอร์ คล้ายกับปัญหาการพึ่งพาตรรกะบนซูเปอร์สเกลาร์
- ซูเปอร์เธรดดิ้ง
ลิงก์ภายนอก
- การดำเนินการอย่างกระตือรือร้น / เส้นทางคู่ / เส้นทางหลายทางโดย มาร์ค สโมเธอร์แมน