专利研读-SIMD系列-向量化引擎
专利研读-SIMD系列-向量化引擎
1、专利内容
阿里巴巴的专利:向量化处理数据的方法及装置,主要思想为:对于行存表或行、列存混合存储的查询场景,需要手工将行存表转换成列存表再在列存表基础上进行向量化处理,这种方式代价较高。阿里提供了一种方法从查询计划树中识别出数据不支持向量化操作的子树节点,将数据转换成支持向量化操作的数据。理解其实就是在不支持向量化的算子上再挂一个转换算子,将行存数据转换成向量化执行需要的列存形式。openGauss就是这么干的,针对行存的算子,在其上再挂个RowToVec即行转向量的算子,以支持整个执行计划树执行时能够向量化执行。当然,若输出需要行的形式,那再挂一个VecToRow的算子,即将向量再转成行。
StarRocks的专利:一种基于向量化执行引擎的数据库表达式,主要思想:传统数据库大多是火山模型,火山模型的算子和表达式都是按行执行。和传统数据库相比,向量化执行引擎具有更少的虚函数调用,更少的分支判断,CPU缓存更友好,易于SIMD指令优化等优点。针对表达式向计算向量化执行,提出了一种表达式计算的复用方法,当然主要创新点还是表达式复用的思想。比如一个SQL语句:SELECT a+b,a+d,a+b+c,a+b+c+d FROM table;提供一种方式找出4个表达式计算中的公用表达式部分,这里的公用表达式:a+b,a+b+c。将a+b作为一个逻辑投影,命名为tmp1,然后将tmp1带入a+b+c表达式中,即tmp1+c;接着将a+b+c作为一个逻辑投影,当作tmp2,并将tmp2带入a+b+c+d。最后表达式:tmp1,a+d,tmp1+c,tmp2+d。也就是减少表达式的冗余计算。
东方国信的专利:向量化数据库的查询方法及装置:对于数据库中存在NULL值和溢出,现有CPU利用分支判断对数据进行处理,一旦分支判断错误会产生时钟周期的损害,而且存在分支判断的循环导致处理NULL值和溢出的效率低下。比如判断NULL并进行相加的流程:
For i=0 to N{if(!(c1_isNull[i] & c2_isNull(i)))result[i] = C1[i]+C2[i];
} 其中,N为数据总行数,c1和c2为数据库中的两列数据,c1_isNull和c2_isNull分别为对应c1和c2的空标识,result为查询结果。在循环内,对于每一行都要先执行一个if判断,通过c1_isNull和c2_isNull的按位与运算,在其运算结果不满足c1和c2其中至少存在一个NULL的情况下,使c1和c2执行加法运算。直至循环结束,处理的行数为N,却执行了2N次操作,其中有N次在执行if的分支判断,另外N次根据分支判断结果执行对应的操作。
创新点:流程如下,去掉了分支判断
For i=0 to N{result_isNull[i] = c1_isNull[i] & c2_isNull[i];tmp_c1[i]=result_isNull[i]&c1[i];tmp_c2[i]=result_isNull[i]&c2[i];result[i]=tmp_c1[i]+tmp_c2[i];
} 其中,N为数据总行数,c1和c2为数据库中的两列数据,tmp_c1和tmp_c2分别为对应c1和c2的空值处理结果,c1_isNull、c2_isNull和result_isNull分别为对应c1、c2和result的空标识,result为查询结果。在循环内,对于每一行,先通过c1_isNull和c2_isNull的按位与运算获取result_isNull,用于指示result是否为空。其中,c1_isNull、c2_isNull和result_isNull对应的标识规则为,若对应的数据为空,则全为0;若对应的数据不为空,则全为1。直至循环结束,处理的行数为N,对应执行了N次操作,相较于传统的查询流程操作次数降低一半。
再将上述思想扩展到SIMD向量化中。For循环一次处理一批数据。其实主要思想还是去掉分支判断。
2、参考
https://www.modb.pro/doc/55436
https://www.modb.pro/doc/49941
https://www.modb.pro/doc/50225
相关文章:
专利研读-SIMD系列-向量化引擎
专利研读-SIMD系列-向量化引擎 1、专利内容 阿里巴巴的专利:向量化处理数据的方法及装置,主要思想为:对于行存表或行、列存混合存储的查询场景,需要手工将行存表转换成列存表再在列存表基础上进行向量化处理,这种方式代…...
C#--设计模式之单例模式
单例模式大概是所有设计模式中最简单的一种,如果在面试时被问及熟悉哪些设计模式,你可能第一个答的就是单例模式。 单例模式的实现分为两种: 饿汉式:在静态构造函数执行时就立即实例化。懒汉式:在程序执行过程中第一…...
RWEQ风蚀方程模型与ArcGIS数据处理Python代码库添加结合理论研究和科研实践
RWEQ模型是应用比较普遍的能适应大区域定量估算风蚀量的模型。该模型是基于大量野外实验的一种经验模型,在实际测定风力导致的土壤侵蚀量以及当地的气象、地表植被、土壤湿度、地表的结皮和地表的可蚀性等因子的基础上得出的一个经验方程。 1、掌握土壤风蚀模型的原…...
基于STM32微控制器的物联网(IoT)节点设计与实现
基于STM32微控制器的物联网(IoT)节点的设计和实现。我们讨论物联网节点的基本概念和功能,并详细介绍了STM32微控制器的特点和优势。然后,我们将探讨如何使用STM32开发环境和相关的硬件模块来设计和实现一个完整的物联网节点。最后,我们将提供一个示例代码,展示如何在STM3…...
篇二十一:中介者模式:解耦对象之间的交互
篇二十一:"中介者模式:解耦对象之间的交互" 开始本篇文章之前先推荐一个好用的学习工具,AIRIght,借助于AI助手工具,学习事半功倍。欢迎访问:http://airight.fun/。 另外有2本不错的关于设计模式…...
tomcat的多实例,动静分离(web服务基础结束)
多实例 多实例就是在一台服务器上有多个tomcat的服务(核心是改端口) 实验:多实例 安装步骤 1.安装好 jdk 2.安装 tomcat cd /opt tar zxvf apache-tomcat-9.0.16.tar.gz mkdir /usr/local/tomcat mv apache-tomcat-9.0.16 /usr/local/tomca…...
LeetCode150道面试经典题--判断子序列(简单)
1.题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序…...
kubeadml 安装 k8s
目录 一:kubeadml 安装 k8s 1、网络环境 2、 环境准备 3、 所有节点安装docker 4、所有节点安装kubeadm,kubelet和kubectl 5、部署K8S集群 6、测试 二: 部署 Dashboard 一:kubeadml 安装 k8s 1、网络环境 master&am…...
考研C语言进阶题库——更新16-20题
目录 16计算t11/2...1/n-11/n 17计算1997! 18计算t1-122-133-...-1nn 19相传国际象棋是古印度舍罕王的宰相达依尔发明的.舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐. 这位聪明的宰相指着8*8共64格的象棋说:陛下,请您赏给我一些麦子吧. 就在棋盘的第1格放1粒…...
【变形金刚01】attention和transformer所有信息
图1.来源:Arseny Togulev在Unsplash上的照片 一、说明 这是一篇 长文 ,几乎讨论了人们需要了解的有关注意力机制的所有信息,包括自我注意、查询、键、值、多头注意力、屏蔽多头注意力和转换器,包括有关 BERT 和 GPT 的一些细节。因…...
面试热题(路径总和II)
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 在这里给大家提供两种方法进行思考,第一种方法是递归,第二种方式使用回溯的方式进行爆…...
测试 tensorflow 1.x 的一个demo 01
tensorflow 1.0的示例代码 demo_01.py import tensorflow as tf import os os.environ[TF_CPP_MIN_LOG_LEVEL]2def tf114_demo():a 3b 4c a bprint("a b in py ",c)a_t tf.constant(3)b_t tf.constant(4)c_t a_t b_tprint("TensorFlow add a_t b_t &…...
达蒙DM数据库使用经验
DM表/字段注释 注:dm数据库无法在建表的同时为字段名添加注释 //为表添加注释 comment on table 库名.表名 is 表注释; //为表字段添加注释 comment on column 库名.表名.列名 is 列注释;DM查询错误:无效的表或视图 1,确认表一定存在 2&am…...
Redis—集群
目录标题 主从复制第一次同步命令传播分担主服务器压力增量复制总结面试题什么是Redis主从复制Redis主从复制的原理Redis主从复制的优点Redis主从复制的缺点Redis主从复制的配置步骤Redis主从复制的同步策略主从节点是长还是短连接判断某个节点是否正常工作主从复制架构中&…...
【C语言】数据在内存中的存储详解
文章目录 一、什么是数据类型二、类型的基本归类三、 整型在内存中的存储1.原码、反码、补码2.大小端(1)什么是大小端(2)为什么会有大小端 四、浮点型在内存中的存储1. 浮点数存储规则 五、练习1.2.3.4.5.6.7. 一、什么是数据类型 我们可以把数据类型想象为一个矩形盒子&#x…...
PIC单片机配置字的设置
PIC单片机配置字的设置 PIC系列单片机,其芯片内部大都设置有一个特殊的程序存储单元,地址根据不同的单片机而定,此存储单元用来由单片机用户自由配置或定义单片机内部的一些功能电路单元的性能选项,所以被称之为系统配置字。目前PIC单片机系统配置字的方法有两种,一种是利…...
JavaWeb-Servlet服务连接器(一)
目录 1.Servlet生命周期 2.Servlet的配置 3.Servlet的常用方法 4.Servlet体系结构 5.HTTP请求报文 6.HTTP响应报文 1.Servlet生命周期 Servlet(Server Applet)是Java Servlet的简称。其主要的功能是交互式地浏览和修改数据,生成一些动态…...
新华三超融合态势感知标准版
产品概述: H3C SecCenter CSAP-XS 超融合态势感知一体机产品集合了态势感知和安全流量分析探针设备能无需复杂配置;态势感知平台具备强大的安全分析和可视化呈现功能;同时具备远程专家会诊功能,通过云端协同实现外部安全服务资源的…...
AutoSAR系列讲解(深入篇)13.2-Mcal Port配置
目录 一、配置界面 二、通用配置 1、ConfigVariant 2、PortSafety 3、PortGeneral 三、Port配置集合...
Java旋转数组中的最小数字(图文详解版)
目录 1.题目描述 2.题解 分析 具体实现 方法一(遍历): 方法二(排序): 方法三(二分查找): 1.题目描述 有一个长度为 n 的非降序数组,比如[1,2,3,4,5]&a…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
