Arcadia, ARM, PowerPC

This commit is contained in:
Alexey Milovidov 2021-04-15 01:27:53 +03:00
parent f6f0d001cd
commit 7f7e04117d
4 changed files with 30 additions and 8 deletions

View File

@ -1,10 +1,22 @@
add_library(divide_impl_sse2 divideImpl.cpp) # A library for integer division by constant with CPU dispatching.
target_compile_options(divide_impl_sse2 PRIVATE -msse2 -DNAMESPACE=SSE2)
target_link_libraries(divide_impl_sse2 libdivide)
add_library(divide_impl_avx2 divideImpl.cpp) if (ARCH_AMD64)
target_compile_options(divide_impl_avx2 PRIVATE -mavx2 -DNAMESPACE=AVX2) add_library(divide_impl_sse2 divideImpl.cpp)
target_link_libraries(divide_impl_avx2 libdivide) target_compile_options(divide_impl_sse2 PRIVATE -msse2 -DNAMESPACE=SSE2)
target_link_libraries(divide_impl_sse2 libdivide)
add_library(divide_impl_avx2 divideImpl.cpp)
target_compile_options(divide_impl_avx2 PRIVATE -mavx2 -DNAMESPACE=AVX2)
target_link_libraries(divide_impl_avx2 libdivide)
set(IMPLEMENTATIONS divide_impl_sse2 divide_impl_avx2)
else ()
add_library(divide_impl_generic divideImpl.cpp)
target_compile_options(divide_impl_generic PRIVATE -DNAMESPACE=Generic)
target_link_libraries(divide_impl_generic libdivide)
set(IMPLEMENTATIONS divide_impl_generic)
endif ()
add_library(divide_impl divide.cpp) add_library(divide_impl divide.cpp)
target_link_libraries(divide_impl divide_impl_sse2 divide_impl_avx2 clickhouse_common_io) target_link_libraries(divide_impl ${IMPLEMENTATIONS} clickhouse_common_io)

View File

@ -18,10 +18,14 @@ namespace AVX2
template <typename A, typename B, typename ResultType> template <typename A, typename B, typename ResultType>
void divideImpl(const A * __restrict a_pos, B b, ResultType * __restrict c_pos, size_t size) void divideImpl(const A * __restrict a_pos, B b, ResultType * __restrict c_pos, size_t size)
{ {
#if defined(__x86_64__) && !defined(ARCADIA_BUILD)
if (DB::Cpu::CpuFlagsCache::have_AVX2) if (DB::Cpu::CpuFlagsCache::have_AVX2)
AVX2::divideImpl(a_pos, b, c_pos, size); AVX2::divideImpl(a_pos, b, c_pos, size);
else if (DB::Cpu::CpuFlagsCache::have_SSE2) else if (DB::Cpu::CpuFlagsCache::have_SSE2)
SSE2::divideImpl(a_pos, b, c_pos, size); SSE2::divideImpl(a_pos, b, c_pos, size);
#else
Generic::divideImpl(a_pos, b, c_pos, size);
#endif
} }

View File

@ -2,7 +2,11 @@
/// with different values of NAMESPACE and machine flags (sse2, avx2). /// with different values of NAMESPACE and machine flags (sse2, avx2).
#if !defined(NAMESPACE) #if !defined(NAMESPACE)
#error "NAMESPACE macro must be defined" #if defined(ARCADIA_BUILD)
#define NAMESPACE Generic
#else
#error "NAMESPACE macro must be defined"
#endif
#endif #endif
#if defined(__AVX2__) #if defined(__AVX2__)

View File

@ -229,6 +229,8 @@ SRCS(
defaultValueOfTypeName.cpp defaultValueOfTypeName.cpp
demange.cpp demange.cpp
divide.cpp divide.cpp
divide/divide.cpp
divide/divideImpl.cpp
dumpColumnStructure.cpp dumpColumnStructure.cpp
e.cpp e.cpp
empty.cpp empty.cpp