ความเร็วคอมไพล์ของ Rust ที่เร็วขึ้นด้วยฟรอนต์เอนด์แบบขนานในเวอร์ชัน nightly
(blog.rust-lang.org)คอมไพล์ได้เร็วขึ้นด้วยฟรอนต์เอนด์แบบขนานของคอมไพเลอร์ Rust
- ฟรอนต์เอนด์ของคอมไพเลอร์ Rust สามารถลดเวลาคอมไพล์ได้อย่างมากด้วยการทำงานแบบขนาน
- ฟรอนต์เอนด์แบบขนานเป็นฟีเจอร์ทดลองที่สามารถลองใช้ได้ในคอมไพเลอร์ nightly ด้วยออปชัน
-Z threads=8 - มีแผนจะออกในคอมไพเลอร์รุ่นเสถียรภายในปี 2024
เวลาคอมไพล์และความขนาน
- เวลาคอมไพล์ของ Rust เป็นประเด็นที่ได้รับความสนใจมาอย่างต่อเนื่อง และคณะทำงานด้านประสิทธิภาพของคอมไพเลอร์ก็ได้ปรับปรุงประสิทธิภาพของคอมไพเลอร์อย่างต่อเนื่องมาหลายปี
- ในช่วง 10 เดือนแรกของปี 2023 เวลาคอมไพล์ลดลงเฉลี่ย 13% การใช้หน่วยความจำลดลง 15% และขนาดไบนารีลดลง 7%
- คอมไพเลอร์ถูกปรับแต่งมาอย่างมากแล้วจนยากที่จะหาจุดปรับปรุงใหม่ ๆ และความขนานยังคงเป็นโอกาสในการปรับปรุงที่มีผลมากแต่ทำได้ยาก
ความขนานระหว่างโปรเซสที่มีอยู่เดิม
- เมื่อคอมไพล์โปรแกรม Rust, Cargo จะรันหลายโปรเซสของ rustc แบบขนานเพื่อคอมไพล์หลายเครต
- การรันแบบขนานทำได้ดีเมื่อมีการพึ่งพาระหว่างเครตน้อย แต่ยิ่งมีการพึ่งพามาก ความขนานก็จะลดลง
ความขนานภายในโปรเซสที่มีอยู่เดิม: แบ็กเอนด์
- คอมไพเลอร์แบ่งออกเป็นฟรอนต์เอนด์และแบ็กเอนด์ โดยแบ็กเอนด์รับผิดชอบการสร้างโค้ด และ LLVM จัดการส่วนนี้แบบขนานอยู่แล้ว
- ฟรอนต์เอนด์ทำงานอย่างการพาร์สและการตรวจสอบชนิดข้อมูล แต่จนถึงสัปดาห์นี้ยังไม่สามารถทำงานแบบขนานได้
ความขนานภายในโปรเซสแบบใหม่: ฟรอนต์เอนด์
- ตอนนี้ฟรอนต์เอนด์สามารถใช้ Rayon เพื่อทำงานคอมไพล์แบบขนานละเอียดระดับย่อยได้แล้ว
- เมื่อเปิดใช้ฟรอนต์เอนด์แบบขนานและตั้งค่าให้ใช้ 8 เธรด จะเห็นได้ว่าเวลาทำงานของฟรอนต์เอนด์ลดลงอย่างมาก
การผสานภาพรวมทั้งหมด
- การคอมไพล์ Rust ได้รับประโยชน์จากความขนานระหว่างโปรเซสผ่าน Cargo และความขนานภายในโปรเซสของแบ็กเอนด์มาเป็นเวลานาน และตอนนี้ก็สามารถได้รับประโยชน์จากความขนานภายในโปรเซสของฟรอนต์เอนด์ได้แล้ว
- คอมไพเลอร์ใช้โปรโตคอล jobserver เพื่อจำกัดจำนวนเธรดที่สร้างขึ้นไม่ให้เกินจำนวนคอร์
วิธีใช้งาน
- คอมไพเลอร์ nightly ถูกปล่อยออกมาโดยเปิดใช้ฟรอนต์เอนด์แบบขนานแล้ว แต่โดยค่าเริ่มต้นจะทำงานในโหมดเธรดเดียว
- ผู้ใช้สามารถสลับไปใช้โหมดหลายเธรดได้ด้วยออปชัน
-Z threads
ผลกระทบต่อประสิทธิภาพ
- การรันฟรอนต์เอนด์แบบขนานในโหมดเธรดเดียวอาจทำให้เวลาคอมไพล์ช้าลง 0% ถึง 2% เมื่อเทียบกับเดิม
- ในโหมดหลายเธรด เวลาคอมไพล์อาจลดลงได้สูงสุด 50% แต่ผลลัพธ์จะแตกต่างกันไปตามลักษณะของโค้ดและการตั้งค่าการบิลด์
ความถูกต้อง
- ในโหมดเธรดเดียว คาดว่าจะมีความน่าเชื่อถือสูง
- ในโหมดหลายเธรดอาจยังมีบั๊กที่ทราบอยู่แล้วและเดดล็อกได้ แต่ไบนารีที่คอมไพเลอร์สร้างขึ้นควรเหมือนกันไม่ว่าจะใช้ฟรอนต์เอนด์แบบใด
ฟีดแบ็ก
- หากพบปัญหากับฟรอนต์เอนด์แบบขนาน สามารถตรวจสอบอิสชูที่มีป้ายกำกับ "WG-compiler-parallel" และส่งอิสชูใหม่ได้
งานในอนาคต
- ขณะนี้กำลังมีการปรับปรุงประสิทธิภาพของฟรอนต์เอนด์แบบขนานและแก้ไขบั๊กในโหมดมัลติเธรด
- มีแผนจะทำให้ออปชัน
-Z threadsเป็นฟีเจอร์เสถียร และให้รันในโหมดหลายเธรดโดยค่าเริ่มต้นในรุ่นเสถียรปี 2024
ความเห็นของ GN⁺
ประเด็นสำคัญที่สุดของบทความนี้คือ ฟรอนต์เอนด์ของคอมไพเลอร์ Rust รองรับการทำงานแบบขนานได้แล้ว ทำให้ลดเวลาคอมไพล์ลงได้อย่างมาก นี่เป็นข้อได้เปรียบสำคัญสำหรับนักพัฒนา Rust ในด้านความเร็วในการคอมไพล์ และจะช่วยสร้างสภาพแวดล้อมการพัฒนาที่มีประสิทธิภาพมากขึ้น การนำฟรอนต์เอนด์แบบขนานมาใช้ถือเป็นข่าวที่น่าตื่นเต้นสำหรับชุมชน Rust และมองได้ว่าเป็นผลลัพธ์ของความพยายามอย่างต่อเนื่องในการปรับปรุงประสิทธิภาพ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
-Z threads