This is an automated email from the ASF dual-hosted git repository.

apitrou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new 2330770  ARROW-13944: [C++] Bump xsimd to latest version
2330770 is described below

commit 2330770f1f3a1f7b0b5bddd494a1801cfa968027
Author: Yibo Cai <[email protected]>
AuthorDate: Mon Oct 11 17:47:38 2021 +0200

    ARROW-13944: [C++] Bump xsimd to latest version
    
    Closes #11142 from cyb70289/13944-bump-xsimd
    
    Authored-by: Yibo Cai <[email protected]>
    Signed-off-by: Antoine Pitrou <[email protected]>
---
 cpp/src/arrow/util/bpacking_simd128_generated.h |  8 +++++++-
 cpp/src/arrow/util/bpacking_simd256_generated.h |  3 ++-
 cpp/src/arrow/util/bpacking_simd512_generated.h |  3 ++-
 cpp/src/arrow/util/bpacking_simd_codegen.py     | 16 +++++++++++++++-
 cpp/src/arrow/util/utf8.h                       | 10 +++++++---
 cpp/thirdparty/versions.txt                     |  4 ++--
 6 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/cpp/src/arrow/util/bpacking_simd128_generated.h 
b/cpp/src/arrow/util/bpacking_simd128_generated.h
index f7700fd..dca6929 100644
--- a/cpp/src/arrow/util/bpacking_simd128_generated.h
+++ b/cpp/src/arrow/util/bpacking_simd128_generated.h
@@ -36,7 +36,13 @@ using ::arrow::util::SafeLoad;
 template <DispatchLevel level>
 struct UnpackBits128 {
 
-using simd_batch = xsimd::batch<uint32_t, 4>;
+#ifdef ARROW_HAVE_NEON
+using simd_arch = xsimd::neon64;
+#else
+using simd_arch = xsimd::sse4_2;
+#endif
+
+using simd_batch = xsimd::batch<uint32_t, simd_arch>;
 
 inline static const uint32_t* unpack0_32(const uint32_t* in, uint32_t* out) {
   memset(out, 0x0, 32 * sizeof(*out));
diff --git a/cpp/src/arrow/util/bpacking_simd256_generated.h 
b/cpp/src/arrow/util/bpacking_simd256_generated.h
index a73bafe..9fa0ded 100644
--- a/cpp/src/arrow/util/bpacking_simd256_generated.h
+++ b/cpp/src/arrow/util/bpacking_simd256_generated.h
@@ -36,7 +36,8 @@ using ::arrow::util::SafeLoad;
 template <DispatchLevel level>
 struct UnpackBits256 {
 
-using simd_batch = xsimd::batch<uint32_t, 8>;
+using simd_arch = xsimd::avx2;
+using simd_batch = xsimd::batch<uint32_t, simd_arch>;
 
 inline static const uint32_t* unpack0_32(const uint32_t* in, uint32_t* out) {
   memset(out, 0x0, 32 * sizeof(*out));
diff --git a/cpp/src/arrow/util/bpacking_simd512_generated.h 
b/cpp/src/arrow/util/bpacking_simd512_generated.h
index 2a62c96..d5d6438 100644
--- a/cpp/src/arrow/util/bpacking_simd512_generated.h
+++ b/cpp/src/arrow/util/bpacking_simd512_generated.h
@@ -36,7 +36,8 @@ using ::arrow::util::SafeLoad;
 template <DispatchLevel level>
 struct UnpackBits512 {
 
-using simd_batch = xsimd::batch<uint32_t, 16>;
+using simd_arch = xsimd::avx512bw;
+using simd_batch = xsimd::batch<uint32_t, simd_arch>;
 
 inline static const uint32_t* unpack0_32(const uint32_t* in, uint32_t* out) {
   memset(out, 0x0, 32 * sizeof(*out));
diff --git a/cpp/src/arrow/util/bpacking_simd_codegen.py 
b/cpp/src/arrow/util/bpacking_simd_codegen.py
index 805735e..9bdc225 100644
--- a/cpp/src/arrow/util/bpacking_simd_codegen.py
+++ b/cpp/src/arrow/util/bpacking_simd_codegen.py
@@ -152,6 +152,19 @@ def main(simd_width):
 
     struct_name = f"UnpackBits{simd_width}"
 
+    define_simd_arch = {
+        # ugly format to get aligned output
+        128: dedent("""\
+                 #ifdef ARROW_HAVE_NEON
+                         using simd_arch = xsimd::neon64;
+                         #else
+                         using simd_arch = xsimd::sse4_2;
+                         #endif
+                 """),
+        256: "using simd_arch = xsimd::avx2;",
+        512: "using simd_arch = xsimd::avx512bw;"
+    }
+
     # NOTE: templating the UnpackBits struct on the dispatch level avoids
     # potential name collisions if there are several UnpackBits generations
     # with the same SIMD width on a given architecture.
@@ -176,7 +189,8 @@ def main(simd_width):
         template <DispatchLevel level>
         struct {struct_name} {{
 
-        using simd_batch = xsimd::batch<uint32_t, {simd_width // 32}>;
+        {define_simd_arch[simd_width]}
+        using simd_batch = xsimd::batch<uint32_t, simd_arch>;
         """))
 
     gen = UnpackGenerator(simd_width)
diff --git a/cpp/src/arrow/util/utf8.h b/cpp/src/arrow/util/utf8.h
index c5a100f..cb473dd 100644
--- a/cpp/src/arrow/util/utf8.h
+++ b/cpp/src/arrow/util/utf8.h
@@ -248,7 +248,11 @@ inline bool ValidateAsciiSw(const uint8_t* data, int64_t 
len) {
 
 #if defined(ARROW_HAVE_NEON) || defined(ARROW_HAVE_SSE4_2)
 inline bool ValidateAsciiSimd(const uint8_t* data, int64_t len) {
-  using simd_batch = xsimd::batch<int8_t, 16>;
+#ifdef ARROW_HAVE_NEON
+  using simd_batch = xsimd::batch<int8_t, xsimd::neon64>;
+#else
+  using simd_batch = xsimd::batch<int8_t, xsimd::sse4_2>;
+#endif
 
   if (len >= 32) {
     const simd_batch zero(static_cast<int8_t>(0));
@@ -256,8 +260,8 @@ inline bool ValidateAsciiSimd(const uint8_t* data, int64_t 
len) {
     simd_batch or1 = zero, or2 = zero;
 
     while (len >= 32) {
-      or1 |= simd_batch(reinterpret_cast<const int8_t*>(data), 
xsimd::unaligned_mode{});
-      or2 |= simd_batch(reinterpret_cast<const int8_t*>(data2), 
xsimd::unaligned_mode{});
+      or1 |= simd_batch::load_unaligned(reinterpret_cast<const int8_t*>(data));
+      or2 |= simd_batch::load_unaligned(reinterpret_cast<const 
int8_t*>(data2));
       data += 32;
       data2 += 32;
       len -= 32;
diff --git a/cpp/thirdparty/versions.txt b/cpp/thirdparty/versions.txt
index 4223286..6e1d2c1 100644
--- a/cpp/thirdparty/versions.txt
+++ b/cpp/thirdparty/versions.txt
@@ -82,8 +82,8 @@ ARROW_THRIFT_BUILD_VERSION=0.13.0
 
ARROW_THRIFT_BUILD_SHA256_CHECKSUM=7ad348b88033af46ce49148097afe354d513c1fca7c607b59c33ebb6064b5179
 ARROW_UTF8PROC_BUILD_VERSION=v2.6.1
 
ARROW_UTF8PROC_BUILD_SHA256_CHECKSUM=4c06a9dc4017e8a2438ef80ee371d45868bda2237a98b26554de7a95406b283b
-ARROW_XSIMD_BUILD_VERSION=e9234cd6e6f4428fc260073b2c34ffe86fda1f34
-ARROW_XSIMD_BUILD_SHA256_CHECKSUM=1e98bae41abae7f3f6fa4c70ec2dcad008d831876009aa047fb69fd5b24076fd
+ARROW_XSIMD_BUILD_VERSION=f212f3c3801924bf218bc39705230a747467edcb
+ARROW_XSIMD_BUILD_SHA256_CHECKSUM=8f362dfbc12026e6689563cbe5f1680443d50c2e133110245d270da5e2edc0a9
 ARROW_ZLIB_BUILD_VERSION=1.2.11
 
ARROW_ZLIB_BUILD_SHA256_CHECKSUM=c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
 ARROW_ZSTD_BUILD_VERSION=v1.5.0

Reply via email to