DeepMind โอเพ่นซอร์ส S6 ซึ่งเป็นไลบรารีที่มีการปรับใช้คอมไพเลอร์ JIT สำหรับ CPython

DeepMind ซึ่งเป็นที่รู้จักในด้านการพัฒนาปัญญาประดิษฐ์ได้เปิดซอร์สโค้ดของโครงการ S6 ซึ่งพัฒนาคอมไพเลอร์ JIT สำหรับภาษา Python โปรเจ็กต์นี้น่าสนใจเนื่องจากได้รับการออกแบบให้เป็นไลบรารีส่วนขยายที่ทำงานร่วมกับ CPython มาตรฐาน เพื่อให้มั่นใจว่าสามารถใช้งานร่วมกับ CPython ได้อย่างสมบูรณ์และไม่จำเป็นต้องแก้ไขโค้ดล่าม โครงการนี้ได้รับการพัฒนามาตั้งแต่ปี 2019 แต่น่าเสียดายที่ถูกยกเลิกและไม่มีการพัฒนาอีกต่อไป เนื่องจากการพัฒนาที่สร้างขึ้นอาจมีประโยชน์ในการปรับปรุง Python จึงตัดสินใจเปิดโค้ดโอเพ่นซอร์ส โค้ดคอมไพเลอร์ JIT เขียนด้วยภาษา C++ และอิงตาม CPython 3.7 และเป็นโอเพ่นซอร์สภายใต้ลิขสิทธิ์ Apache 2.0

ในแง่ของงานที่สามารถแก้ไขได้ S6 สำหรับ Python เปรียบเทียบกับเอ็นจิ้น V8 สำหรับ JavaScript ไลบรารีจะแทนที่ตัวจัดการล่าม bytecode ที่มีอยู่ ceval.c ด้วยการใช้งานของตัวเองซึ่งใช้การคอมไพล์ JIT เพื่อเพิ่มความเร็วในการดำเนินการ S6 ตรวจสอบว่าฟังก์ชันปัจจุบันได้รับการคอมไพล์แล้วหรือไม่ และหากเป็นเช่นนั้น จะดำเนินการโค้ดที่คอมไพล์แล้ว และหากไม่เป็นเช่นนั้น จะรันฟังก์ชันในโหมดการตีความโค้ดไบต์ ซึ่งคล้ายกับล่าม CPython ในระหว่างการตีความ จะนับจำนวนคำสั่งที่ดำเนินการและการเรียกใช้ที่เกี่ยวข้องกับฟังก์ชันที่กำลังประมวลผล หลังจากถึงเหตุการณ์สำคัญแล้ว กระบวนการคอมไพล์จะเริ่มขึ้นเพื่อเร่งความเร็วโค้ดที่ถูกเรียกใช้งานบ่อยครั้ง การคอมไพล์จะดำเนินการเป็นการแสดง Strongjit ระดับกลาง ซึ่งหลังจากการปรับให้เหมาะสมแล้ว จะถูกแปลงเป็นคำสั่งเครื่องของระบบเป้าหมายโดยใช้ไลบรารี asmjit

ขึ้นอยู่กับลักษณะของปริมาณงาน S6 ภายใต้สภาวะที่เหมาะสมแสดงให้เห็นถึงความเร็วในการดำเนินการทดสอบที่เพิ่มขึ้นถึง 9.5 เท่า เมื่อเทียบกับ CPython ทั่วไป เมื่อรันชุดการทดสอบ Richards 100 รอบ จะสังเกตเห็นความเร็วเพิ่มขึ้น 7 เท่า และเมื่อรันการทดสอบ Raytrace ซึ่งเกี่ยวข้องกับการคำนวณทางคณิตศาสตร์จำนวนมาก จะสังเกตเห็นความเร็วเพิ่มขึ้น 3-4.5 เท่า

งานที่ยากต่อการเพิ่มประสิทธิภาพโดยใช้ S6 ได้แก่ โปรเจ็กต์ที่ใช้ C API เช่น NumPy รวมถึงการดำเนินการที่เกี่ยวข้องกับความจำเป็นในการตรวจสอบประเภทของค่าจำนวนมาก นอกจากนี้ยังพบประสิทธิภาพต่ำสำหรับการเรียกใช้ฟังก์ชันที่ใช้ทรัพยากรจำนวนมากเพียงครั้งเดียวเนื่องจากการใช้งานล่าม Python ที่ไม่ได้รับการปรับให้เหมาะสมของ S6 (การพัฒนายังไม่ถึงขั้นตอนของการปรับโหมดการตีความให้เหมาะสม) ตัวอย่างเช่น ในการทดสอบ Unpack Sequence ซึ่งจะคลายชุดอาร์เรย์/ทูเปิลชุดใหญ่ ด้วยการเรียกเพียงครั้งเดียว จะมีการชะลอตัวสูงสุดถึง 5 เท่า และด้วยการเรียกแบบวน ประสิทธิภาพจะเป็น 0.97 จาก CPython

ที่มา: opennet.ru

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