mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 15:42:02 +00:00
Merge pull request #37480 from kitaisreal/dynamic-dispatch-infrastructure-improvements
Dynamic dispatch infrastructure style fixes
This commit is contained in:
commit
3c0c322d7c
@ -59,11 +59,11 @@ struct AggregateFunctionSumData
|
||||
}
|
||||
|
||||
/// Vectorized version
|
||||
MULTITARGET_FUNCTION_WRAPPER_AVX2_SSE42(addManyImpl,
|
||||
MULTITARGET_FH(
|
||||
MULTITARGET_FUNCTION_AVX2_SSE42(
|
||||
MULTITARGET_FUNCTION_HEADER(
|
||||
template <typename Value>
|
||||
void NO_SANITIZE_UNDEFINED NO_INLINE
|
||||
), /*addManyImpl*/ MULTITARGET_FB((const Value * __restrict ptr, size_t start, size_t end) /// NOLINT
|
||||
), addManyImpl, MULTITARGET_FUNCTION_BODY((const Value * __restrict ptr, size_t start, size_t end) /// NOLINT
|
||||
{
|
||||
ptr += start;
|
||||
size_t count = end - start;
|
||||
@ -122,11 +122,11 @@ struct AggregateFunctionSumData
|
||||
addManyImpl(ptr, start, end);
|
||||
}
|
||||
|
||||
MULTITARGET_FUNCTION_WRAPPER_AVX2_SSE42(addManyConditionalInternalImpl,
|
||||
MULTITARGET_FH(
|
||||
MULTITARGET_FUNCTION_AVX2_SSE42(
|
||||
MULTITARGET_FUNCTION_HEADER(
|
||||
template <typename Value, bool add_if_zero>
|
||||
void NO_SANITIZE_UNDEFINED NO_INLINE
|
||||
), /*addManyConditionalInternalImpl*/ MULTITARGET_FB((const Value * __restrict ptr, const UInt8 * __restrict condition_map, size_t start, size_t end) /// NOLINT
|
||||
), addManyConditionalInternalImpl, MULTITARGET_FUNCTION_BODY((const Value * __restrict ptr, const UInt8 * __restrict condition_map, size_t start, size_t end) /// NOLINT
|
||||
{
|
||||
ptr += start;
|
||||
size_t count = end - start;
|
||||
|
@ -233,8 +233,8 @@ DECLARE_AVX512F_SPECIFIC_CODE(
|
||||
* class TestClass
|
||||
* {
|
||||
* public:
|
||||
* MULTITARGET_FUNCTION_WRAPPER_AVX2_SSE42(testFunctionImpl,
|
||||
* MULTITARGET_FH(int), /\*testFunction*\/ MULTITARGET_FB((int value)
|
||||
* MULTITARGET_FUNCTION_AVX2_SSE42(
|
||||
* MULTITARGET_FUNCTION_HEADER(int), testFunctionImpl, MULTITARGET_FUNCTION_BODY((int value)
|
||||
* {
|
||||
* return value;
|
||||
* })
|
||||
@ -259,15 +259,15 @@ DECLARE_AVX512F_SPECIFIC_CODE(
|
||||
*/
|
||||
|
||||
/// Function header
|
||||
#define MULTITARGET_FH(...) __VA_ARGS__
|
||||
#define MULTITARGET_FUNCTION_HEADER(...) __VA_ARGS__
|
||||
|
||||
/// Function body
|
||||
#define MULTITARGET_FB(...) __VA_ARGS__
|
||||
#define MULTITARGET_FUNCTION_BODY(...) __VA_ARGS__
|
||||
|
||||
#if ENABLE_MULTITARGET_CODE && defined(__GNUC__) && defined(__x86_64__)
|
||||
|
||||
/// NOLINTNEXTLINE
|
||||
#define MULTITARGET_FUNCTION_WRAPPER_AVX2_SSE42(name, FUNCTION_HEADER, FUNCTION_BODY) \
|
||||
#define MULTITARGET_FUNCTION_AVX2_SSE42(FUNCTION_HEADER, name, FUNCTION_BODY) \
|
||||
FUNCTION_HEADER \
|
||||
\
|
||||
AVX2_FUNCTION_SPECIFIC_ATTRIBUTE \
|
||||
@ -288,7 +288,7 @@ DECLARE_AVX512F_SPECIFIC_CODE(
|
||||
#else
|
||||
|
||||
/// NOLINTNEXTLINE
|
||||
#define MULTITARGET_FUNCTION_WRAPPER_AVX2_SSE42(name, FUNCTION_HEADER, FUNCTION_BODY) \
|
||||
#define MULTITARGET_FUNCTION_AVX2_SSE42(FUNCTION_HEADER, name, FUNCTION_BODY) \
|
||||
FUNCTION_HEADER \
|
||||
\
|
||||
name \
|
||||
|
@ -42,9 +42,8 @@ struct UnaryOperationImpl
|
||||
using ArrayA = typename ColVecA::Container;
|
||||
using ArrayC = typename ColVecC::Container;
|
||||
|
||||
MULTITARGET_FUNCTION_WRAPPER_AVX2_SSE42(vectorImpl,
|
||||
MULTITARGET_FH(
|
||||
static void NO_INLINE), /*vectorImpl*/ MULTITARGET_FB((const ArrayA & a, ArrayC & c) /// NOLINT
|
||||
MULTITARGET_FUNCTION_AVX2_SSE42(
|
||||
MULTITARGET_FUNCTION_HEADER(static void NO_INLINE), vectorImpl, MULTITARGET_FUNCTION_BODY((const ArrayA & a, ArrayC & c) /// NOLINT
|
||||
{
|
||||
size_t size = a.size();
|
||||
for (size_t i = 0; i < size; ++i)
|
||||
@ -79,9 +78,9 @@ struct UnaryOperationImpl
|
||||
template <typename Op>
|
||||
struct FixedStringUnaryOperationImpl
|
||||
{
|
||||
MULTITARGET_FUNCTION_WRAPPER_AVX2_SSE42(vectorImpl,
|
||||
MULTITARGET_FH(
|
||||
static void NO_INLINE), /*vectorImpl*/ MULTITARGET_FB((const ColumnFixedString::Chars & a, ColumnFixedString::Chars & c) /// NOLINT
|
||||
MULTITARGET_FUNCTION_AVX2_SSE42(
|
||||
MULTITARGET_FUNCTION_HEADER(static void NO_INLINE), vectorImpl, MULTITARGET_FUNCTION_BODY((const ColumnFixedString::Chars & a, /// NOLINT
|
||||
ColumnFixedString::Chars & c)
|
||||
{
|
||||
size_t size = a.size();
|
||||
for (size_t i = 0; i < size; ++i)
|
||||
|
@ -85,8 +85,9 @@ struct NumComparisonImpl
|
||||
using ContainerA = PaddedPODArray<A>;
|
||||
using ContainerB = PaddedPODArray<B>;
|
||||
|
||||
MULTITARGET_FUNCTION_WRAPPER_AVX2_SSE42(vectorVectorImpl,
|
||||
MULTITARGET_FH(static void), /*vectorVectorImpl*/ MULTITARGET_FB((const ContainerA & a, const ContainerB & b, PaddedPODArray<UInt8> & c) /// NOLINT
|
||||
MULTITARGET_FUNCTION_AVX2_SSE42(
|
||||
MULTITARGET_FUNCTION_HEADER(static void), vectorVectorImpl, MULTITARGET_FUNCTION_BODY(( /// NOLINT
|
||||
const ContainerA & a, const ContainerB & b, PaddedPODArray<UInt8> & c)
|
||||
{
|
||||
/** GCC 4.8.2 vectorizes a loop only if it is written in this form.
|
||||
* In this case, if you loop through the array index (the code will look simpler),
|
||||
@ -127,8 +128,9 @@ struct NumComparisonImpl
|
||||
}
|
||||
|
||||
|
||||
MULTITARGET_FUNCTION_WRAPPER_AVX2_SSE42(vectorConstantImpl,
|
||||
MULTITARGET_FH(static void), /*vectorConstantImpl*/ MULTITARGET_FB((const ContainerA & a, B b, PaddedPODArray<UInt8> & c) /// NOLINT
|
||||
MULTITARGET_FUNCTION_AVX2_SSE42(
|
||||
MULTITARGET_FUNCTION_HEADER(static void), vectorConstantImpl, MULTITARGET_FUNCTION_BODY(( /// NOLINT
|
||||
const ContainerA & a, B b, PaddedPODArray<UInt8> & c)
|
||||
{
|
||||
size_t size = a.size();
|
||||
const A * __restrict a_pos = a.data();
|
||||
|
@ -1,6 +1,4 @@
|
||||
<test>
|
||||
|
||||
|
||||
<substitutions>
|
||||
<substitution>
|
||||
<name>func</name>
|
||||
|
Loading…
Reference in New Issue
Block a user