建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

彩虹上的水瓶座

发帖: 75粉丝: 33

级别 : 版主

发消息 + 关注

发表于2020年06月22日 19:02:41 1108 30
直达本楼层的链接
楼主
显示全部楼层
[博文鉴赏] LLVM动态编译技术浅析及在GaussDB for DWS上的应用

一、LLVM概述

LLVM是“Low Level Virtual Machine”的简称,为美国伊利诺伊大学研究项目。 

  • LLVM是一个类似GCC的大型编译器框架,采用BSD协议;

  • LLVM意在提供一种现代化的、能够静态&动态编译现有编程语言的基于SSA特征的编译策略;

  • LLVM具有模块化,可重复使用等特征,且包含多样化的子项目;

llvm.PNG


二、为什么要用LLVM

核心思想:为具体的查询生成定制化的机器码代替通用的函数实现,并尽可能的将数据存储在CPU寄存器中:

  • 解决传统数据处理引擎条件逻辑冗余的问题;

  • 避免传统数据处理引擎存在的大量虚函数调用现象;

  • 改善传统数据处理引擎的数据调用(无法一次性将数据从内存加载至cache上);

  • 发挥通用硬件平台的扩展指令集功能(SSE 4.2)

llvm2.PNG

三、LLVM编译执行框架

通过封装LLVM函数库功能,提供易于数据库层逻辑调用的函数

  • 封装的LLVM BRIDGE API层提供了更为简洁通用的调用接口,用于处理LLVM环境,资源,基本元素等;

  • GaussDB for DWS 基于已有的LLVM BRIDGE API层实现各个功能的codegen代码,用于生成IR函数;

  • 通过EState结构变量提取对应的计划信息,通过计划信息(变量类型,操作类型,返回结果类型)决策哪些操作可以进行codegen优化;

  • Jittable成功判断后,则进一步提取信息(函数oid,变量oid)借助LLVM Assemble API完成IR函数的预编写;

四、LLVM加速效果-CPU

  • LLVM通过消除条件逻辑冗余,降低虚函数引用次数,改善数据locality,可大大降低任务执行执行,而实际CPU利用率却很高;

  • LLVM生成的machine code为一次性成本,整个执行过程均可使用; 数据量越大,所获取的收益将越大;

llvm3.PNG

五、LLVM编译时间

  • 不同编译优化等级所需的编译时间不同,优化等级越高,编译时间越长;

  • 通过Builder API动态生成的IR函数复杂度对实际编译时间具有重要影响;

llvm4.PNG

六、LLVM在GaussDB for DWS的应用

    1、GaussDB for DWS极致性能由以下几个黑科技完成:MPP:节点并行,SMP:算子并行;SIMD:指令级并行;LLVM:动态编译。

    2、GaussDB for DWS利用了LLVM的架构,使得程序运行时动态生成执行代码,减少无关指令的生成(即减少Sql执行指令数),从而提高性能,从内部代码来讲,比较难理解,并且

         GaussDB for DWS在使用该架构时也有一定的问题,但是在应用层面还是比较容易给客户展示使用了LLVM性能方面的效果的,详细如下:

         首先,注意该功能使用的场景(根据参数打开或者关闭该特性):

         enable_codegen

         参数说明:标识是否允许开启代码生成优化,目前代码生成使用的是LLVM优化。

         取值范围:布尔型

  • on表示允许开启代码生成优化。

  • off表示不允许开启代码生成优化。

    目前LLVM优化仅支持向量化执行引擎特性(列存表)和SQL on Hadoop(与MRS服务互联互通)特性,在其他场景下建议关闭此参数。

         其次,根据LLVM架构特征,可以得知,该特性主要应用在Sql语句的agg,sort,hashjoin等算子上,那么只有包含这些算子的场景,才会起作用。(根据经验,TPCH中的Q1包含相应算子,

                   可以拿该sql作为测试语句)

         再次,根据以上第四条所述:LLVM生成的machine code为一次性成本,整个执行过程均可使用; 数据量越大,所获取的收益将越大,那么测试的数据量越大,效果越明显,那么

                  需要选择上TB的数据量。

         综上,只要根据以上配置,利用tpch中的Q1语句,利用较大数据量与普通场景下的同样语句作对比,性能效果差距就特别明显,可以证明GaussDB for DWS利用了LLVM的特性效果。

举报
分享

分享文章到朋友圈

分享文章到微博

建赟

发帖: 505粉丝: 33

级别 : 外部版主

发消息 + 关注

发表于2020年06月26日 18:04:18
直达本楼层的链接
沙发
显示全部楼层

了解一下

点赞 评论 引用 举报

找虫虫

发帖: 0粉丝: 1

级别 : 中级会员

发消息 + 关注

发表于2020年06月27日 09:07:40
直达本楼层的链接
板凳
显示全部楼层

有用,感谢分享,赞!

点赞 评论 引用 举报

人生的旅途

发帖: 4粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020年06月27日 09:34:13
直达本楼层的链接
地板
显示全部楼层

不错的分享,持续学习~

点赞 评论 引用 举报

云天裕

发帖: 0粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020年06月27日 10:02:16
直达本楼层的链接
5#
显示全部楼层

学习了~

点赞 评论 引用 举报

王建国

发帖: 1粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020年06月27日 10:26:13
直达本楼层的链接
6#
显示全部楼层

感谢分享!

点赞 评论 引用 举报

编程小王子

发帖: 1粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020年06月27日 10:54:39
直达本楼层的链接
7#
显示全部楼层

厉害了,点赞!

点赞 评论 引用 举报

AI从业者

发帖: 0粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020年06月27日 11:22:28
直达本楼层的链接
8#
显示全部楼层

哎呦,不错哦!

点赞 评论 引用 举报

GoodStudy

发帖: 1粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020年06月27日 11:43:40
直达本楼层的链接
9#
显示全部楼层

很不错的的分享!

点赞 评论 引用 举报

Richel

发帖: 0粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020年06月27日 12:11:18
直达本楼层的链接
10#
显示全部楼层

顶,紫薯布丁!

点赞 评论 引用 举报

首席帅哥

发帖: 1粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020年06月27日 12:37:33
直达本楼层的链接
11#
显示全部楼层

Mark收藏!

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册