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

build_multi_array_is_equal_from_arrays函数存在的性能问题

1.闭包间接调用

每个闭包f是Box trait object。调用f(a_idx, b_idx)时,CPU需要通过虚函数表(vtable)查找实际函数指针,然后跳转执行。这个过程涉及:

  1. 从 trait object 中读取 vtable 指针
  2. 从 vtable 中读取 call 函数指针
  3. 间接跳转
    虚调用无法被编译器内联,也无法在编译器确定执行路径,导致分支预测失败。

2.值的间接访问

闭包中通过left.value(i)和right.value(i)访问数组元素。value(i)是Arrow数组的方法,内部需要:

  1. 通过Arrow的ArrayData获取缓冲区指针
  2. 计算偏移量
  3. 从缓冲区读取值
    每次比较都要经过这个间接访问链。闭包本身是Box,编译器无法看到value(i)的内部实现来内联它。
likedislike
吴磊吴磊成员
4月28日 关联了pull request:build_multi_array_is_equal_from_arrays函数性能优化
吴磊吴磊成员
4月28日 修改了issue 的描述
吴磊吴磊成员
4月28日 修改了issue 的描述
吴磊吴磊成员
4月28日 修改了issue 的描述
吴磊吴磊成员
5月8日 关联了pull request:build_multi_array_is_equal_from_arrays函数性能优化
吴磊吴磊成员
5月9日 关联了pull request:修复build_multi_array_is_equal_from_arrays函数,Daft用例失败
吴磊吴磊成员
5月9日 关联了pull request:修复build_multi_array_is_equal_from_arrays函数,Daft用例失败
吴磊吴磊成员
5月15日 关联了pull request:修复9654 TPC-H Q2劣化 & 修复因修复用例引入的性能下降
吴磊吴磊成员
5月15日 关联了pull request:修复9654 TPC-H Q2劣化 & 修复因修复用例引入的性能下降