ClickHouse 等现代分析型数据库摒弃了传统的 Volcano 迭代器模型(逐行处理),改为向量化执行模型(Vectorized Execution)。数据按列以固定 Block 组织成数组,直接利用现代 CPU 的 AVX2/AVX-512 SIMD 指令并行计算。
一、基于 SIMD 优化的紧凑数据内存布局
cpp
// 典型的向量化数组连续内存分配
template <typename T>
class ColumnVector {
// 连续内存分配保证 CPU 缓存行(Cache Line)预取最大命中率
std::vector<T> data;
public:
void filter_simd(const uint8_t * __restrict__ filter, size_t size) {
// 编译器易于将以下连续循环自动向量化为 SIMD 矢量指令
#pragma clang loop vectorize(enable)
for (size_t i = 0; i < size; ++i) {
if (filter[i]) {
process(data[i]);
}
}
}
};