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

添加评论