Weld: 高性能数据分析的公共运行时,spark sql, pandas ,numpy,tensorflow等的Common IR

一直在找一个大数据领域的通用编译优化器,最近注意到weld,这东西2017年就出来了,看着实在太强大。回头把相关论文撸一把,很hgih。

官网:https://www.weld.rs/

论文:

https://cs.stanford.edu/~matei/papers/2017/cidr_weld.pdf

 

数砖的介绍

https://www.slideshare.net/databricks/composable-parallel-processing-in-apache-spark-and-weld

 

网上找到的一份ppt介绍:https://www.weld.rs/assets/weld-strata.pdf

 

看到阿里云的EMR Spark-SQL也使用了这个weld做运行时

https://developer.aliyun.com/article/758861

运行时

这次的优化里面,还有一个很好玩的优化,就是我们引入的 Native Runtime,如果说上述的优化器优化都是一些特殊 Case 的杀手锏,Native Runtime 就是一个广谱大杀器,根据我们后期统计,引入 Native Runtime,可以普适性的提高 SQL Query 15~20%的 E2E 耗时,这个在TPCDS Perf 里面也是一个很大的性能提升点。

大致的介绍一下 Native Runtime
基于开源版本的 WholeStageCodeGeneration 的框架,在原有的生成的 Java 代码,替换成 Weld IR 来真实运行。Weld详细参考 http://weld.stanford.edu/。在整个项目里,Weld IR 的替换其实是非常小的一部分工作,为了Weld IR 能够运行起来,我们还需要做以下的工作

  • Expression Weld IR CodeGen ( TPCDS 范围内全支持)
  • Operators Weld IR CodeGen (除了 SortMergeJoin 用 C++ 实现,其他均可以用 Weld IR 代替)
  • 统一内存布局 (OffHeap UnsafeRow => C++ & Weld Runtime)
  • Batch 化执行框架 (因为如果按照 Java 运行时,每次都是一条记录的在生成代码里流转,在 NativeRuntime 的时间里代价太高, JNI 以及WeldRuntime 明显不能这么玩)
  • 其他高性能Native算子 SortMergeJoin、PartitionBy、CSV Parsing,这几个算子目前用 Weld IR 提供的接口无法直接实现,我们通过 C++来实现这些算子的 Native 执行

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值