holo的向量化执行这块都在哪些地方使用了simd指令了啊,这个有文档介绍吗
Hologres支持毫秒级的写入可见性,Druid和ClickHouse支持的是秒级。同时Hologres支持写入更新。在计算方面,Hologres同Druid和ClickHouse都采用了向量化/SIMD执行器,值得一提的是,因Hologres底层技术原理可以支持联邦查询和高QPS的点查,这些都是Druid和ClickHouse无法做到的。
SIMD (Single Instruction Multiple Data) 即单条指令操作多条数据——原理即在CPU 寄存器层面实现数据的并行操作。
向量化计算vectorization 向量化计算(vectorization),也叫vectorized operation,也叫array programming,说的是一个事情:将多次for循环计算变成一次计算。
简单来说,向量化计算就是将一个loop——处理一个array的时候每次处理1个数据共处理N次,转化为vectorization——处理一个array的时候每次同时处理8个数据共处理N/8次。
每列的数据存储在一起,可以认为这些数据是以数组的方式存储的,基于这样的特征,当该列数据需要进行某一同样操作,可以使用SIMD进一步提升计算效率,即便运算的机器上不支持SIMD, 也可以通过一个循环来高效完成对这个数据块各个值的计算。
可以参考下面这篇文章:
https://m.toutiao.com/is/rsd2Vjj/ - 向量化代码实践与思考:如何借助向量化技术给代码提速 - 今日头条
Hologres高性能的查询:基于 MPP 架构的分布式 ROLAP (Relational OLAP)分析引擎,各节点职责对等,各自负责一部分数据的处理(Shared Nothing),开发了向量化执行引擎,利用日志合并树、bitmap索引与 CPU 的 SIMD(单指令多数据 ,Single Instruction Multiple Data)等特性,充分发挥硬件优势,即使面对大数据量计算的场景,通常也能达到 CPU 性能的极限,达到高效计算的目的。具备同时支持PointQuery,Ad-hoc,OLAP,实时离线联邦分析等多业务场景的能力,让对外服务统一引擎成为可能。
SIMD可以让计算变并行,既然要用SIMD,我们的执行模型就不能再是一次读一个tuple,而是需要一次读一批tuple,不然SIMD中的multiple data从何而来。一个执行向量化执行的引擎首先就需要将数据按照batch做读取,这似乎不是一个太困难的事情,我们并没有改变volcano的设计,依然可以迭代执行,只不过读取的数据量做了些变化,我们需要让每个算子可以执行一批数据并返回。 在ClickHouse中,每种类型都有基于这种类型的序列化函数来完成序列化,因此可以基于不同类型做特定的向量化。在数据比较和过滤的时候,ClickHouse在内存中每种不同的列都有自己单独的filter和compare函数。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975