ย้อนมอง 2 ปีของคอมไพเลอร์ JIT ใน CPython: สถานะปัจจุบัน ข้อที่น่าเสียดาย และอนาคต
(fidget-spinner.github.io)นี่คือบทความย้อนมองและวิเคราะห์อย่างตรงไปตรงมาจากนักพัฒนาที่มีส่วนร่วมกับการพัฒนาคอมไพเลอร์ JIT (Just-In-Time) ของ CPython มานานกว่า 2 ปี
บทความนี้ถ่ายทอดสถานะของโปรเจ็กต์จากประสบการณ์ตลอด 2–3 ปีที่ผ่านมา โดยผู้พัฒนาที่มีบทบาทสำคัญต่อคอมไพเลอร์ JIT ของ CPython โดยเฉพาะในส่วนของการปรับแต่งให้เหมาะสม (optimizer)
จุดที่เป็นบวก: การเติบโตที่ขับเคลื่อนโดยชุมชนและการถ่ายทอดความรู้
- การสร้างชุมชน: ในช่วงแรกมีนักพัฒนาเพียงไม่กี่คนที่ขับเคลื่อนโปรเจ็กต์ แต่ตอนนี้แม้ทีม Faster CPython ของ Microsoft จะยุบไปแล้ว โปรเจ็กต์ก็ยังดำเนินต่อในรูปแบบที่ขับเคลื่อนโดยชุมชน Savannah, Tomáš, Diego และผู้มีส่วนร่วมหลักคนใหม่ ๆ ได้เข้ามาร่วมงาน ซึ่งเป็นความพยายามที่ตั้งใจทำเพื่อความยั่งยืนระยะยาวของโปรเจ็กต์ JIT
- JIT ที่เรียนรู้ได้: JIT ถูกออกแบบมาให้ผู้มีส่วนร่วมหน้าใหม่ที่ไม่มีความเชี่ยวชาญด้านคอมไพเลอร์ก็สามารถเรียนรู้และมีส่วนร่วมได้ไม่ยาก ตัวอย่างเช่น การเลือกใช้แนวทาง 'tracing JIT' ทำให้สามารถทำความเข้าใจได้ผ่านการวิเคราะห์แบบสถิตของ basic block เดียว แทนที่จะต้องรับมือกับ control-flow graph ทั้งชุดที่ซับซ้อน จึงช่วยลดอุปสรรคในการเริ่มต้น
จุดที่น่าเสียดาย: ประสิทธิภาพและการรายงานข่าวที่ผิดพลาด - ปัญหาด้านประสิทธิภาพ: พูดกันตรง ๆ JIT ของ CPython 3.13 ยังช้าอยู่ เมื่อบิลด์ด้วยคอมไพเลอร์รุ่นใหม่ (Clang 20) หลายกรณี JIT กลับช้ากว่าอินเทอร์พรีเตอร์ และจะได้ประสิทธิภาพใกล้เคียงกันก็ต่อเมื่อใช้คอมไพเลอร์รุ่นเก่า (GCC 11) เท่านั้น ส่วนเวอร์ชัน 3.14 ก็ยังไม่มีการยกระดับประสิทธิภาพแบบก้าวกระโดด เพราะมุ่งเน้นไปที่การสอนผู้มีส่วนร่วมหน้าใหม่และขยายการวิเคราะห์ชนิดข้อมูลที่มีอยู่ ผู้เขียนเชื่อว่านี่เป็นการตัดสินใจที่ถูกต้องกว่า หากมองความสำคัญของการสร้างคนในระยะยาวเหนือกว่าการเร่งประสิทธิภาพในระยะสั้น
- การรายงานข่าวที่ไม่ถูกต้อง: ในช่วงแรก สื่อรายงานว่า JIT เร็วกว่าอินเทอร์พรีเตอร์ "2-9%" แต่ความจริงไม่ใช่เช่นนั้น ตัวเลขนี้มาจากการเปรียบเทียบกับ 'tier 2 interpreter' ที่ช้ามาก ซึ่งรันตัวแทนกลาง (IR) ของ JIT แทนที่จะเป็นอินเทอร์พรีเตอร์ CPython จริง ๆ ผลคือผู้ใช้เกิดความคาดหวังต่อ JIT แบบผิด ๆ และในความเป็นจริงหลายคนกลับเจอประสิทธิภาพที่แย่ลง ผู้เขียนบอกว่านี่ทำให้เขารู้สึกผิดหวังอย่างมาก
บทสรุปและมุมมองต่ออนาคต
ผู้เขียนยังคงมอง JIT ในแง่บวก ชุมชนที่แข็งแรงได้ก่อตัวขึ้นแล้ว และตอนนี้ก็มีงานปรับแต่งประสิทธิภาพหลายอย่างกำลังดำเนินไปพร้อมกัน ความพยายามเหล่านี้คาดว่าจะช่วยให้เวอร์ชัน 3.14 มีความเร็วเพิ่มขึ้นระดับเปอร์เซ็นต์เลขหลักเดียวเมื่อวัดด้วยค่าเฉลี่ยเรขาคณิตของชุดเบนช์มาร์ก
ผู้เขียนปิดท้ายด้วยการบอกว่า "ถ้ามีปัญหาที่ 'น่าเกลียด (ugly)' จริง ๆ ผมคงเลิกทำงาน JIT ไปแล้ว" พร้อมแสดงมุมมองเชิงบวกว่า JIT จะยังคงพัฒนาต่อไปได้ด้วยพลังของชุมชน
ยังไม่มีความคิดเห็น