LLVM Creator พัฒนาภาษาโปรแกรม Mojo ใหม่

Chris Lattner ผู้ก่อตั้งและหัวหน้าสถาปนิกของ LLVM และผู้สร้างภาษาโปรแกรม Swift และ Tim Davis อดีตหัวหน้าโครงการ AI ของ Google เช่น Tensorflow และ JAX ได้เปิดตัวภาษาโปรแกรม Mojo ใหม่ที่รวมการใช้งานง่ายสำหรับ R&D และการสร้างต้นแบบที่รวดเร็วเข้ากับ ความเหมาะสมสำหรับผลิตภัณฑ์ขั้นสุดท้ายที่มีประสิทธิภาพสูง อย่างแรกทำได้โดยการใช้ไวยากรณ์ที่คุ้นเคยของภาษา Python และอย่างที่สองเกิดจากความสามารถในการคอมไพล์เป็นรหัสเครื่อง กลไกสำหรับการจัดการหน่วยความจำที่ปลอดภัย และการใช้เครื่องมือสำหรับการเร่งความเร็วของฮาร์ดแวร์ในการคำนวณ

โปรเจกต์นี้เน้นการใช้งานเพื่อพัฒนาแมชชีนเลิร์นนิง แต่นำเสนอเป็นภาษาใช้งานทั่วไปที่ขยายขีดความสามารถของภาษาไพธอนด้วยการเขียนโปรแกรมระบบ และเหมาะสำหรับงานที่หลากหลาย ตัวอย่างเช่น ภาษาใช้ได้กับพื้นที่ต่างๆ เช่น การประมวลผลประสิทธิภาพสูง การประมวลผลข้อมูล และการแปลงข้อมูล คุณลักษณะที่น่าสนใจของ Mojo คือความสามารถในการระบุสัญลักษณ์อิโมจิ "🔥" เป็นส่วนขยายสำหรับไฟล์โค้ด (เช่น "helloworld.🔥") นอกเหนือจากส่วนขยายข้อความ ".mojo"

ขณะนี้ภาษาอยู่ระหว่างการพัฒนาอย่างเข้มข้นและมีเพียงอินเทอร์เฟซออนไลน์สำหรับการทดสอบเท่านั้น แอสเซมบลีที่แยกจากกันเพื่อรันบนระบบโลคัลได้รับการสัญญาว่าจะเผยแพร่ในภายหลัง หลังจากได้รับคำติชมเกี่ยวกับการทำงานของสภาพแวดล้อมเว็บแบบโต้ตอบ ซอร์สโค้ดสำหรับคอมไพเลอร์ JIT และการพัฒนาอื่น ๆ ที่เกี่ยวข้องกับโครงการมีการวางแผนที่จะเปิดหลังจากการออกแบบสถาปัตยกรรมภายในเสร็จสิ้น (รูปแบบการพัฒนาของต้นแบบการทำงานหลังประตูปิดคล้ายกับระยะเริ่มต้นของการพัฒนา LLVM, Clang และสวิฟต์) เนื่องจากไวยากรณ์ของ Mojo ใช้ Python และระบบประเภทใกล้เคียงกับ C/C++ จึงมีแผนในอนาคตที่จะพัฒนาชุดเครื่องมือเพื่ออำนวยความสะดวกในการแปลโปรเจ็กต์ที่มีอยู่ที่เขียนด้วย C/C++ และ Python เป็น Mojo ตลอดจนพัฒนา โครงการไฮบริดที่รวมรหัส Python และ Mojo

โครงการได้รับการออกแบบให้เกี่ยวข้องกับทรัพยากรฮาร์ดแวร์ของระบบที่แตกต่างกันที่มีอยู่ในระบบในการคำนวณ ตัวอย่างเช่น สามารถใช้ GPU, ตัวเร่งความเร็วการเรียนรู้ของเครื่องเฉพาะ และคำสั่งการประมวลผลแบบเวกเตอร์ (SIMD) เพื่อเรียกใช้แอปพลิเคชัน Mojo และประมวลผลแบบขนานได้ เหตุผลสำหรับการพัฒนาชุดย่อยแยกต่างหากของภาษา Python แทนที่จะเข้าร่วมการปรับให้เหมาะสมของ CPython ที่มีอยู่นั้น อ้างว่าเป็นการเน้นการคอมไพล์ การรวมความสามารถในการเขียนโปรแกรมระบบ และการใช้สถาปัตยกรรมภายในที่แตกต่างกันโดยพื้นฐานซึ่งทำให้โค้ดสามารถ ดำเนินการบน GPU และตัวเร่งฮาร์ดแวร์ต่างๆ ในขณะเดียวกัน ผู้พัฒนา Mojo ตั้งใจที่จะยึดความเข้ากันได้กับ CPython ให้ได้มากที่สุด

