การรวมคำสั่งของ RISC-V เผชิญกับความท้าทายจากโมเดลหน่วยความจำที่อาจทำลายการปรับปรุงประสิทธิภาพ

ทีมชุมชน BigGo
การรวมคำสั่งของ RISC-V เผชิญกับความท้าทายจากโมเดลหน่วยความจำที่อาจทำลายการปรับปรุงประสิทธิภาพ

โปรเซสเซอร์ 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