From 63416c13072d961a8f19b5613892e5b28ad4ac4f Mon Sep 17 00:00:00 2001 From: Ritchie Vink Date: Sun, 26 Mar 2023 22:07:11 +0200 Subject: [PATCH] Updated multiversion and support wider registers (#1440) --- Cargo.toml | 2 +- src/compute/aggregate/min_max.rs | 5 +++++ src/compute/aggregate/sum.rs | 6 ++---- src/compute/hash.rs | 9 +++------ 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5186550386a..c55e1c4a887 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,7 +92,7 @@ serde_json = { version = "^1.0", features = ["preserve_order"], optional = true strength_reduce = { version = "0.2", optional = true } # For instruction multiversioning -multiversion = { version = "0.6.1", optional = true } +multiversion = { version = "0.7.1", optional = true } # For support for odbc odbc-api = { version = "0.36", optional = true } diff --git a/src/compute/aggregate/min_max.rs b/src/compute/aggregate/min_max.rs index 886cd509dd6..da064d9b013 100644 --- a/src/compute/aggregate/min_max.rs +++ b/src/compute/aggregate/min_max.rs @@ -9,6 +9,7 @@ use crate::{ array::{Array, BinaryArray, BooleanArray, PrimitiveArray, Utf8Array}, bitmap::Bitmap, }; +use multiversion::multiversion; /// Trait describing a type describing multiple lanes with an order relationship /// consistent with the same order of `T`. @@ -31,6 +32,7 @@ pub trait SimdOrd { fn new_max() -> Self; } +#[multiversion(targets = "simd")] fn nonnull_min_primitive(values: &[T]) -> T where T: NativeType + Simd, @@ -50,6 +52,7 @@ where reduced.min_element() } +#[multiversion(targets = "simd")] fn null_min_primitive_impl(values: &[T], mut validity_masks: I) -> T where T: NativeType + Simd, @@ -110,6 +113,7 @@ where } } +#[multiversion(targets = "simd")] fn nonnull_max_primitive(values: &[T]) -> T where T: NativeType + Simd, @@ -129,6 +133,7 @@ where reduced.max_element() } +#[multiversion(targets = "simd")] fn null_max_primitive_impl(values: &[T], mut validity_masks: I) -> T where T: NativeType + Simd, diff --git a/src/compute/aggregate/sum.rs b/src/compute/aggregate/sum.rs index 85336ddc292..9156a304c20 100644 --- a/src/compute/aggregate/sum.rs +++ b/src/compute/aggregate/sum.rs @@ -20,8 +20,7 @@ pub trait Sum { fn simd_sum(self) -> T; } -#[multiversion] -#[clone(target = "x86_64+avx")] +#[multiversion(targets = "simd")] fn nonnull_sum(values: &[T]) -> T where T: NativeType + Simd + Add + std::iter::Sum, @@ -39,8 +38,7 @@ where /// # Panics /// iff `values.len() != bitmap.len()` or the operation overflows. -#[multiversion] -#[clone(target = "x86_64+avx")] +#[multiversion(targets = "simd")] fn null_sum_impl(values: &[T], mut validity_masks: I) -> T where T: NativeType + Simd, diff --git a/src/compute/hash.rs b/src/compute/hash.rs index 319542222e3..5f914917507 100644 --- a/src/compute/hash.rs +++ b/src/compute/hash.rs @@ -21,8 +21,7 @@ use crate::{ use super::arity::unary; -#[multiversion] -#[clone(target = "x86_64+aes+sse3+ssse3+avx+avx2")] +#[multiversion(targets("x86_64+aes+sse3+ssse3+avx+avx2"))] /// Element-wise hash of a [`PrimitiveArray`]. Validity is preserved. pub fn hash_primitive(array: &PrimitiveArray) -> PrimitiveArray { let state = new_state!(); @@ -30,8 +29,7 @@ pub fn hash_primitive(array: &PrimitiveArray) -> Primit unary(array, |x| state.hash_one(x), DataType::UInt64) } -#[multiversion] -#[clone(target = "x86_64+aes+sse3+ssse3+avx+avx2")] +#[multiversion(targets("x86_64+aes+sse3+ssse3+avx+avx2"))] /// Element-wise hash of a [`BooleanArray`]. Validity is preserved. pub fn hash_boolean(array: &BooleanArray) -> PrimitiveArray { let state = new_state!(); @@ -45,8 +43,7 @@ pub fn hash_boolean(array: &BooleanArray) -> PrimitiveArray { PrimitiveArray::::new(DataType::UInt64, values, array.validity().cloned()) } -#[multiversion] -#[clone(target = "x86_64+aes+sse3+ssse3+avx+avx2")] +#[multiversion(targets("x86_64+aes+sse3+ssse3+avx+avx2"))] /// Element-wise hash of a [`Utf8Array`]. Validity is preserved. pub fn hash_utf8(array: &Utf8Array) -> PrimitiveArray { let state = new_state!();