openGauss-向量化执行引擎-VecUnique算子

news2024/11/25 15:57:45

openGauss-向量化执行引擎系列-VecUnique算子

openGauss实现了向量化执行引擎,达到算子级别的并行。也就是说在执行器火山模型基础上,一次处理一批数据,而不是一次一个元组。这样可以充分利用SIMD指令进行优化,达到指令级别并行。前期我们介绍了PgSQL Unique算子的实现机制,本文接着介绍openGauss是如何实现Unique算子向量化的。

简单来说,openGauss的VecUnique算子更多的是为了实现执行器整体性的向量化,减少算子之间因为向量化和非向量化算子之间的兼容而进行的VecToRow和RowToVec算子进行的行与向量之间的转换而完成的。实际上VecUnique算子进行唯一值挑选的时候,仍旧是一个一个值比较的,只不过从子节点拿上来一批值VectorBatch,然后从VectorBatch里面一个值一个值的比较。当然,这样做的优点:减少子节点算子函数调用次数。

1、VecUniqueState

b46dc52ab9ed7b2fa9da8b35d3f96829.png

完成VecUnique算子的主要成员变量:

1)uniqueDone:标记VecUnique算子是否执行完

2)container[]数组:数组大小为2个batch大小即2+1024,存储GUCell结构,即唯一值及其NULL标签

3)cap:即Encap结构,封装VectorBatch、cols和colIdx,减少传递参数个数

4)idx:container[]数组中存储的唯一值个数,即GUCell个数

5)cellSize:GUCell大小

6)keySimple:distinct列是否是8字节以内,若8字节以内,则为true表示可以直接进行值比较;若大于8字节则需要通过函数进行比较了

7)buildFunc:用于从VectorBatch中挑出唯一值,存储到container[]数组

8)buildScanFunc:从container[]数组中取出1024条,组成一个VectorBatch输出

2、buildFunc

b770f4fcb16f4606b93741c28274e956.png

这里关注buildScanFunc和buildFunc两个函数。

为什么*idx >=1024才进行处理呢?这都已经有1025条,已超过VectorBatch最大大小了。

这针对的是跨batch的场景:

885ef7de3c1e4fd6fad88765cdb32728.png

batch1中最后一个是10,batch2中第一个是10,假设batch1中的都是不同值,则需要将batch2的第一个值10也存入container[1025]数组后才进入构建scanBatch的逻辑,这样仅输出1024行,将container[1025]以到container[0],然后才将container[1025]置为NULL。这样才能在下一轮有值可比较。否则由于batch2的10是第一个值,没比较的值,就将其也当作唯一值输出了。

BuildFunc

1)针对子节点取的VectorBatch batch,对每一行进行处理

2)第一轮batch第一行取出,作为唯一值存储到container[i],i=0;

3)后续的值和container[i]进行比较,若相等,则继续batch下一条进行比较,否则作为唯一值存入container[++i]

4)当container[]存入了1025条时,切换currentBuf和bckBuf,以便ExecVecUnique下个迭代可以重置bckBuf回收内存

buildScanFunc

这个函数就比较简单了,从container[]数组取出1024条,构建到scanBatch中,然后进行输出即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知识点滴 - 纸张的大小

关于纸张大小的描述方法 纸张大小的描述方法主要有两种,一种是我们经常使用的打印纸使用的A4、A3的叫法,这个是国际标准。 另一种是开本的叫法,比如16开、32开等。开本常见于书籍印刷品的规格。正规出版物基本没有使用 A4(ISO国际…

1688阿里巴巴官方开放平台API接口获取跨境属性、跨境包裹重量、单位重量等参数调用示例说明

1688.item_get_specifications-获得跨境属性 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)注册调用key接入secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_…

2023SHCTF web方向wp

1.ezphp 看一眼,你大爷,啥玩意都给我过滤完了。 还好下面有preg_replace()/e,会把replacement当作php语句执行 传参pattern.*, .*表示任意字符,code{${phpinfo()}} ,为什么这样写,因为,print_…

CHS零壹视频恢复程序高级版视频修复OCR使用方法

