enh(sys): add check for avx512vl
This commit is contained in:
parent
6ab14d39bb
commit
5de59a3547
|
@ -184,13 +184,13 @@ ELSE ()
|
||||||
IF (COMPILER_SUPPORT_AVX512F AND COMPILER_SUPPORT_AVX512BMI)
|
IF (COMPILER_SUPPORT_AVX512F AND COMPILER_SUPPORT_AVX512BMI)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f -mavx512vbmi -mavx512vl")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f -mavx512vbmi -mavx512vl")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -mavx512vbmi -mavx512vl")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -mavx512vbmi -mavx512vl")
|
||||||
MESSAGE(STATUS "avx512f/avx512bmi supported by gcc")
|
MESSAGE(STATUS "avx512f/avx512bmi supported by compiler")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF (COMPILER_SUPPORT_AVX512VL)
|
IF (COMPILER_SUPPORT_AVX512VL)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vl")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vl")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512vl")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512vl")
|
||||||
MESSAGE(STATUS "avx512vl supported by gcc")
|
MESSAGE(STATUS "avx512vl supported by compiler")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
|
@ -538,65 +538,66 @@ int32_t tsDecompressTimestampImp(const char *const input, const int32_t nelement
|
||||||
memcpy(output, input + 1, nelements * longBytes);
|
memcpy(output, input + 1, nelements * longBytes);
|
||||||
return nelements * longBytes;
|
return nelements * longBytes;
|
||||||
} else if (input[0] == 1) { // Decompress
|
} else if (input[0] == 1) { // Decompress
|
||||||
int64_t *ostream = (int64_t *)output;
|
if (tsSIMDEnable && tsAVX512Enable) {
|
||||||
|
tsDecompressTimestampAvx512(input, nelements, output, false);
|
||||||
|
} else {
|
||||||
|
int64_t *ostream = (int64_t *)output;
|
||||||
|
|
||||||
int32_t ipos = 1, opos = 0;
|
int32_t ipos = 1, opos = 0;
|
||||||
int8_t nbytes = 0;
|
int8_t nbytes = 0;
|
||||||
int64_t prev_value = 0;
|
int64_t prev_value = 0;
|
||||||
int64_t prev_delta = 0;
|
int64_t prev_delta = 0;
|
||||||
int64_t delta_of_delta = 0;
|
int64_t delta_of_delta = 0;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
uint8_t flags = input[ipos++];
|
uint8_t flags = input[ipos++];
|
||||||
// Decode dd1
|
// Decode dd1
|
||||||
uint64_t dd1 = 0;
|
uint64_t dd1 = 0;
|
||||||
nbytes = flags & INT8MASK(4);
|
nbytes = flags & INT8MASK(4);
|
||||||
if (nbytes == 0) {
|
if (nbytes == 0) {
|
||||||
delta_of_delta = 0;
|
delta_of_delta = 0;
|
||||||
} else {
|
|
||||||
if (is_bigendian()) {
|
|
||||||
memcpy(((char *)(&dd1)) + longBytes - nbytes, input + ipos, nbytes);
|
|
||||||
} else {
|
} else {
|
||||||
memcpy(&dd1, input + ipos, nbytes);
|
if (is_bigendian()) {
|
||||||
|
memcpy(((char *)(&dd1)) + longBytes - nbytes, input + ipos, nbytes);
|
||||||
|
} else {
|
||||||
|
memcpy(&dd1, input + ipos, nbytes);
|
||||||
|
}
|
||||||
|
delta_of_delta = ZIGZAG_DECODE(int64_t, dd1);
|
||||||
}
|
}
|
||||||
delta_of_delta = ZIGZAG_DECODE(int64_t, dd1);
|
|
||||||
}
|
ipos += nbytes;
|
||||||
ipos += nbytes;
|
if (opos == 0) {
|
||||||
if (opos == 0) {
|
prev_value = delta_of_delta;
|
||||||
prev_value = delta_of_delta;
|
prev_delta = 0;
|
||||||
prev_delta = 0;
|
ostream[opos++] = delta_of_delta;
|
||||||
ostream[opos++] = delta_of_delta;
|
} else {
|
||||||
} else {
|
prev_delta = delta_of_delta + prev_delta;
|
||||||
|
prev_value = prev_value + prev_delta;
|
||||||
|
ostream[opos++] = prev_value;
|
||||||
|
}
|
||||||
|
if (opos == nelements) return nelements * longBytes;
|
||||||
|
|
||||||
|
// Decode dd2
|
||||||
|
uint64_t dd2 = 0;
|
||||||
|
nbytes = (flags >> 4) & INT8MASK(4);
|
||||||
|
if (nbytes == 0) {
|
||||||
|
delta_of_delta = 0;
|
||||||
|
} else {
|
||||||
|
if (is_bigendian()) {
|
||||||
|
memcpy(((char *)(&dd2)) + longBytes - nbytes, input + ipos, nbytes);
|
||||||
|
} else {
|
||||||
|
memcpy(&dd2, input + ipos, nbytes);
|
||||||
|
}
|
||||||
|
// zigzag_decoding
|
||||||
|
delta_of_delta = ZIGZAG_DECODE(int64_t, dd2);
|
||||||
|
}
|
||||||
|
ipos += nbytes;
|
||||||
prev_delta = delta_of_delta + prev_delta;
|
prev_delta = delta_of_delta + prev_delta;
|
||||||
prev_value = prev_value + prev_delta;
|
prev_value = prev_value + prev_delta;
|
||||||
ostream[opos++] = prev_value;
|
ostream[opos++] = prev_value;
|
||||||
|
if (opos == nelements) return nelements * longBytes;
|
||||||
}
|
}
|
||||||
if (opos == nelements) return nelements * longBytes;
|
|
||||||
|
|
||||||
// Decode dd2
|
|
||||||
uint64_t dd2 = 0;
|
|
||||||
nbytes = (flags >> 4) & INT8MASK(4);
|
|
||||||
if (nbytes == 0) {
|
|
||||||
delta_of_delta = 0;
|
|
||||||
} else {
|
|
||||||
if (is_bigendian()) {
|
|
||||||
memcpy(((char *)(&dd2)) + longBytes - nbytes, input + ipos, nbytes);
|
|
||||||
} else {
|
|
||||||
memcpy(&dd2, input + ipos, nbytes);
|
|
||||||
}
|
|
||||||
// zigzag_decoding
|
|
||||||
delta_of_delta = ZIGZAG_DECODE(int64_t, dd2);
|
|
||||||
}
|
|
||||||
ipos += nbytes;
|
|
||||||
prev_delta = delta_of_delta + prev_delta;
|
|
||||||
prev_value = prev_value + prev_delta;
|
|
||||||
ostream[opos++] = prev_value;
|
|
||||||
if (opos == nelements) return nelements * longBytes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
|
||||||
ASSERT(0);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue