向量化与Codegen:分析引擎Runtime技术领域介绍和实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 向量化 VS. 代码生成: Runtime技术介绍及实践 阿里云-EMR 周克勇(一锤)
2. 目录 01 微体系结构分析 03 代码生成 & Hybrid 02 向量化 04 Spark Native Runtime实践
3. 01 微体系结构分析
4. 硬件趋势 Memory Size 上百G 数百G T L1 Cache Size ~32K ~32K ~32K L2 Cache Size ~256K ~256K ~256K L3 Cache Size ~20M ~30M ~40M 10X CPU及访存成为瓶颈
5. 存储架构 CPU NUMA 关键指标
6. CPU指令执行 • 乱序执行 分支预测 流水线 条件:数据无依赖 • • 条件:预测准确 条件:指令可重叠;长指令 SIMD 硬件Prefetch • 条件:顺序访存 • 条件:Cache命中 操作 延迟(cycles) add/sub int 1 float divide ~ 10 Pipeline squash ~100
7. 计算引擎的性能瓶颈 IPC指标 • 科学计算&多媒体计算:2 • 数据库系统:0.7 性能瓶颈及原因 • 指令爆炸:解释执行 • 内存墙:随机访问,访存密度低 • 分支预测失败:解释执行&数据分布
8. 02 向量化
9. 向量化技术特征 引擎向量化 != CPU向量化(SIMD) 向量化技术特征 • Batch执行 • 分摊解释执行开销 • 列式存储 • Cache friendly • Primitive的前提 • Primitive计算 • 编译优化 • 提升访存密度
10. Primitive的收益 编译优化 • 循环展开 • 充分利用乱序执行 • 提升访存密度 • SIMD指令 Cache命中率 • 中间结果数据保存在cache中 分支优化: Branching vs. Non-Branch
11. 执行流程
12. 高级特性: Micro-Adaptivity 动态调整最优执行策略 • 数据分布会发生变化 策略清单 • Compiler • Branch vs. No-Branch • Loop Fission • Hand-Unrolling • Full computation 算法 • multi armed bandit
13. 向量化技术总结 性能瓶颈的解决 • 指令爆炸 • Batch执行 • 内存墙 • Primitive执行提升访存密度 • 中间结果缓存到Cache • 分支预测 • No-Branch算法实现 高级特性 • Micro-Adaptivity 劣势 • 中间结果物化 • 大量load/store指令 代表引擎 • MonetDB/X100 • Vectorwise • Snowflake • Spark Photon • CK • StarRocks • Velox (Runtime Lib)
14. 03 代码生成 & Hybrid
15. 代码生成技术特征 技术特征 • Pipeline模型 • Pipeline Breaker:需溢出到内存 • Push Mode • Pipeline内,不出寄存器 • 编译执行 • 代码生成(C++/LLVM/JAVA) • 编译执行 • 解决指令爆炸 代表引擎 • Hyper • Apache Spark • NoisePage • Impala
16. 代码生成框架 produce/consumer框架 • 仅为了生成代码 • produce: 生成本算子的输出代码 • consume: 生成本算子的执行逻辑代码
17. 分支优化 编译执行 • 消除虚函数带来的分支跳转 生成高效分支代码
18. 内存墙解法:Partitioned Join Partitioned Join Radix Join
19. 内存墙解法:Software Prefetch
20. Hybrid: Relaxed Operator Fusion Prefer GP over Radix Join
21. 向量化 vs. 代码生成 向量化 代码生成 指令爆炸 Batch执行 编译执行 额外指令 load/store 内存墙 提高访存密度 分支预测 Non-Branch算法 SIMD 编译器优化 多线程 Unbalanced 自适应 Micro-Adaptivity Hybrid 软件Prefetch 编译执行/算法优化 编译器优化 NUMA-Aware Morsel-Driven
22. 04 Spark Native Runtime实践
23. 代码生成实践 • 生成什么 • Weld IR • 怎么生成 • Spark Codegen框架 • Stage级别Fallback • 跟Spark集成 • 统一内存布局 • 执行流程
24. 代码生成实践 select col1 from t where col2 > 1000
25. 向量化实践 调研中 开源项目 • Velox • Gazelle
26. 非常感谢您的观看

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.3. UTC+08:00, 2024-11-25 10:02
浙ICP备14020137号-1 $访客地图$