目前CHS零壹视频恢复程序监控版、专业版、高级版已经支持了OCR,OCR是一种光学识别系统,高级版最新版本中不仅仅是在视频恢复中支持OCR,同时视频修复模块也增加了OCR功能,此功能可以针对一些批量修复的视频文件(如执法仪…

网络编程---Socket

文章目录 网络编程基础什么是网络编程?网络编程的基本概念 网络编程实现Socket套接字UDP网络通信流程(回显服务器)服务器:客户端完整代码示例: TCP网络通信流程(回显服务器)服务器客户端完整的代…

医保经办系统练兵比武竞赛中用到的软件和硬件

全国医保经办系统练兵比武竞赛包括必答题、抢答题、案例题、实操题、风险题,用到选手端平板、评委端平板、主持人平板、抢答器等设备。分别计算团队分和个人分。答题规则和计分方案均较为复杂,一般竞赛软件无法实现,要用到高端竞赛软件&#…

谷歌动态搜索广告被滥用引发恶意软件泛滥

研究人员发现了一种新方法,可以利用易受攻击的网站向搜索引擎用户发送恶意的、有针对性的广告,这种方法能够传播大量恶意软件,使受害者完全不知所措。 关键是“动态搜索广告”,谷歌利用网站登陆页面的内容将目标广告与搜索配对的…

Kubernetes 高级调度 - Affinity

Author:rab 目录 前言一、Node 亲和性1.1 NodeAffinity1.1.1 Hard Node Affinity1.1.2 Soft Node Affinity 1.2 NodeAntiAffinity 二、Pod 亲和性2.1 PodAffinity2.1.1 Hard Pod Affinity2.1.2 Soft Pod Affinity 2.2 PodAntiAffinity 总结 前言 Kubernetes 中的 A…

OceanBase:02-单机部署(生产环境)

目录 一、部署规划 二、配置要求 三、部署前配置 1.配置 limits.conf 2.配置 sysctl.conf 3.关闭防火墙 4.关闭 SELinux 5.创建数据目录,修改文件所有者信息 6.设置无密码 SSH 登录 7.安装jdk 四、解压执行安装 五、OBD命令行部署 1.修改配置文件(all-c…

网络质量探测

目录 一.BFD监测网络状态 二. NQA检测网络状态 一.BFD监测网络状态 BFD(BidrectionaL Forwarding Detection 双向转发检测)用于快速检测系统设备之间的发送和接受两个方向的通信故障,并在出现故障时通知生成应用。BFD 广泛用于链路故障检测,并能实现与…

探究Java虚拟机运行时数据区,了解方法区的奥秘

目录 一、栈、堆、方法区交互关系 二、方法区的理解 三、HotSpot中方法区的演进 四、设置方法区大小与OOM 五、如何解决OOM 六、方法区的内部结构 (一)类型变量 (二)域信息 (三)方法信息 &#x…

AN动画基础——遮罩动画

【AN动画基础——遮罩动画】 什么是遮罩动画基本使用方法实战:水墨遮罩 本篇内容:了解遮罩动画 重点内容:遮罩动画应用 工 具:Adobe Animate 2022 什么是遮罩动画 遮罩动画是一种常见的图形效果,利用遮罩层来实现元素…

ARPG----C++学习记录02 Section6位置,偏移,函数

设置actor位置 这一句代码就可以更改位置和旋转 给位置添加偏移offset 将debug的持久都设置为false,在tick中调用,球就会动。这是每帧移动,所以移动速度和帧率有关,需要更改 void Aitem::Tick(float DeltaTime) {Super::Tick(DeltaTime);Ad…

【洛谷算法题】P5710-数的性质【入门2分支结构】

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5710-数的性质【入门2分支结构】🌏题目描述🌏输入格式&a…

Nginx搭配负载均衡和动静分离:构建高性能Web应用的完美组合

前言 在当今互联网时代,高并发访问已成为Web应用程序面临的重要挑战之一。为了保证系统的稳定性和用户体验,我们需要采取有效的措施来应对这一挑战。本文将介绍如何利用Nginx搭配负载均衡和动静分离技术,构建高性能的Web应用。 一、Nginx简…

java反射API

反射 什么是Java的动态机制什么是反射机制什么是Class类Class提供了诸多的get方法 反射机制实例化对象Class提供了一个方法 Constructor类指定构造器实例化对象 Method类获取一个类中的所有方法Class类提供了对应的方法 获取本类自定义的所有方法Class类提供了对应的方法 获取表…

第四章 应用SysML基本特性集的汽车示例 P2(断更)|系统建模语言SysML实用指南学习

仅供个人学习 使用试用版CSM很鸡肋,然后书中一些内容没有说明,自定义方面有点困难,第四章暂时停止 同时感觉画图的顺序也很随意?甚至需求图放在了后面,觉得很离谱。 准备跳过这一章节 汽车模型 续P1 序列图表示启…

SolidWorks2019安装教程(正版)

网盘资源附文末 一.简介 SolidWorks软件是世界上第一个基于Windows开发的三维CAD系统,由于技术创新符合CAD技术的发展潮流和趋势,SolidWorks公司于两年间成为CAD/CAM产业中获利最高的公司。良好的财务状况和用户支持使得SolidWorks每年都有数十乃至数百…

Es中出现unassigned shards问题解决

1、一般后台会报primary shard is not active Timeout: … 出现这种问题表示该索引是只读了,没办法进行shard及存储操作,优先排除是系统存储盘满了 2、通过监控工具查看(cerebro) 发现该索引shard 1 损坏 也可以通过命令进行查看 GET _cluster/allo…

阿里云短信服务接口返回: 只能向已回复授权信息的手机号发送

1、问题描述 在阿里云短信服务控制台,调用发送短信接口,报错:只能向已回复授权信息的手机号发送 2、问题分析 所使用的签名 是 测试or个人学习的 ,所以会导致 有的手机号发送不出去验证码 3、解决 如果在测试阶段,非要…