Mojo สามารถใช้ได้ทั้งในโหมดการตีความ JIT และสำหรับการคอมไพล์เป็นไฟล์ปฏิบัติการ (AOT, ล่วงหน้า) คอมไพเลอร์มีเทคโนโลยีที่ทันสมัยในตัวสำหรับการเพิ่มประสิทธิภาพอัตโนมัติ การแคช และการคอมไพล์แบบกระจาย ข้อความต้นฉบับในภาษา Mojo จะถูกแปลงเป็นรหัสระดับกลางระดับต่ำ MLIR (การเป็นตัวแทนระดับกลางหลายระดับ) ซึ่งพัฒนาโดยโครงการ LLVM และมีคุณสมบัติเพิ่มเติมสำหรับเพิ่มประสิทธิภาพการประมวลผลกราฟการไหลของข้อมูล คอมไพเลอร์ช่วยให้คุณใช้แบ็กเอนด์ต่างๆ ที่รองรับ MLIR เพื่อสร้างรหัสเครื่อง

การใช้กลไกฮาร์ดแวร์เพิ่มเติมเพื่อเพิ่มความเร็วในการคำนวณทำให้สามารถบรรลุประสิทธิภาพที่เหนือกว่าแอปพลิเคชัน C / C ++ ด้วยการคำนวณอย่างเข้มข้น ตัวอย่างเช่น เมื่อทดสอบแอปพลิเคชันเพื่อสร้างชุด Mandelbrot แอปพลิเคชัน Mojo ที่คอมไพล์แล้วเมื่อดำเนินการในระบบคลาวด์ AWS (r7iz.metal-16xl) จะเร็วกว่าการใช้งาน C ++ ถึง 6 เท่า (0.03 วินาที เทียบกับ 0.20 วินาที .) รวมถึงเร็วกว่าแอปพลิเคชัน Python ถึง 35 เท่าโดยใช้สต็อก CPython 3.10.9 (0.03 วินาทีเทียบกับ 1027 วินาที) และเร็วขึ้น 1500 เท่าโดยใช้ PYPY (0.03 วินาทีเทียบกับ 46.1 วินาที)

เมื่อประเมินประสิทธิภาพในด้านการแก้ปัญหาการเรียนรู้ของเครื่อง สแต็ก AI ของ Modular Inference Engine ที่เขียนด้วยภาษา Mojo เมื่อเทียบกับโซลูชันที่ใช้ไลบรารี TensorFlow นั้นเร็วกว่า 3 เท่าบนระบบที่มี Intel โปรเซสเซอร์เมื่อประมวลผลโมเดลภาษา เร็วขึ้น 6.4 เท่าเมื่อเรียกใช้โมเดลการสร้างคำแนะนำ และเร็วขึ้น 2.1 เท่าเมื่อทำงานกับโมเดลสำหรับประมวลผลข้อมูลภาพ เมื่อใช้โปรเซสเซอร์ AMD อัตราขยายเมื่อใช้ Mojo คือ 3.2, 5 และ 2.2 เท่าและเมื่อใช้โปรเซสเซอร์ ARM - 5.3, 7.5 และ 1.7 เท่าตามลำดับ โซลูชันที่ใช้ PyTorch ล้าหลัง Mojo 1.4, 1.1 และ 1.5 เท่าบน Intel CPU, 2.1, 1.2 และ 1.5 เท่าบน CPU AMD และ 4, 4.3 และ 1.3 เท่าบน ARM CPU

LLVM Creator พัฒนาภาษาโปรแกรม Mojo ใหม่

ภาษารองรับการพิมพ์แบบสแตติกและคุณสมบัติที่ปลอดภัยต่อหน่วยความจำระดับต่ำ ซึ่งชวนให้นึกถึงคุณสมบัติ Rust เช่น การติดตามอายุการใช้งานอ้างอิง และตัวตรวจสอบการยืมแบบผันแปร (ตัวตรวจสอบการยืม) นอกจากวิธีการทำงานที่ปลอดภัยด้วยพอยน์เตอร์แล้ว ภาษายังมีคุณสมบัติสำหรับการทำงานระดับต่ำ เช่น สามารถเข้าถึงหน่วยความจำได้โดยตรงในโหมดที่ไม่ปลอดภัยโดยใช้ประเภทพอยน์เตอร์ เรียกใช้คำสั่ง SIMD แต่ละรายการ หรือเข้าถึงส่วนขยายของฮาร์ดแวร์ เช่น เป็น TensorCores และ AMX

LLVM Creator พัฒนาภาษาโปรแกรม Mojo ใหม่

เพื่อลดความซับซ้อนในการแยกโค้ด Python แบบคลาสสิกและแบบเพิ่มประสิทธิภาพสำหรับฟังก์ชันที่มีการกำหนดประเภทที่ชัดเจนสำหรับตัวแปรทั้งหมด ขอเสนอให้ใช้คีย์เวิร์ด "fn" แยกต่างหากแทน "def" ในทำนองเดียวกันสำหรับคลาส หากคุณต้องการแพ็คข้อมูลแบบคงที่ในหน่วยความจำ ณ เวลาคอมไพล์ (เช่นใน C) แทนที่จะใช้ "คลาส" คุณสามารถใช้ประเภท "struct" นอกจากนี้ยังเป็นไปได้ที่จะนำเข้าโมดูลในภาษา C / C ++ เช่น หากต้องการนำเข้าฟังก์ชัน cos จากไลบรารีคณิตศาสตร์ คุณสามารถระบุ "จาก "math.h" นำเข้า cos"

ที่มา: opennet.ru

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