Red Hat พัฒนาคอมไพเลอร์ MIR JIT

ที่หมวกแดง การพัฒนาอยู่ระหว่างดำเนินการ คอมไพเลอร์ JIT น้ำหนักเบาใหม่ MIRซึ่งช่วยให้มั่นใจถึงการดำเนินการของโค้ดที่ถูกแปลงก่อนหน้านี้เป็นตัวแทนระดับกลาง MIR (การเป็นตัวแทนภายในระดับกลาง เพื่อไม่ให้สับสนกับการแสดงระดับกลางอื่น MIR (IR ระดับกลาง) ใช้ในคอมไพเลอร์ Rust) โครงการนี้มีจุดมุ่งหมายเพื่อเป็นกรอบการทำงานสำหรับการใช้ล่ามและ JIT ที่รวดเร็วและกะทัดรัด รหัสโครงการเขียนด้วยภาษา C และ จัดจำหน่ายโดย ภายใต้ใบอนุญาต MIT

ในขั้นตอนการพัฒนาปัจจุบัน มีการเตรียมนักแปลในระดับกลางของ MIR ไว้ ภาษาซี และบิตโค้ด LLVM (Bitcode) แต่ในอนาคตมีการวางแผนที่จะใช้ความสามารถในการสร้าง MIR สำหรับ WebAssembly, Java bytecode, CIL (ภาษากลางทั่วไป), Rust และ C++ โครงการนี้กำลังได้รับการพัฒนาโดยหนึ่งในผู้พัฒนาเครื่องยนต์ JIT มจิตใช้ในรูบี้ ประการแรก JIT ที่ใช้ MIR ได้รับการวางแผนที่จะนำไปใช้ ครูบี้ и มรูบี้. ในอนาคตยังสามารถพอร์ต GCC เพื่อใช้ MIR ได้อีกด้วย

Red Hat พัฒนาคอมไพเลอร์ MIR JIT

รหัส MIR ระดับกลางสามารถนำเสนอในรูปแบบไบนารีและข้อความ (อ่านได้) รหัสนี้สามารถดำเนินการได้ในล่ามและสามารถสร้างรหัสเครื่องได้ (x86_64 ในแผน ARM64, PPC64 และ MIPS64) นอกจากนี้ยังสามารถทำการแปลงแบบย้อนกลับได้ - จาก MIR เป็น CIL, Java bytecode, WebAssembly และโค้ด C

ในบรรดาคุณสมบัติของ MIR การพิมพ์ที่เข้มงวด การรองรับโมดูลและฟังก์ชัน การจัดเตรียมชุดคำสั่งสำหรับการแปลงประเภท การเปรียบเทียบ การดำเนินการทางคณิตศาสตร์และตรรกะ การแยกสาขา ฯลฯ มีความโดดเด่น โมดูลซึ่งรวมถึงชุดของฟังก์ชันที่แปลงเป็นรูปแบบ MIR สามารถโหลดได้ในรูปแบบของไลบรารี และยังสามารถโหลดโค้ด C ภายนอกได้อีกด้วย

Red Hat พัฒนาคอมไพเลอร์ MIR JITRed Hat พัฒนาคอมไพเลอร์ MIR JIT

ข้อได้เปรียบที่สำคัญของการรันโค้ดระดับกลางใน JIT แทนที่จะคอมไพล์เป็นไฟล์ปฏิบัติการดั้งเดิมคือความสามารถในการสร้างไฟล์ขนาดกะทัดรัดที่สามารถดำเนินการได้โดยไม่ต้องสร้างใหม่บนสถาปัตยกรรมฮาร์ดแวร์ที่แตกต่างกัน (x86, ARM, PPC, MIPS) สำหรับสถาปัตยกรรมที่ไม่รองรับ โหมดการตีความจะพร้อมใช้งาน ซึ่งในกรณีของ MIR จะช้ากว่า JIT 6-10 เท่า

ข้อเสียของคอมไพเลอร์ JIT ที่มีอยู่
กล่าวกันว่า GCC และ LLVM มีมากเกินไป มีความเร็วในการคอมไพล์ต่ำ และยากต่อการเพิ่มประสิทธิภาพแบบรวมสำหรับภาษาโปรแกรมต่างๆ นักพัฒนา MIR พยายามแก้ไขปัญหาเหล่านี้
ปัญหาและเป้าหมายที่ตั้งไว้:

  • การรวบรวมใน MIR ควรเร็วกว่าใน GCC อย่างน้อย 100 เท่า
  • JIT สำหรับการดำเนินการ MIR ต้องมีขนาดกะทัดรัดมากและมีโค้ดประมาณ 15 บรรทัด
  • การดำเนินการ MIR โดยใช้ JIT ไม่ควรช้ากว่าประสิทธิภาพของไฟล์ปฏิบัติการที่คอมไพล์จากรหัส C เดียวกันใน GCC ไม่เกิน 30% (พร้อมการปรับให้เหมาะสม "-O2")
  • ขั้นตอนการเริ่มต้นก่อนที่การดำเนินการจริงจะเริ่มขึ้นควรใช้เวลาน้อยลง 100 เท่า
  • การแสดง MIR สำหรับ JIT ต้องเล็กกว่าไฟล์ปฏิบัติการที่คอมไพล์ใน GCC 100 เท่า

ในรูปแบบปัจจุบัน การใช้งาน MIR นั้นเหนือกว่าเป้าหมายที่ตั้งไว้ในตอนแรกหลายประการ: การทดสอบแสดงให้เห็นว่าประสิทธิภาพการคอมไพล์ใน MIR นั้นเร็วกว่า "GCC -O2" ถึง 178 เท่า ประสิทธิภาพการดำเนินการนั้นช้ากว่าโค้ดเนทีฟ 6% ขนาดโค้ด มีขนาดเล็กกว่า 144 เท่า การใช้งาน MIR JIT คือโค้ด 16 บรรทัด

Red Hat พัฒนาคอมไพเลอร์ MIR JIT

ที่มา: opennet.ru

เพิ่มความคิดเห็น