LLVM Creator 開發新的 Mojo 編程語言

LLVM 的創始人兼首席架構師、Swift 編程語言的創造者 Chris Lattner 和 Tensorflow 和 JAX 等谷歌 AI 項目的前負責人 Tim Davis 介紹了一種新的 Mojo 編程語言,它結合了研發的易用性和快速原型製作與適用於高性能終端產品。 第一個是通過使用熟悉的 Python 語言語法實現的,第二個是由於能夠編譯為機器代碼、安全內存管理機制以及使用計算硬件加速工具。

該項目專注於機器學習開發,但作為一種通用語言呈現,它通過系統編程擴展了 Python 語言的功能,適用於廣泛的任務。 例如,該語言適用於高性能計算、數據處理和轉換等領域。 Mojo 的一個有趣功能是除了文本擴展名“.mojo”之外,還可以將表情符號“🔥”指定為代碼文件的擴展名(例如,“helloworld.🔥”)。

目前,該語言正在緊鑼密鼓的開發中,僅提供在線界面進行測試。 在收到有關交互式 Web 環境工作的反饋後,承諾將在稍後發佈在本地系統上運行的單獨程序集。 項目相關的編譯器、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 語言中的源文本被轉換為由 LLVM 項目開發的低級中間代碼 MLIR(多級中間表示),並提供用於優化數據流圖處理的附加功能。 編譯器允許您使用支持 MLIR 的各種後端來生成機器代碼。

使用額外的硬件機制來加速計算,可以實現在密集計算下超過 C/C++ 應用程序的性能。 例如,在測試生成 Mandelbrot 集的應用程序時,編譯後的 Mojo 應用程序在 AWS 雲 (r7iz.metal-16xl) 中執行時,比 C++ 實現快 6 倍(0.03 秒對 0.20 秒.),並且比使用普通 CPython 35 的 Python 應用程序快 3.10.9 倍(0.03 秒對 1027 秒),使用 PYPY 快 1500 倍(0.03 秒對 46.1 秒)。

在評估解決機器學習問題領域的性能時,與基於 TensorFlow 庫的解決方案相比,用 Mojo 語言編寫的模塊化推理引擎 AI 堆棧在配備英特爾處理器的系統上速度提高了 3 倍處理器在處理語言模型時,在執行推薦生成模型時快 6.4 倍,在處理視覺信息模型時快 2.1 倍。 使用 AMD 處理器時,使用 Mojo 時增益分別為 3.2、5 和 2.2 倍,而使用 ARM 處理器時增益分別為 5.3、7.5 和 1.7 倍。 基於 PyTorch 的解決方案在 Intel CPU 上落後 Mojo 1.4、1.1 和 1.5 倍,在 AMD CPU 上落後 2.1、1.2 和 1.5 倍,在 ARM CPU 上落後 4、4.3 和 1.3 倍。

LLVM Creator 開發新的 Mojo 編程語言

該語言支持靜態類型和低級內存安全特性,讓人聯想到 Rust 特性,例如引用生命週期跟踪和變量借用檢查器(borrow checker)。 除了使用指針進行安全操作之外,該語言還提供了用於低級工作的功能,例如,可以使用指針類型在不安全模式下直接訪問內存,調用單個 SIMD 指令,或訪問硬件擴展,例如作為 TensorCores 和 AMX。

LLVM Creator 開發新的 Mojo 編程語言

為了簡化對所有變量具有顯式類型定義的函數的經典和優化 Python 代碼的分離,建議使用單獨的關鍵字“fn”而不是“def”。 同樣對於類,如果您需要在編譯時將數據靜態打包到內存中(如在 C 中),您可以使用類型“struct”代替“class”。 也可以簡單地導入C/C++語言的模塊,例如從數學庫中導入cos函數,可以指定“from "math.h" import cos”。

來源: opennet.ru

添加評論