- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Julia 语言及其生态
陈久宁,华东师范大学数学科学学院博士生,研究方向是图像处理。目前是 JuliaLang 组织的成员,JuliaImages 以及相关工具箱的核心开发者,曾为国内各个高校的镜像站添加了 Julia 镜像。
议题简介:
Julia 是一门新兴的针对科学计算设计的高性能编程语言。这次报告将简要介绍 1) Julia 的特性和设计风格,
2) Julia 下的生态环境和社区,以及
3)Julia 目前的缺点以及未来发展的方向。
展开查看详情
1 .Julia 语⾔及其⽣态 陈久宁 @JuliaImages (2021.04.18)
2 .Julia 语⾔及其⽣态 Outline • Julia 的代码⻛格 • Julia 为什么快 • ⽣态与社区
3 .From https://julialang.org/
4 .Julia 代码⻛格 Topics • 动态编译型语⾔ • Math language! • 函数式编程 + 多重派发 • Oh my broadcasting!
5 .Julia 代码⻛格 — 动态编译型语⾔ 以 Python/Matlab 的 REPL(read-execute-print loop) ⽅式写代码,并获得 C/C++ 的执⾏效率 Python + NumPy C routine Julia manual written Python manual written
6 .Julia 代码⻛格 — A math language! From https://cormullion.github.io/pages/2020-07-26-JuliaMono/
7 . Julia 代码⻛格 — 函数式编程 + 多重派发 将尽可能多的简短的函数组合⼀个完整的功能 函数式编程 + 多重派发 = 递归? 函数式编程:将⼀个函数作为另⼀个函数的输⼊ 多重派发:函数 (Function) 由多个⽅法 (Method) 共 同定义,根据具体的数据类型决定实际调⽤的⽅法
8 . Julia 代码⻛格 — 函数式编程 + 多重派发 将尽可能多的简短的函数组合⼀个完整的功能 函数式编程 + 多重派发 = 递归? 函数式编程:将⼀个函数作为另⼀个函数的输⼊ 多重派发:函数 (Function) 由多个⽅法 (Method) 共 同定义,根据具体的数据类型决定实际调⽤的⽅法
9 .Julia 代码⻛格 — ⼴播 Julia 的⼴播可以应⽤到任意函数上
10 . Julia 为什么快 Topics • ⽆开销的多重派发 • Abstraction(抽象) + Specialization(特例化):充分的类型信息 • No rst-class citizens (没有⼀等公⺠) • Vectorization/broadcasting (向量化/⼴播)? • Julia ⼀定快吗? fi
11 .Julia 为什么快 类型稳定的多重派发 == 没有额外开销
12 .Julia 为什么快 specialization + abstraction: 充分的类型信息和可维护性 • 定义 Julia ⽅法的时候可以不给任何类型信息,Julia 会在第⼀次执⾏该代码的 时候进⾏⼀次在线编译(JIT) • 在需要的时候,可以通过多重派发来进⾏优化 可以不写 x 的类型
13 . Julia 为什么快 No rst-class citizens • ⼀等公⺠ ( rst-class citizens):为了达到最佳的性能所单独设计的⼀个封闭的数 据类型 • ⼀等公⺠带来的是不必要的性能开销 np.array 是 Numpy 的⼀等公⺠ fi fi
14 . Julia 为什么快 No rst-class citizens: Julia has hundreds of array types fi
15 .Julia 为什么快 向量化 vs for for 循环版本 向量化版本 which is fast? From: https://discourse.juliacn.com/t/topic/5080/9
16 .Julia 为什么快 向量化 vs for for 循环版本 向量化版本 which is fast? From: https://discourse.juliacn.com/t/topic/5080/9
17 .Julia 为什么快 “向量化快” 在 Julia 下并不成⽴ • Python/Matlab 下向量化是⼀种⾮常好的性能加速的⼿段 • 向量化之所以快是因为它以某种⼿段告诉了计算机充分的类型信息,从⽽计算 机/CPU可以对代码进⾏特殊的优化⼿段 • 向量化不是免费的:运算的中间结果是矩阵⽽不是标量(额外的缓存或内存开 销)
18 .Julia 为什么快 — Julia ⼀定快吗? 在类型不稳定的时候,Julia 的执⾏效率可以像 Python ⼀样慢
19 .Julia 为什么快 — Julia ⼀定快吗? 在类型不稳定的时候,Julia 的执⾏效率可以像 Python ⼀样慢 • 没有办法使⽤最优的内存结构(类型不稳定时没有办法保证内存的连续性) • 没有办法绕过 runtime check 的额外性能开销
20 .Julia ⽣态 简介 • 擅⻓的领域:与科学计算有关的⾼性能计算领域 • 不擅⻓的领域:⼯程、嵌⼊式 • 未来的发展⽅向:不会重复造轮⼦,但会发明新的轮⼦
21 .Julia ⽣态 - 混合⽣态 Zygote - 源到源的⾃动微分 CUDA — GPU计算 NeuralODE: 深度学习 + 微分⽅程 ⾃动微分 + 概率编程 …
22 .Julia ⽣态 - 深度学习 • 显卡并⾏、数据并⾏、计算并⾏ • 预处理⼯具箱 • 预训练的⽹络 (model zoo) • ⾼阶 API
23 .Julia ⽣态 - 深度学习 这些统统没有 • 显卡并⾏、数据并⾏、计算并⾏ • 预处理⼯具箱 • 预训练的⽹络 (model zoo) • ⾼阶 API
24 .Julia ⽣态 • 对于库的开发者友好 • 对于性能优化友好 • 新的语⾔⽣态还未发展⻬全,对调包侠不太友好
25 .Questions? Join us