Marwes opened a new pull request, #2391: URL: https://github.com/apache/arrow-rs/pull/2391
Instead, re-use the ones normal function. Reduces how much code `datafusion-physical-expr` generated significantly (since the functions are generic, and not instantiated in `arrow` itself, it only shows up downstream). https://github.com/apache/arrow-datafusion There is technically an extra indirect call now as the recursive call to `eq_dyn_scalar` etc coerces to a `dyn Array` again but that seems unlikely to matter. ## cargo llvm-lines -p datafusion-physical-expr ### Before ``` Lines Copies Function name ----- ------ ------------- 2270242 (100%) 38377 (100%) (TOTAL) 245854 (10.8%) 5580 (14.5%) core::option::Option<T>::ok_or_else 58690 (2.6%) 10 (0.0%) arrow::compute::kernels::comparison::eq_dyn_scalar 58690 (2.6%) 10 (0.0%) arrow::compute::kernels::comparison::gt_dyn_scalar 58690 (2.6%) 10 (0.0%) arrow::compute::kernels::comparison::gt_eq_dyn_scalar 58690 (2.6%) 10 (0.0%) arrow::compute::kernels::comparison::lt_dyn_scalar 58690 (2.6%) 10 (0.0%) arrow::compute::kernels::comparison::lt_eq_dyn_scalar 58690 (2.6%) 10 (0.0%) arrow::compute::kernels::comparison::neq_dyn_scalar 55800 (2.5%) 900 (2.3%) arrow::compute::kernels::comparison::eq_dyn_scalar::{{closure}} 55800 (2.5%) 900 (2.3%) arrow::compute::kernels::comparison::gt_dyn_scalar::{{closure}} 55800 (2.5%) 900 (2.3%) arrow::compute::kernels::comparison::gt_eq_dyn_scalar::{{closure}} 55800 (2.5%) 900 (2.3%) arrow::compute::kernels::comparison::lt_dyn_scalar::{{closure}} 55800 (2.5%) 900 (2.3%) arrow::compute::kernels::comparison::lt_eq_dyn_scalar::{{closure}} 55800 (2.5%) 900 (2.3%) arrow::compute::kernels::comparison::neq_dyn_scalar::{{closure}} 44929 (2.0%) 900 (2.3%) core::option::Option<T>::map 40986 (1.8%) 162 (0.4%) <arrow::array::array_boolean::BooleanArray as core::iter::traits::collect::FromIterator<Ptr>>::from_iter 37528 (1.7%) 508 (1.3%) core::iter::traits::iterator::Iterator::fold 30595 (1.3%) 245 (0.6%) <alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter 29272 (1.3%) 46 (0.1%) <core::iter::adapters::flatten::FlattenCompat<I,U> as core::iter::traits::iterator::Iterator>::size_hint 27815 (1.2%) 285 (0.7%) core::iter::traits::iterator::Iterator::try_fold 26014 (1.1%) 1 (0.0%) datafusion_physical_expr::expressions::binary::BinaryExpr::evaluate_array_scalar 25095 (1.1%) 441 (1.1%) core::iter::adapters::map::map_fold::{{closure}} 22849 (1.0%) 174 (0.5%) <core::iter::adapters::GenericShunt<I,R> as core::iter::traits::iterator::Iterator>::try_fold::{{closure}} 21888 (1.0%) 96 (0.3%) arrow::compute::kernels::comparison::compare_op_scalar 21464 (0.9%) 56 (0.1%) <arrow::array::array_string::GenericStringArray<OffsetSize> as core::iter::traits::collect::FromIterator<core::option::Option<Ptr>>>::from_iter 21461 (0.9%) 441 (1.1%) <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold 19918 (0.9%) 118 (0.3%) arrow::buffer::mutable::MutableBuffer::from_trusted_len_iter 16916 (0.7%) 246 (0.6%) <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend ``` ### After ``` Lines Copies Function name ----- ------ ------------- 1475122 (100%) 28777 (100%) (TOTAL) 44929 (3.0%) 900 (3.1%) core::option::Option<T>::map 40986 (2.8%) 162 (0.6%) <arrow::array::array_boolean::BooleanArray as core::iter::traits::collect::FromIterator<Ptr>>::from_iter 37528 (2.5%) 508 (1.8%) core::iter::traits::iterator::Iterator::fold 34174 (2.3%) 780 (2.7%) core::option::Option<T>::ok_or_else 30595 (2.1%) 245 (0.9%) <alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter 29272 (2.0%) 46 (0.2%) <core::iter::adapters::flatten::FlattenCompat<I,U> as core::iter::traits::iterator::Iterator>::size_hint 27815 (1.9%) 285 (1.0%) core::iter::traits::iterator::Iterator::try_fold 26014 (1.8%) 1 (0.0%) datafusion_physical_expr::expressions::binary::BinaryExpr::evaluate_array_scalar 25095 (1.7%) 441 (1.5%) core::iter::adapters::map::map_fold::{{closure}} 22849 (1.5%) 174 (0.6%) <core::iter::adapters::GenericShunt<I,R> as core::iter::traits::iterator::Iterator>::try_fold::{{closure}} 21888 (1.5%) 96 (0.3%) arrow::compute::kernels::comparison::compare_op_scalar 21464 (1.5%) 56 (0.2%) <arrow::array::array_string::GenericStringArray<OffsetSize> as core::iter::traits::collect::FromIterator<core::option::Option<Ptr>>>::from_iter 21461 (1.5%) 441 (1.5%) <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold 19918 (1.4%) 118 (0.4%) arrow::buffer::mutable::MutableBuffer::from_trusted_len_iter 16916 (1.1%) 246 (0.9%) <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend 16146 (1.1%) 960 (3.3%) core::iter::adapters::map::Map<I,F>::new 15492 (1.1%) 427 (1.5%) core::iter::traits::iterator::Iterator::for_each 14921 (1.0%) 111 (0.4%) alloc::vec::Vec<T,A>::extend_desugared 14670 (1.0%) 126 (0.4%) core::iter::adapters::try_process 13918 (0.9%) 1 (0.0%) datafusion_physical_expr::expressions::binary::BinaryExpr::evaluate_scalar_array 13120 (0.9%) 64 (0.2%) <arrow::array::array_primitive::PrimitiveArray<T> as core::iter::traits::collect::FromIterator<Ptr>>::from_iter 12963 (0.9%) 52 (0.2%) <core::iter::adapters::flatten::FlattenCompat<I,U> as core::iter::traits::iterator::Iterator>::try_fold 12245 (0.8%) 180 (0.6%) <core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::fold::enumerate::{{closure}} 12201 (0.8%) 81 (0.3%) arrow::buffer::mutable::MutableBuffer::extend_from_iter 11826 (0.8%) 162 (0.6%) <arrow::array::array_boolean::BooleanArray as core::iter::traits::collect::FromIterator<Ptr>>::from_iter::{{closure}} 11536 (0.8%) 960 (3.3%) core::iter::traits::iterator::Iterator::map 11200 (0.8%) 32 (0.1%) alloc::raw_vec::RawVec<T,A>::grow_amortized ``` # Rationale for this change Cuts down (release) compile times when these functions are used (in datafusion-physical-expr) ### Before ``` ________________________________________________________ Executed in 147,60 secs fish external usr time 323,32 secs 693,00 micros 323,32 secs sys time 9,43 secs 187,00 micros 9,43 secs ``` ### After ``` Executed in 133,27 secs fish external usr time 312,95 secs 498,00 micros 312,95 secs sys time 9,94 secs 134,00 micros 9,94 secs ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
