Skip to content

Commit 615dd80

Browse files
committed
Add missing get_unpack_fn
1 parent 0a52c0c commit 615dd80

File tree

6 files changed

+74
-0
lines changed

6 files changed

+74
-0
lines changed

cpp/src/arrow/util/bpacking.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,22 @@ template int unpack<uint16_t>(const uint8_t*, uint16_t*, int, int);
6868
template int unpack<uint32_t>(const uint8_t*, uint32_t*, int, int);
6969
template int unpack<uint64_t>(const uint8_t*, uint64_t*, int, int);
7070

71+
template <typename Uint>
72+
UnpackFn<Uint> get_unpack_fn(int num_bits) {
73+
if constexpr (std::is_same_v<Uint, uint16_t>) {
74+
// Current SIMD unpack function do not out beat scalar implementation for uin16_t
75+
return get_unpack_fn_scalar<uint16_t>(num_bits);
76+
} else {
77+
#if defined(ARROW_HAVE_NEON)
78+
return get_unpack_fn_neon<Uint>(num_bits);
79+
#else
80+
// TODO
81+
#endif
82+
}
83+
}
84+
85+
template UnpackFn<uint16_t> get_unpack_fn<uint16_t>(int);
86+
template UnpackFn<uint32_t> get_unpack_fn<uint32_t>(int);
87+
template UnpackFn<uint64_t> get_unpack_fn<uint64_t>(int);
88+
7189
} // namespace arrow::internal

cpp/src/arrow/util/bpacking_internal.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,16 @@ extern template ARROW_TEMPLATE_EXPORT int unpack<uint32_t>(const uint8_t*, uint3
3535
extern template ARROW_TEMPLATE_EXPORT int unpack<uint64_t>(const uint8_t*, uint64_t*, int,
3636
int);
3737

38+
template <typename Uint>
39+
using UnpackFn = int (*)(const uint8_t* in, Uint* out, int batch_size);
40+
41+
template <typename Uint>
42+
ARROW_EXPORT UnpackFn<Uint> get_unpack_fn(int num_bits);
43+
44+
extern template ARROW_TEMPLATE_EXPORT UnpackFn<uint16_t> get_unpack_fn<uint16_t>(int);
45+
46+
extern template ARROW_TEMPLATE_EXPORT UnpackFn<uint32_t> get_unpack_fn<uint32_t>(int);
47+
48+
extern template ARROW_TEMPLATE_EXPORT UnpackFn<uint64_t> get_unpack_fn<uint64_t>(int);
49+
3850
} // namespace arrow::internal

cpp/src/arrow/util/bpacking_scalar.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,13 @@ template int unpack_scalar<uint16_t>(const uint8_t*, uint16_t*, int, int);
3030
template int unpack_scalar<uint32_t>(const uint8_t*, uint32_t*, int, int);
3131
template int unpack_scalar<uint64_t>(const uint8_t*, uint64_t*, int, int);
3232

33+
template <typename Uint>
34+
UnpackFn<Uint> get_unpack_fn_scalar(int num_bits) {
35+
return get_unpack_fn<ScalarUnpackerForWidth, Uint>(num_bits);
36+
}
37+
38+
template UnpackFn<uint16_t> get_unpack_fn_scalar<uint16_t>(int);
39+
template UnpackFn<uint32_t> get_unpack_fn_scalar<uint32_t>(int);
40+
template UnpackFn<uint64_t> get_unpack_fn_scalar<uint64_t>(int);
41+
3342
} // namespace arrow::internal

cpp/src/arrow/util/bpacking_scalar_internal.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#pragma once
1919

20+
#include "arrow/util/bpacking_internal.h"
2021
#include "arrow/util/visibility.h"
2122

2223
#include <cstdint>
@@ -36,4 +37,16 @@ extern template ARROW_TEMPLATE_EXPORT int unpack_scalar<uint32_t>(const uint8_t*
3637
extern template ARROW_TEMPLATE_EXPORT int unpack_scalar<uint64_t>(const uint8_t*,
3738
uint64_t*, int, int);
3839

40+
template <typename Uint>
41+
ARROW_EXPORT UnpackFn<Uint> get_unpack_fn_scalar(int num_bits);
42+
43+
extern template ARROW_TEMPLATE_EXPORT UnpackFn<uint16_t> get_unpack_fn_scalar<uint16_t>(
44+
int);
45+
46+
extern template ARROW_TEMPLATE_EXPORT UnpackFn<uint32_t> get_unpack_fn_scalar<uint32_t>(
47+
int);
48+
49+
extern template ARROW_TEMPLATE_EXPORT UnpackFn<uint64_t> get_unpack_fn_scalar<uint64_t>(
50+
int);
51+
3952
} // namespace arrow::internal

cpp/src/arrow/util/bpacking_simd_internal.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#pragma once
1919

20+
#include "arrow/util/bpacking_internal.h"
2021
#include "arrow/util/visibility.h"
2122

2223
#include <cstdint>
@@ -37,6 +38,18 @@ extern template ARROW_TEMPLATE_EXPORT int unpack_neon<uint32_t>(const uint8_t*,
3738
extern template ARROW_TEMPLATE_EXPORT int unpack_neon<uint64_t>(const uint8_t*, uint64_t*,
3839
int, int);
3940

41+
template <typename Uint>
42+
ARROW_EXPORT UnpackFn<Uint> get_unpack_fn_neon(int num_bits);
43+
44+
extern template ARROW_TEMPLATE_EXPORT UnpackFn<uint16_t> get_unpack_fn_neon<uint16_t>(
45+
int);
46+
47+
extern template ARROW_TEMPLATE_EXPORT UnpackFn<uint32_t> get_unpack_fn_neon<uint32_t>(
48+
int);
49+
50+
extern template ARROW_TEMPLATE_EXPORT UnpackFn<uint64_t> get_unpack_fn_neon<uint64_t>(
51+
int);
52+
4053
#endif
4154

4255
#if defined(ARROW_HAVE_SSE4_2)

cpp/src/arrow/util/bpacking_simd_min.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,15 @@ template int unpack_neon<uint16_t>(const uint8_t*, uint16_t*, int, int);
3232
template int unpack_neon<uint32_t>(const uint8_t*, uint32_t*, int, int);
3333
template int unpack_neon<uint64_t>(const uint8_t*, uint64_t*, int, int);
3434

35+
template <typename Uint>
36+
UnpackFn<Uint> get_unpack_fn_neon(int num_bits) {
37+
return get_unpack_fn<Simd128UnpackerForWidth, Uint>(num_bits);
38+
}
39+
40+
template UnpackFn<uint16_t> get_unpack_fn_neon<uint16_t>(int);
41+
template UnpackFn<uint32_t> get_unpack_fn_neon<uint32_t>(int);
42+
template UnpackFn<uint64_t> get_unpack_fn_neon<uint64_t>(int);
43+
3544
#endif
3645

3746
#if defined(ARROW_HAVE_SSE4_2)

0 commit comments

Comments
 (0)