yordan-pavlov edited a comment on pull request #7037: URL: https://github.com/apache/arrow/pull/7037#issuecomment-621983970
Hi, I thought I would do some profiling yesterday (to help make sure packed_simd is not removed prematurely) and noticed that a lot of time in `simd_compare_op` is spent in this loop here: https://github.com/apache/arrow/blob/master/rust/arrow/src/compute/kernels/comparison.rs#L236 ``` for i in 0..lanes { result.append(T::mask_get(&simd_result, i))?; } ``` I attempted to change this to use `mask.bitmask().to_byte_slice()` instead of `mask_get`; this was looking promising performance-wise before I attempted to change the arrow code by adding ``` fn bitmask(mask: &Self::SimdMask) -> &[u8] { unsafe { let bits = mask.bitmask(); bits.to_byte_slice() } } ``` to the `impl ArrowNumericType` section of the `make_numeric_type` macro and changing `simd_compare_op` to ``` //... // notice this has changed to a MutableBuffer let mut result = MutableBuffer::new(left.len() * mem::size_of::<bool>()); for i in (0..left.len()).step_by(lanes) { let simd_left = T::load(left.value_slice(i, lanes)); let simd_right = T::load(right.value_slice(i, lanes)); let simd_result = op(simd_left, simd_right); // this line is added result.write(T::bitmask(&simd_result)); // this is the old code commented out // for i in 0..lanes { // result.append(T::mask_get(&simd_result, i))?; // } } //... ``` but this doesn't compile because of error `returns a value referencing data owned by the current function`; I have been doing mostly C# recently so was hoping you might be able to help. @nevi-me @paddyhoran ---------------------------------------------------------------- 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. For queries about this service, please contact Infrastructure at: [email protected]
