โปรเซสเซอร์ RISC-V กำลังมองหาการรวมคำสั่ง (instruction fusion) เป็นวิธีการเชื่อมช่องว่างที่เกิดจากการขาดคำสั่ง conditional move แบบดั้งเดิมในสถาปัตยกรรม อย่างไรก็ตาม ปัญหาทางเทคนิคที่สำคัญได้เกิดขึ้นซึ่งอาจทำลายความพยายามในการปรับปรุงเหล่านี้ และอาจบังคับให้นักออกแบบฮาร์ดแวร์ต้องคิดใหม่เกี่ยวกับแนวทางการปรับปรุงประสิทธิภาพของ RISC-V
แตกต่างจาก ARM ที่มีคำสั่ง csel
ที่ทรงพลังซึ่งสามารถจัดการกับการดำเนินการแบบมีเงื่อนไขที่ซับซ้อนในคำสั่งเดียว RISC-V พึ่งพาส่วนขยายที่เรียบง่ายกว่าอย่าง Zicond และคาดหวังให้แกนโปรเซสเซอร์ใช้การรวมคำสั่งเพื่อรวมคำสั่งพื้นฐานหลายคำสั่งเข้าด้วยกันให้เป็นการดำเนินการที่มีประสิทธิภาพมากขึ้น แนวทางนี้ดูมีแนวโน้มที่ดีจนกระทั่งนักพัฒนาค้นพบความขัดแย้งพื้นฐานกับโมเดลความสอดคล้องของหน่วยความจำของ RISC-V
การจัดลำดับหน่วยความจำสร้างอุปสรรคต่อการรวมคำสั่ง
ปัญหาหลักอยู่ที่วิธีที่ RISC-V จัดการกับการพึ่งพิงการควบคุมและการดำเนินการหน่วยความจำ เมื่อโปรเซสเซอร์พยายามรวมคำสั่งแบรนช์แบบมีเงื่อนไขกับคำสั่งอื่นเพื่อสร้างการดำเนินการที่ไม่มีแบรนช์ มันจะเปลี่ยนแปลงการรับประกันการจัดลำดับหน่วยความจำที่แกนโปรเซสเซอร์อื่นคาดหวังจะเห็นโดยไม่ตั้งใจ ในโมเดลหน่วยความจำของ RISC-V คำสั่งแบรนช์ทุกคำสั่งจะสร้างการพึ่งพิงการควบคุมที่ส่งผลต่อการดำเนินการ store ทั้งหมดที่ตามมา แม้ว่าแบรนช์นั้นจะไม่ได้เปลี่ยนแปลงการไหลของโปรแกรมจริง ๆ
การอภิปรายในชุมชนเผยให้เห็นว่านี่ไม่ใช่เพียงความกังวลเชิงทฤษฎี ตามที่ผู้เชี่ยวชาญทางเทคนิคคนหนึ่งได้กล่าวไว้ คำสั่งที่รวมกันจะต้องรักษาคุณสมบัติที่คล้ายแบรนช์เพื่อหลีกเลี่ยงการละเมิดโมเดลหน่วยความจำ นี่หมายความว่าแนวทางการรวมคำสั่งแบบง่าย ๆ ที่ใช้สำเร็จในโปรเซสเซอร์ x86 และ ARM อาจไม่ทำงานโดยตรงในระบบ RISC-V
การพึ่งพิงการควบคุม: ความสัมพันธ์ที่การดำเนินการของคำสั่งหนึ่งขึ้นอยู่กับผลลัพธ์ของการดำเนินการแบบมีเงื่อนไข ซึ่งส่งผลต่อวิธีที่การดำเนินการหน่วยความจำสามารถจัดลำดับใหม่ได้
ผลกระทบของ Memory Model ต่อการรวม Instruction
การเปลี่ยนแปลงที่เป็นปัญหา:
- ก่อนการรวม: Branch สร้าง control dependency ที่ส่งผลต่อการ store ทั้งหมดที่ตามมา
- หลังการรวม: เหลือเพียง data/address dependencies การรับประกันลำดับที่อ่อนแอลง
- ผลลัพธ์: อาจเกิดการละเมิด memory model ที่มองเห็นได้จาก processor core อื่น ๆ
วิธีแก้ไขที่จำเป็น:
- Instruction ที่รวมแล้วต้องคงคุณสมบัติการจัดลำดับหน่วยความจำแบب branch ไว้
- อาจจำเป็นต้องใช้ fence operation เพิ่มเติม
- ต้องใช้ microarchitecture ที่ซับซ้อนมากขึ้นเพื่อจัดการข้อกำหนดด้านลำดับ
ส่วนขยายของผู้ขายเติมเต็มช่องว่าง
ในขณะที่ข้อกำหนดอย่างเป็นทางการของ RISC-V ต่อสู้กับความท้าทายนี้ ผู้ขายฮาร์ดแวร์ได้ดำเนินการด้วยตนเอง บริษัทต่าง ๆ กำลังใช้งานส่วนขยาย conditional move ของตนเอง รวมถึง xtheadcondmov
และ xmipscmove
ซึ่งให้ฟังก์ชันการทำงานที่นักพัฒนาหลายคนคาดหวังจะพบในสถาปัตยกรรมพื้นฐาน
การตอบสนองของชุมชนมีความหลากหลาย โดยนักพัฒนาบางคนตั้งคำถามว่าหลักการออกแบบของ RISC-V มีข้อจำกัดมากเกินไปหรือไม่ ความมุ่งมั่นของสถาปัตยกรรมในการจำกัดคำสั่งให้มีเพียงสองรีจิสเตอร์ต้นทางได้สร้างความซับซ้อนที่สถาปัตยกรรมคู่แข่งหลีกเลี่ยงได้โดยการสนับสนุนการดำเนินการแบบสามรีจิสเตอร์
การเปรียบเทียบ Extensions สำหรับ Conditional Move ใน RISC-V
Extension | ประเภท | คำอธิบาย |
---|---|---|
Zicond | อย่างเป็นทางการ | การดำเนินการ conditional zero แบบจำกัด ต้องใช้คำสั่งหลายตัว |
xtheadcondmov | เฉพาะผู้ผลิต | รองรับ conditional move แบบเต็มรูปแบบ ( T-Head ) |
xmipscmove | เฉพาะผู้ผลิต | รองรับ conditional move แบบเต็มรูปแบบ (บริษัท MIPS ) |
P extension | อย่างเป็นทางการที่กำลังพัฒนา | รวมคำสั่ง MVM, MVMN, MERGE สำหรับการดำเนินการแบบ packed |
ผลกระทบต่อประสิทธิภาพในแกนประเภทต่าง ๆ
ความท้าทายในการรวมคำสั่งส่งผลต่อการออกแบบโปรเซสเซอร์ที่แตกต่างกันในรูปแบบต่าง ๆ แกน RISC-V ที่เล็กและเรียบง่ายกว่าที่ไม่จัดลำดับการดำเนินการหน่วยความจำใหม่อาจไม่เผชิญกับปัญหาสำคัญ อย่างไรก็ตาม แกนที่ใหญ่และซับซ้อนกว่าที่พึ่งพาเทคนิคการปรับปรุงที่ซับซ้อนพบว่าตนเองต้องการความซับซ้อนของฮาร์ดแวร์เพิ่มเติมเพื่อจัดการกับข้อกำหนดของโมเดルหน่วยความจำ
ผู้ผลิตบางรายกำลังสำรวจแนวทางทางเลือก เช่น การแบ่งหน่วยดำเนินการเพื่อให้การกำหนดค่าพอร์ตรีจิสเตอร์ที่ยืดหยุ่น สิ่งนี้ช่วยให้แกนจัดการกับการดำเนินการแบบสองรีจิสเตอร์ที่เรียบง่ายได้อย่างมีประสิทธิภาพ ในขณะที่ยังคงสนับสนุนการดำเนินการแบบสามรีจิสเตอร์ที่ซับซ้อนกว่าเมื่อจำเป็น แม้ว่าจะต้องแลกกับความซับซ้อนในการจัดตารางเพิ่มเติม
มองไปข้างหน้า
ชุมชน RISC-V กำลังทำงานอย่างแข็งขันเพื่อหาแนวทางแก้ไข โดยส่วนขยายใหม่ ๆ อย่างส่วนขยาย P (packed integer SIMD) เริ่มรวมคำสั่ง select แบบสามรีจิสเตอร์ที่เหมาะสม อย่างไรก็ตาม แนวทางแก้ไขเหล่านี้ยังคงกระจัดกระจายอยู่ในเอกสารข้อกำหนดต่าง ๆ และยังไม่ได้รับการใช้งานอย่างแพร่หลาย
สถานการณ์นี้เน้นย้ำถึงความท้าทายที่กว้างขึ้นที่ RISC-V เผชิญขณะที่เติบโตจากโครงการทางวิชาการสู่สถาปัตยกรรมเชิงพาณิชย์ แม้ว่าปรัชญาการออกแบบของการรักษาสิ่งต่าง ๆ ให้เรียบง่ายจะมีประโยชน์ แต่บางครั้งก็สร้างความซับซ้อนที่ไม่คาดคิดเมื่อพยายามบรรลุประสิทธิภาพที่แข่งขันได้กับสถาปัตยกรรมที่มีอยู่แล้ว
สำหรับตอนนี้ ผู้ใช้งาน RISC-V ต้องสมดุลความปรารถนาในการปรับปรุงประสิทธิภาพกับข้อจำกัดที่กำหนดโดยโมเดลหน่วยความจำและหลักการออกแบบของสถาปัตยกรรมอย่างระมัดระวัง แนวทางแก้ไขขั้นสุดท้ายอาจต้องการการผ่อนคลายข้อจำกัดการออกแบบบางอย่างหรือการพัฒนาเทคนิคการรวมคำสั่งที่ซับซ้อนกว่าที่จัดการกับข้อกำหนดการจัดลำดับหน่วยความจำอย่างเหมาะสม
อ้างอิง: RISC-V Conditional Moves