编译原理实战课
宫文学
北京物演科技CEO
立即订阅
2990 人已学习
课程目录
已更新 30 讲 / 共 53 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词 | 在真实世界的编译器中游历
免费
学习指南 | 如何学习这门编译原理实战课?
预备知识篇 (9讲)
01 | 编译的全过程都悄悄做了哪些事情?
02 | 词法分析:用两种方式构造有限自动机
03 | 语法分析:两个基本功和两种算法思路
04 | 语义分析:让程序符合语义规则
05 | 运行时机制:程序如何运行,你有发言权
06 | 中间代码:不是只有一副面孔
07 | 代码优化:跟编译器做朋友,让你的代码飞起来
08 | 代码生成:如何实现机器相关的优化?
知识地图 | 一起来复习编译技术核心概念与算法
不定期加餐 (1讲)
不定期加餐1 | 远程办公,需要你我具备什么样的素质?
真实编译器解析篇 (18讲)
09 | Java编译器(一):手写的编译器有什么优势?
10 | Java编译器(二):语法分析之后,还要做些什么?
11 | Java编译器(三):属性分析和数据流分析
12 | Java编译器(四):去除语法糖和生成字节码
13 | Java JIT编译器(一):动手修改Graal编译器
14 | Java JIT编译器(二):Sea of Nodes为何如此强大?
15 | Java JIT编译器(三):探究内联和逃逸分析的算法原理
16 | Java JIT编译器(四):Graal的后端是如何工作的?
17 | Python编译器(一):如何用工具生成编译器?
18 | Python编译器(二):从AST到字节码
19 | Python编译器(三):运行时机制
20 | JavaScript编译器(一):V8的解析和编译过程
21 | JavaScript编译器(二):V8的解释器和优化编译器
22 | Julia编译器(一):如何让动态语言性能很高?
23 | Julia编译器(二):如何利用LLVM的优化和后端功能?
24 | Go语言编译器:把它当作教科书吧
25 | MySQL编译器(一):解析一条SQL语句的执行过程
26 | MySQL编译器(二):编译技术如何帮你提升数据库性能?
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

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

宫文学 2020-07-24
你好,我是宫文学。
上一讲,我给你概要地介绍了一下 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《编译原理实战课》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥29.9
立即订阅
登录 后留言

精选留言(1)

  • 鱼_XueTr
    jinpeng.d@Mac$ lldb
    (lldb) attach --name julia
    error: attach failed: could not find a process named julia
    (lldb) ^D
    2020-07-26
    1
收起评论
1
返回
顶部