mapleFU commented on code in PR #40335:
URL: https://github.com/apache/arrow/pull/40335#discussion_r1515597874
##########
cpp/src/arrow/util/byte_stream_split_internal.h:
##########
@@ -64,46 +67,48 @@ void ByteStreamSplitDecodeSse2(const uint8_t* data, int64_t
num_values, int64_t
// Stage 1: AAAA BBBB CCCC DDDD
// Stage 2: ACAC ACAC BDBD BDBD
// Stage 3: ABCD ABCD ABCD ABCD
- __m128i stage[kNumStreamsLog2 + 1][kNumStreams];
+ simd_batch stage[kNumStreamsLog2 + 1][kNumStreams];
constexpr int kNumStreamsHalf = kNumStreams / 2U;
for (int64_t i = 0; i < num_blocks; ++i) {
for (int j = 0; j < kNumStreams; ++j) {
- stage[0][j] = _mm_loadu_si128(
- reinterpret_cast<const __m128i*>(&data[i * sizeof(__m128i) + j *
stride]));
+ stage[0][j] =
+ simd_batch::load_unaligned(&data[i * sizeof(simd_batch) + j *
stride]);
}
for (int step = 0; step < kNumStreamsLog2; ++step) {
for (int j = 0; j < kNumStreamsHalf; ++j) {
stage[step + 1U][j * 2] =
- _mm_unpacklo_epi8(stage[step][j], stage[step][kNumStreamsHalf +
j]);
+ xsimd::zip_lo(stage[step][j], stage[step][kNumStreamsHalf + j]);
stage[step + 1U][j * 2 + 1U] =
- _mm_unpackhi_epi8(stage[step][j], stage[step][kNumStreamsHalf +
j]);
+ xsimd::zip_hi(stage[step][j], stage[step][kNumStreamsHalf + j]);
}
}
for (int j = 0; j < kNumStreams; ++j) {
- _mm_storeu_si128(
- reinterpret_cast<__m128i*>(out + (i * kNumStreams + j) *
sizeof(__m128i)),
+ xsimd::store_unaligned(
+ reinterpret_cast<int8_t*>(out + (i * kNumStreams + j) *
sizeof(simd_batch)),
stage[kNumStreamsLog2][j]);
}
}
}
template <int kNumStreams>
-void ByteStreamSplitEncodeSse2(const uint8_t* raw_values, const int64_t
num_values,
+void ByteStreamSplitEncode128B(const uint8_t* raw_values, const int64_t
num_values,
uint8_t* output_buffer_raw) {
+ using simd_batch = xsimd::make_sized_batch_t<int8_t, 16>;
+ using simd_arch = typename simd_batch::arch_type;
+
static_assert(kNumStreams == 4 || kNumStreams == 8, "Invalid number of
streams.");
- constexpr int kBlockSize = sizeof(__m128i) * kNumStreams;
+ constexpr int kBlockSize = sizeof(simd_batch) * kNumStreams;
- __m128i stage[3][kNumStreams];
- __m128i final_result[kNumStreams];
+ simd_batch stage[3][kNumStreams];
+ simd_batch final_result[kNumStreams];
const int64_t size = num_values * kNumStreams;
const int64_t num_blocks = size / kBlockSize;
- const __m128i* raw_values_sse = reinterpret_cast<const __m128i*>(raw_values);
- __m128i* output_buffer_streams[kNumStreams];
+ int8_t* output_buffer_streams[kNumStreams];
Review Comment:
change to int8_t here.
--
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]