已开启
针对build_multi_array_is_equal_from_arrays函数进行性能优化 #5
吴磊创建于 4月28日
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劣化 & 修复因修复用例引入的性能下降
build_multi_array_is_equal_from_arrays函数存在的性能问题
1.闭包间接调用
每个闭包f是Box trait object。调用f(a_idx, b_idx)时,CPU需要通过虚函数表(vtable)查找实际函数指针,然后跳转执行。这个过程涉及:
虚调用无法被编译器内联,也无法在编译器确定执行路径,导致分支预测失败。
2.值的间接访问
闭包中通过left.value(i)和right.value(i)访问数组元素。value(i)是Arrow数组的方法,内部需要:
每次比较都要经过这个间接访问链。闭包本身是Box