数据库 Selection Scan 学习笔记

一. SIMD 的 store/ load 指令

1.1 selective store

将 vector lane(simd 寄存器) 的一部分(根据 mask)写入连续内存在这里插入图片描述
在这里插入图片描述

1.2 selective load operation

从连续内存读入到 vector lane(simd 寄存器)
在这里插入图片描述
在这里插入图片描述

1.3 Gather operation

从非连续内存(根据 index vector)读入到 vector lane
在这里插入图片描述
在这里插入图片描述

1.4 Scatter operation

将 vector lane 写入到非连续内存(根据 index vector)
在这里插入图片描述
在这里插入图片描述

1.5 Issues:

在这里插入图片描述

二. Selection Scans

2.1 Scalar Braching 和 Branchless

实现:
在这里插入图片描述
性能对比:
在这里插入图片描述

如果条件的选择性既不是很低也不是很高,CPU 分支预测器就无法正确猜测分支结果,因此 no branching 比 branching 快。反之,如果选择性很低或者很高时,branching 更快。

2.2 Vectorized(SIMD)

卡比神总结(引用1):
使用 SIMD 结构利用评估谓词(selection)产生一个 bitmask,譬如 [0, 1, 1, 0] (0代表没有选择,1代表符合条件选择了)。
vector 选择每次从 bitmask 中选一个 bit 并访问元组,这样的话性能不好,因为选择性很低时,会有由于内存带宽造成的性能下降。见下图,其中没有被选择(x)的空间浪费掉了。
在这里插入图片描述

相反,使用 bitmask 一次将符合条件的元组存储到输出 vector 中,为了避免减少带宽,使用了一个小的 buffer,存储的是 index 而不是实际的值。 当 buffer 满时,从 buffer 重新加载 index,从列中收集实际值,输出到 output 中出。
见下图,也就是每次不直接输出,而是攒满一批后再输出。
在这里插入图片描述

selectivity 越大受到内存带宽的原因,其中 Xeon Phi 的机器会比 Xeon E3 的机器内存带宽更加大,所以向量化对比标量的优势更为明显。
在这里插入图片描述
在这里插入图片描述

2.3 Vectorized(SIMD) 多条件选择下 input selection vector 稀疏度的性能影响

出自论文 《Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were Afraid to Ask》(引用2)

Sparse data loading occurs in all selection primitives except for the first one. From the second selection primitive on, all primi- tives receive a selection vector that determines the elements to con- sider for comparison. These elements must be gathered from non- contiguous memory locations.

多个条件下,从第二个条件开始,input selection vector (里面存有上一个条件选中的索引)的稀疏程度(选择率)会产生性能的不同。主要原因是因为当选择率低的时候,这些元素必须通过 simd gather 从非连续内存中加载到 simd 寄存器,会比较慢(这边感觉还不是有100%的理由进行解释)。那么和标量版本相比,选择率越低,这部分消耗的时间越多,优势也越不明显。

在这里插入图片描述

三. 引用

  1. 《Rethinking SIMD Vectorization for In-Memory Databases》
  2. 《Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were Afraid to Ask》
  3. 卡比神写的专栏: https://zhuanlan.zhihu.com/p/432895054
  4. cum15721: https://15721.courses.cs.cmu.edu/spring2020/slides/15-vectorization1.pdf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值