Vectorized Execution (Part II)
上一次将的哥大的论文的矢量化算法在没有四五个SIMD寄存器的情况下是没法运行的。因为DBMS需要将64位的地址和64位的数据存入寄存器
考虑到数据压缩技术,我们不能改变64位的地址,但是我们不一定要全部存储64位的数据。
这样产生的问题是,压缩数据的位宽不一定自然地适合SIMD寄存器插槽。如你压缩前128位的寄存器存储了4个32位的数据,压缩后变成了64+12位,所以有一部分空间被浪费了。
这意味着DBMS必须做额外的工作来将数据转换成适当的格式。
BITWEAVING
我们上次说过,DBMS希望能够充分地利用lane。
Bitweaving是列数据库的替代存储布局,旨在使用SIMD对压缩数据进行有效的谓词评估。
- 顺序保留字典编码。
- 位级并行化。
- 只需要通用指令(不需要scatter/gather)
方法1:水平
- 位级面向行的存储
对于整个存储,我们假设这是8位,实际也可以是64位。
排序顺序是按列顺序来的。注意图中t0、t1、t2的排序。