已开启
针对AntiSemiProbeSink - probe_anti_semi_with_bitmap函数进行性能优化 #4
吴磊创建于  4月28日
吴磊
吴磊成员
4月28日 创建

AntiSemiProbeSinkprobe_anti_semi_with_bitmap函数存在的性能问题

1.逐行函数调用导致调用开销累积

其中mark_used的函数体包含三步操作

  1. 通过table_idx索引mutable_buffers获取目标bitmap的引用
  2. 调用as_slice_mut()获取可变字节切片
  3. 调用Arrow的bit_util::unset_bit清除指定bit

即使编译器内联这个函数,每次迭代仍需展开上述完整的指令序列。在Probe阶段中,当左表的某一行在右表中匹配到多行时,inner_iter会产出多个(table_idx,row_idx)对,每个都触发一次完整的调用链

2.未利用SIMD指令

该函数涉及的主要计算场景是Bitmap的位清除,Bitmap的位清除操作本质上是字节级的AND运算,天然适合SIMD并行处理,目前的操作属于标量循环,未利用向量计算能力

likedislike
吴磊吴磊成员
4月28日 修改标题为 “针对AntiSemiProbeSinkprobe_anti_semi_with_bitmap函数进行性能优化”,原标题为“AntiSemiProbeSinkprobe_anti_semi_with_bitmap函数性能优化”
吴磊吴磊成员
4月28日 修改标题为 “针对AntiSemiProbeSink - probe_anti_semi_with_bitmap函数进行性能优化”,原标题为“针对AntiSemiProbeSinkprobe_anti_semi_with_bitmap函数进行性能优化”
吴磊吴磊成员
4月28日 修改了issue 的描述
吴磊吴磊成员
4月28日 关联了pull request:AntiSemiProbeSinkprobe_anti_semi_with_bitmap函数性能优化
吴磊吴磊成员
4月29日 修改了issue 的描述