编译原理实战课
宫文学
北京原点代码 CEO
26066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
真实编译器解析篇 (19讲)
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

23 | Julia编译器(二):如何利用LLVM的优化和后端功能?

Julia针对语言特点编写的Pass
LLVM的优化过程
使用内建函数生成LLVM IR
LLVM IR的特点
类型推断和优化
Julia的REPL中定义函数并触发编译过程
使用LLDB跟踪生成IR的过程
能否让Julia在运行时基于推理做激进的优化?
LLVM为程序优化和生成目标代码提供支持
使用LLVM的Pass实现代码优化
Julia自己的IR和LLVM的IR
其他功能
对JIT的支持
对Debug的支持
对垃圾收集的支持
目标代码生成功能
程序的优化功能
运行LLVM的Pass
生成LLVM IR
Julia的IR:采用SSA形式
即时编译的过程
一课一思
课程小结
利用LLVM的正确姿势
Julia编译器后端功能
Julia编译器后端功能及LLVM的利用

该思维导图由 AI 生成,仅供参考

你好,我是宫文学。
上一讲,我给你概要地介绍了一下 Julia 这门语言,带你一起解析了它的编译器的编译过程。另外我也讲到,Julia 创造性地使用了 LLVM,再加上它高效的分派机制,这就让一门脚本语言的运行速度,可以跟 C、Java 这种语言媲美。更重要的是,你用 Julia 本身,就可以编写需要高性能的数学函数包,而不用像 Python 那样,需要用另外的语言来编写(如 C 语言)高性能的代码。
那么今天这一讲,我就带你来了解一下 Julia 运用 LLVM 的一些细节。包括以下几个核心要点:
如何生成 LLVM IR?
如何基于 LLVM IR 做优化?
如何利用内建(Intrinsics)函数实现性能优化和语义个性化?
这样,在深入解读了这些问题和知识点以后,你对如何正确地利用 LLVM,就能建立一个直观的认识了,从而为自己使用 LLVM 打下很好的基础。
好,首先,我们来了解一下 Julia 做即时编译的过程。

即时编译的过程

我们用 LLDB 来跟踪一下生成 IR 的过程。
$ lldb #启动lldb
(lldb)attach --name julia #附加到julia进程
c #让julia进程继续运行
首先,在 Julia 的 REPL 中,输入一个简单的 add 函数的定义:
julia> function add(a, b)
x = a+b
x
end
接着,在 LLDB 或 GDB 中设置一个断点“br emit_funciton”,这个断点是在 codegen.cpp 中。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Julia编译器(二):利用LLVM的优化和后端功能 本文深入探讨了Julia语言如何充分利用LLVM进行即时编译,并详细介绍了Julia在利用LLVM的过程中的细节。文章首先介绍了Julia的即时编译过程,解释了Julia中最重要的几个源代码文件。接着,讨论了Julia的IR采用SSA形式的优势,并指出了IR在类型推断和优化方面的作用。文章还详细解释了Julia是如何生成LLVM IR的过程,以及LLVM IR的特点和内建函数的使用。此外,还介绍了Julia如何运行LLVM的Pass,并针对自身语言特点编写个性化的Pass。最后,文章提到了Julia是如何生成机器码以及在垃圾收集功能方面的应用,以及在使用LLVM时需要注意的问题。 文章还总结了LLVM的功能,包括程序的优化功能、目标代码生成功能、对垃圾收集的支持、对Debug的支持、对JIT的支持等。同时,强调了LLVM为程序优化和生成目标代码提供了可靠的支持,对于想要深入了解Julia编译器的读者具有很高的参考价值。 总的来说,本文深入浅出地介绍了Julia语言如何利用LLVM进行优化和后端功能,对于想要深入了解Julia编译器的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 鱼_XueTr
    jinpeng.d@Mac$ lldb (lldb) attach --name julia error: attach failed: could not find a process named julia (lldb) ^D
    2020-07-26
    2
  • ifelse
    😂
    2022-01-17
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部