Mojo中低水平的IR介绍

Mojo是一种具有广泛现代功能的高级编程语言。Mojo还为程序员提供了访问所有底层原语的机会,以便编写强大而零成本的抽象。

这些原语用MLIR实现,MLIR是一种用于编译器设计的可扩展中间表示格式。许多不同的编程语言和编译器将它们的源程序翻译成MLIR,因为Mojo提供了直接访问MLIR特性的途径,这意味着Mojo程序可以享受这些工具带来的好处。

更进一步,Mojo独特的零成本抽象与MLIR互操作性的组合意味着Mojo程序可以充分利用任何与MLIR接口的东西。虽然这不是普通的Mojo程序员可能需要做的事情,但当扩展系统以与新数据类型接口或深奥的新加速器功能时,这是一个非常强大的功能。

为了说明这些想法,我们将在下面的Mojo中实现一个布尔类型,我们称之为OurBool。我们将广泛使用MLIR,所以让我们从一个简短的入门介绍开始。

What is MLIR?


MLIR是一种程序的中间表示,与汇编语言类似,在汇编语言中,一组顺序的指令操作于内存中的值。

更重要的是,MLIR是模块化和可扩展的。MLIR由越来越多的“方言”组成。每个方言都定义了操作和优化:例如,math方言提供了数学操作,如正弦和余弦,amdgpu方言提供了特定于AMD处理器的操作,等等。

MLIR的每种方言都可以与其他方言互操作。这就是为什么说MLIR可以解锁异构计算:随着更新、更快的处理器和体系结构的开发,新的MLIR方言被实现,以为这些环境生成最佳代码。任何新的MLIR方言都可以无缝翻译为其他方言,因此随着更多的添加,所有现有的MLIR变得更加强大。

这意味着我们自己的自定义类型,例如我们将在下面创建的OurBool类型,可以用来为程序员提供一个高级的、类似python的接口。但在“表面之下”,Mojo和MLIR将为未来出现的每个新处理器优化我们的方便、高级类型。

关于为什么MLIR是一项革命性的技术还有很多可以写,但让我们回到Mojo和定义OurBool类型。在这个过程中,我们将有机会了解更多关于MLIR的知识。

Defining the OurBool type


我们可以使用Mojo的struct关键字来定义一个新类型OurBool:

struct OurBool:
    var value: __mlir_type.i1

布尔值可以表示0或1,“true”或“false”。为了存储这些信息,OurBool有一个成员,称为value。它的类型直接在MLIR中表示,使用MLIR内置类型i1。事实上,在Mojo中可以使用任何MLIR类型,只要在类型名称前加上__mlir_type即可。

正如我们将在下面看到的,用i1表示我们的布尔值将允许我们利用与i1类型接口的所有MLIR操作和优化——它们有很多!

定义了OurBool之后,我们现在可以声明这种类型的变量:

fn uninitialized_our_bool():
  var a: OurBool

Leveraging MLIR


当然,我们接下来可能会尝试创建一个OurBool实例。然而,此时尝试这样做会导致错误:

var a = OurBool() # error: 'OurBool' does not implement an '__init__' method

与在Python中一样,__init__是一个特殊方法,可以定义它来自定义类型的行为。我们可以实现一个没有参数的__init__方法,并返回一个带有“false”值的OurBool。

struct OurBool:
    var value: __mlir_type.i1

    fn __init__(inout self):
        self.value = __mlir_op.`index.bool.constant`[
            value=__mlir_attr.false,
        ]()

为了初始化基础的i1值,我们使用来自其index方言的MLIR操作,称为index. boolean .constant。

MLIR的index方言为我们提供了操作内置MLIR类型的操作,例如我们用来存储OurBool值的i1。index. boolean .constant操作接受一个编译时常量true或false作为输入,并在运行时生成一个i1类型的输出。

因此,如上所示,除了任何MLIR类型之外,Mojo还通过__mlir_op前缀直接访问任何MLIR操作,通过__mlir_attr前缀直接访问任何属性。MLIR属性用于表示编译时常量。

正如你在上面看到的,与MLIR交互的语法并不总是那么漂亮:MLIR属性在方括号之间传递[…],操作通过后缀(…)的括号执行,它可以接受运行时参数值。然而,大多数Mojo程序员不需要直接访问MLIR,对于少数需要访问的人来说,这种“丑陋”的语法给了他们超能力:他们可以定义易于使用的高级类型,但在内部插入MLIR及其强大的方言系统。

我们认为这非常令人兴奋,但让我们回到现实:定义了__init__方法后,我们现在可以创建OurBool类型的实例:

var b = OurBool(
  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

启航学途

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值