กูเกิลนำเสนอปัญญาประดิษฐ์ MLGO นำมาช่วยคอมไพลเลอร์ให้ออปติไมซ์โค้ดได้ดีขึ้นกว่าเดิม ทั้งในแง่ประสิทธิภาพการทำงาน และขนาดโค้ดที่ได้หลังจากคอมไพล์แล้ว
การปรับปรุงขนาดโค้ดนั้นอาศัยการย้ายโค้ดจากในฟังก์ชั่นออกมาภายนอก (inlining) ที่ก่อนหน้านี้คอมไพล์เลอร์ก็มีตัวออปติไมซ์แบบ heuristic ที่ค้นหาแนวทางการทำ inlining ให้ได้โค้ดขนาดเล็กที่สุดอยู่แล้ว แต่กระบวนการออปติไมซ์นั้นซับซ้อนและปรับปรุงเพิ่มเติมได้ยาก การใช้ MLGO เข้าไปช่วยออปติไมซ์เป็นการฝึกปัญญาประดิษฐ์แบบ reinforce learning (RL) ที่ปัญญาประดิษฐ์จะได้รางวัลจากตัดสินใจทำ inlining แล้วโค้ดเล็กลง ผที่ได้จากการคอมไพล์โค้ดภายในของกูเกิลเองสามารถลดขนาดโค้ดได้ 3-7%
อีกส่วนหนึ่งคือการจัดเรียงการใช้งาน registry ในซีพียูที่มีจำนวนจำกัด และเมื่อต้องพิจารณาตัวแปรต่างๆ ก็ต้องโหลดข้อมูลเข้าออกจาก registry เรื่อยๆ การจัดเรียงโค้ดโดยคำถึงนึงการใช้งาน registry ทำให้ซอฟต์แวร์โดยรวมประสิทธิภาพดีขึ้นได้ ในกรณีนี้ MLGO สามารถออปติไมซ์ประสิทธิภาพโค้ดภายในได้ 0.3-1.5%
ทีมงานคาดว่าตัวปัญญาประดิษ์สามารถออกแบบให้ดีขึ้น และออปติไมซ์โค้ดได้มากกว่าเดิม ขณะที่ในอนาคตก็อาจจะพัฒนา MLGO ไปใช้งานในการออปติไมซ์งานส่วนอื่นๆ ของคอมไพล์เลอร์เพิ่มเติม
ที่มา - Google AI Blog
Comments
เขียน code แบบนี้ควร optimize ตัวเอง
ก่อนที่จะให้ compiler optimize ให้
ในห้องเรียน: แยก code การทำงานออกมาเป็น ฟังก์ชันๆ จะได้เข้าใจง่าย
นักเรียนที่ส่งงาน:
คือเขียนให้คนอ่านอาจจะต้องเขียนเยอะหน่อย แต่เวลา compile อาจจะให้ compiler optimize ให้ดีขึ้น ผมคิดว่าอย่างนี้นะ คือเขียนสั้นไปต้องใช้พลังสมองคิดเยอะ หน่อย ฮ่าๆ
ผมว่า Programmer ส่วนใหญ่ก็อยากเขียนแบบนี้หละครับ แต่มันยากและไม่ค่อยเข้าใจเท่า Code ยาวๆ ที่เห็นภาพการทำงานชัดเจนกว่า Code สั้นๆ
ความล้มเหลว คือจุดเริ่มต้นสู่ความหายนะ มีผลกระทบมากกว่าแค่เสียเงิน เวลา อนาคต และทรัพยากรที่เสียไป - จงอย่าล้มเหลว
ถ้าเจอโจทย์ครั้งแรก ตั้งเป้าแค่ run ผ่าน, bugfree ก่อนได้ครับ
แต่ปัญหาอย่างนึงคือ เขียน run ผ่าน, test ผ่าน คือจบเลย ไม่กลับมาดูที่ตนเองเขียนไว้
ผมก็มีบ้างเขียนอะไรไม่ efficient แบบนี้ แต่ผมกลับมาดู code ตัวเองและ refactor เสมอ
พอทำบ่อยๆ เวลาเจอโจทย์ มันก็จะมี pattern ลอยขึ้นมาเอง
เริ่มจากแก้ magic number ออกก่อนเลย 555
MLGO : printf (ฉันปวดหัวกับเธอมากนะ), มาก ๆ);