diff options
author | fixthgame <fixthgame@yandex-team.com> | 2023-10-16 12:13:35 +0300 |
---|---|---|
committer | fixthgame <fixthgame@yandex-team.com> | 2023-10-16 13:04:36 +0300 |
commit | 9f375a40b7c12df484072d0accc3ca926ed04a0c (patch) | |
tree | 3455f72b2632c888d820af15d291e15d51e1a3e0 | |
parent | 51e254a4c50cdbbbd098b372428cd6e840c29241 (diff) | |
download | ydb-9f375a40b7c12df484072d0accc3ca926ed04a0c.tar.gz |
Runtime dispatch для тестов simd
PR Issues
26 files changed, 391 insertions, 104 deletions
diff --git a/.mapping.json b/.mapping.json index dda1b97d627..fa806a58411 100644 --- a/.mapping.json +++ b/.mapping.json @@ -8581,6 +8581,12 @@ "ydb/library/yql/utils/log/ut/CMakeLists.linux-x86_64.txt":"", "ydb/library/yql/utils/log/ut/CMakeLists.txt":"", "ydb/library/yql/utils/log/ut/CMakeLists.windows-x86_64.txt":"", + "ydb/library/yql/utils/simd/CMakeLists.txt":"", + "ydb/library/yql/utils/simd/ut/CMakeLists.darwin-x86_64.txt":"", + "ydb/library/yql/utils/simd/ut/CMakeLists.linux-aarch64.txt":"", + "ydb/library/yql/utils/simd/ut/CMakeLists.linux-x86_64.txt":"", + "ydb/library/yql/utils/simd/ut/CMakeLists.txt":"", + "ydb/library/yql/utils/simd/ut/CMakeLists.windows-x86_64.txt":"", "ydb/library/yql/utils/test_http_server/CMakeLists.darwin-x86_64.txt":"", "ydb/library/yql/utils/test_http_server/CMakeLists.linux-aarch64.txt":"", "ydb/library/yql/utils/test_http_server/CMakeLists.linux-x86_64.txt":"", diff --git a/ydb/library/yql/minikql/comp_nodes/block_join/avx2/begin.h b/ydb/library/yql/minikql/comp_nodes/block_join/avx2/begin.h deleted file mode 100644 index 81d8f3ca346..00000000000 --- a/ydb/library/yql/minikql/comp_nodes/block_join/avx2/begin.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma clang attribute push(__attribute__((target("avx2"))), apply_to=function) - -#include "simd.h"
\ No newline at end of file diff --git a/ydb/library/yql/minikql/comp_nodes/block_join/avx2/end.h b/ydb/library/yql/minikql/comp_nodes/block_join/avx2/end.h deleted file mode 100644 index fcef763036d..00000000000 --- a/ydb/library/yql/minikql/comp_nodes/block_join/avx2/end.h +++ /dev/null @@ -1 +0,0 @@ -#pragma clang attribute pop
\ No newline at end of file diff --git a/ydb/library/yql/minikql/comp_nodes/block_join/sse42/begin.h b/ydb/library/yql/minikql/comp_nodes/block_join/sse42/begin.h deleted file mode 100644 index 00fffa0930b..00000000000 --- a/ydb/library/yql/minikql/comp_nodes/block_join/sse42/begin.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma clang attribute push(__attribute__((target("sse4.2"))), apply_to=function) - -#include "simd.h"
\ No newline at end of file diff --git a/ydb/library/yql/minikql/comp_nodes/block_join/sse42/end.h b/ydb/library/yql/minikql/comp_nodes/block_join/sse42/end.h deleted file mode 100644 index fcef763036d..00000000000 --- a/ydb/library/yql/minikql/comp_nodes/block_join/sse42/end.h +++ /dev/null @@ -1 +0,0 @@ -#pragma clang attribute pop
\ No newline at end of file diff --git a/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.darwin-x86_64.txt b/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.darwin-x86_64.txt index a9093adef46..db9defebb18 100644 --- a/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.darwin-x86_64.txt +++ b/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.darwin-x86_64.txt @@ -67,7 +67,6 @@ target_sources(ydb-library-yql-minikql-comp_nodes-ut PRIVATE ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_match_recognize_nfa_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_safe_circular_buffer_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_sort_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_simd_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_switch_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_todict_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_variant_ut.cpp diff --git a/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-aarch64.txt b/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-aarch64.txt index 5985b8ce5b1..857bcf4069e 100644 --- a/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-aarch64.txt +++ b/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-aarch64.txt @@ -70,7 +70,6 @@ target_sources(ydb-library-yql-minikql-comp_nodes-ut PRIVATE ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_match_recognize_nfa_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_safe_circular_buffer_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_sort_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_simd_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_switch_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_todict_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_variant_ut.cpp diff --git a/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-x86_64.txt b/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-x86_64.txt index 2338c769a34..e408761f3fa 100644 --- a/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-x86_64.txt +++ b/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-x86_64.txt @@ -71,7 +71,6 @@ target_sources(ydb-library-yql-minikql-comp_nodes-ut PRIVATE ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_match_recognize_nfa_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_safe_circular_buffer_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_sort_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_simd_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_switch_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_todict_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_variant_ut.cpp diff --git a/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.windows-x86_64.txt b/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.windows-x86_64.txt index 1ab6b7d7ef8..502d7e90d46 100644 --- a/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.windows-x86_64.txt +++ b/ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.windows-x86_64.txt @@ -60,7 +60,6 @@ target_sources(ydb-library-yql-minikql-comp_nodes-ut PRIVATE ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_match_recognize_nfa_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_safe_circular_buffer_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_sort_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_simd_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_switch_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_todict_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/library/yql/minikql/comp_nodes/ut/mkql_variant_ut.cpp diff --git a/ydb/library/yql/minikql/comp_nodes/ut/ya.make b/ydb/library/yql/minikql/comp_nodes/ut/ya.make index 4f404936abd..0c66c6c5415 100644 --- a/ydb/library/yql/minikql/comp_nodes/ut/ya.make +++ b/ydb/library/yql/minikql/comp_nodes/ut/ya.make @@ -49,7 +49,6 @@ SRCS( mkql_match_recognize_nfa_ut.cpp mkql_safe_circular_buffer_ut.cpp mkql_sort_ut.cpp - mkql_simd_ut.cpp mkql_switch_ut.cpp mkql_todict_ut.cpp mkql_variant_ut.cpp diff --git a/ydb/library/yql/utils/CMakeLists.darwin-x86_64.txt b/ydb/library/yql/utils/CMakeLists.darwin-x86_64.txt index 5cd31bf90fb..edaa00c8e78 100644 --- a/ydb/library/yql/utils/CMakeLists.darwin-x86_64.txt +++ b/ydb/library/yql/utils/CMakeLists.darwin-x86_64.txt @@ -14,6 +14,7 @@ add_subdirectory(bindings) add_subdirectory(failure_injector) add_subdirectory(fetch) add_subdirectory(log) +add_subdirectory(simd) add_subdirectory(test_http_server) add_subdirectory(threading) add_subdirectory(ut) diff --git a/ydb/library/yql/utils/CMakeLists.linux-aarch64.txt b/ydb/library/yql/utils/CMakeLists.linux-aarch64.txt index 0bc25507b2e..4c3b7469694 100644 --- a/ydb/library/yql/utils/CMakeLists.linux-aarch64.txt +++ b/ydb/library/yql/utils/CMakeLists.linux-aarch64.txt @@ -14,6 +14,7 @@ add_subdirectory(bindings) add_subdirectory(failure_injector) add_subdirectory(fetch) add_subdirectory(log) +add_subdirectory(simd) add_subdirectory(test_http_server) add_subdirectory(threading) add_subdirectory(ut) diff --git a/ydb/library/yql/utils/CMakeLists.linux-x86_64.txt b/ydb/library/yql/utils/CMakeLists.linux-x86_64.txt index 0bc25507b2e..4c3b7469694 100644 --- a/ydb/library/yql/utils/CMakeLists.linux-x86_64.txt +++ b/ydb/library/yql/utils/CMakeLists.linux-x86_64.txt @@ -14,6 +14,7 @@ add_subdirectory(bindings) add_subdirectory(failure_injector) add_subdirectory(fetch) add_subdirectory(log) +add_subdirectory(simd) add_subdirectory(test_http_server) add_subdirectory(threading) add_subdirectory(ut) diff --git a/ydb/library/yql/utils/CMakeLists.windows-x86_64.txt b/ydb/library/yql/utils/CMakeLists.windows-x86_64.txt index 5cd31bf90fb..edaa00c8e78 100644 --- a/ydb/library/yql/utils/CMakeLists.windows-x86_64.txt +++ b/ydb/library/yql/utils/CMakeLists.windows-x86_64.txt @@ -14,6 +14,7 @@ add_subdirectory(bindings) add_subdirectory(failure_injector) add_subdirectory(fetch) add_subdirectory(log) +add_subdirectory(simd) add_subdirectory(test_http_server) add_subdirectory(threading) add_subdirectory(ut) diff --git a/ydb/library/yql/utils/simd/CMakeLists.txt b/ydb/library/yql/utils/simd/CMakeLists.txt new file mode 100644 index 00000000000..1703b0a27bf --- /dev/null +++ b/ydb/library/yql/utils/simd/CMakeLists.txt @@ -0,0 +1,9 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + +add_subdirectory(ut) diff --git a/ydb/library/yql/minikql/comp_nodes/block_join/avx2/simd.h b/ydb/library/yql/utils/simd/simd_avx2.h index 45beff01d33..97e3d951999 100644 --- a/ydb/library/yql/minikql/comp_nodes/block_join/avx2/simd.h +++ b/ydb/library/yql/utils/simd/simd_avx2.h @@ -3,11 +3,8 @@ #include <cstdint> #include <immintrin.h> -namespace NKikimr { -namespace NMiniKQL { -namespace NBlockJoin { +namespace NSimd { namespace NAVX2 { -namespace NSIMD { template <typename T> struct TSimd8; @@ -318,7 +315,4 @@ struct TSimd8<ui8>: TBase8Numeric<ui8> { }; } -} -} -} }
\ No newline at end of file diff --git a/ydb/library/yql/minikql/comp_nodes/block_join/sse42/simd.h b/ydb/library/yql/utils/simd/simd_sse42.h index 71201ce40a7..d2d74dc0e72 100644 --- a/ydb/library/yql/minikql/comp_nodes/block_join/sse42/simd.h +++ b/ydb/library/yql/utils/simd/simd_sse42.h @@ -3,11 +3,8 @@ #include <cstdint> #include <immintrin.h> -namespace NKikimr { -namespace NMiniKQL { -namespace NBlockJoin { +namespace NSimd { namespace NSSE42 { -namespace NSIMD { template <typename T> struct TSimd8; @@ -304,7 +301,4 @@ struct TSimd8<ui8>: TBase8Numeric<ui8> { }; } -} -} -} }
\ No newline at end of file diff --git a/ydb/library/yql/minikql/comp_nodes/ut/mkql_simd_ut.cpp b/ydb/library/yql/utils/simd/simd_ut.cpp index 70ebcb8a22c..b13421a6e48 100644 --- a/ydb/library/yql/minikql/comp_nodes/ut/mkql_simd_ut.cpp +++ b/ydb/library/yql/utils/simd/simd_ut.cpp @@ -1,41 +1,47 @@ #include <library/cpp/testing/unittest/registar.h> #include <util/system/cpu_id.h> -#if __AVX2__ -#include <ydb/library/yql/minikql/comp_nodes/block_join/avx2/begin.h> -Y_UNIT_TEST_SUITE(TMiniKQLBlockJoinHaswell) { - using namespace NKikimr::NMiniKQL::NBlockJoin::NAVX2::NSIMD; +#pragma clang attribute push(__attribute__((target("avx2"))), apply_to=function) +#include <ydb/library/yql/utils/simd/simd_avx2.h> +Y_UNIT_TEST_SUITE(TSimdAVX2) { + using namespace NSimd::NAVX2; Y_UNIT_TEST(SimdBool) { - TSimd8<bool> tr(true); - TSimd8<bool> fal(false); - UNIT_ASSERT_EQUAL(tr.Any(), true); - UNIT_ASSERT_EQUAL(fal.Any(), false); - UNIT_ASSERT_UNEQUAL(tr.Any(), fal.Any()); - UNIT_ASSERT_EQUAL(tr.Any(), (tr ^ fal).Any()); - UNIT_ASSERT_EQUAL(fal.Any(), (tr ^ tr).Any()); - UNIT_ASSERT_EQUAL(fal.Any(), (tr & fal).Any()); - UNIT_ASSERT_EQUAL((~tr).Any(), fal.Any()); - UNIT_ASSERT_EQUAL((~fal).Any(), tr.Any()); + if (!NX86::HaveAVX2()) { + return; + } + TSimd8<bool> tr(true); + TSimd8<bool> fal(false); + UNIT_ASSERT_EQUAL(tr.Any(), true); + UNIT_ASSERT_EQUAL(fal.Any(), false); + UNIT_ASSERT_UNEQUAL(tr.Any(), fal.Any()); + UNIT_ASSERT_EQUAL(tr.Any(), (tr ^ fal).Any()); + UNIT_ASSERT_EQUAL(fal.Any(), (tr ^ tr).Any()); + UNIT_ASSERT_EQUAL(fal.Any(), (tr & fal).Any()); + UNIT_ASSERT_EQUAL((~tr).Any(), fal.Any()); + UNIT_ASSERT_EQUAL((~fal).Any(), tr.Any()); - TSimd8<bool> bit_or = tr | fal; - UNIT_ASSERT_EQUAL(bit_or.Any(), tr.Any()); - - TSimd8<bool> tr_m(_mm256_set_epi32(-1, -1, -1, -1, -1, -1, -1, -1)); - UNIT_ASSERT_EQUAL((tr_m == tr).Any(), TSimd8<bool>(true).Any()); + TSimd8<bool> bit_or = tr | fal; + UNIT_ASSERT_EQUAL(bit_or.Any(), tr.Any()); + + TSimd8<bool> tr_m(_mm256_set_epi32(-1, -1, -1, -1, -1, -1, -1, -1)); + UNIT_ASSERT_EQUAL((tr_m == tr).Any(), TSimd8<bool>(true).Any()); } - Y_UNIT_TEST(SimdUInt) { + Y_UNIT_TEST(SimdUInt8) { + if (!NX86::HaveAVX2()) { + return; + } __m256i x = _mm256_set1_epi8(0U); - uint8_t arr[32]; + ui8 arr[32]; for (auto &i : arr) { i = 0; } - TSimd8<uint8_t> a(x), b(arr), c(uint8_t(0)); + TSimd8<ui8> a(x), b(arr), c(ui8(0)); UNIT_ASSERT_EQUAL((a == b).Any(), true); UNIT_ASSERT_EQUAL((b == c).Any(), true); - UNIT_ASSERT_EQUAL((c == TSimd8<uint8_t>::Zero()).Any(), true); + UNIT_ASSERT_EQUAL((c == TSimd8<ui8>::Zero()).Any(), true); - a = TSimd8<uint8_t>(uint8_t(50)); - b = TSimd8<uint8_t>(uint8_t(49)); + a = TSimd8<ui8>(ui8(50)); + b = TSimd8<ui8>(ui8(49)); UNIT_ASSERT_EQUAL((a.MaxValue(b) == a).Any(), true); UNIT_ASSERT_EQUAL((a.MinValue(b) == b).Any(), true); UNIT_ASSERT_EQUAL((a.MinValue(b) == a).Any(), false); @@ -45,55 +51,52 @@ Y_UNIT_TEST_SUITE(TMiniKQLBlockJoinHaswell) { UNIT_ASSERT_EQUAL(a.AnyBitsSet().Any(), true); - TSimd8<uint8_t> a2(uint8_t(100)); - TSimd8<uint8_t> a3(uint8_t(25)); + TSimd8<ui8> a2(ui8(100)); + TSimd8<ui8> a3(ui8(25)); UNIT_ASSERT_EQUAL((a.Shl<1>() == a2).Any(), true); UNIT_ASSERT_EQUAL((a.Shr<1>() == a3).Any(), true); UNIT_ASSERT_EQUAL((a.Shr<8>() == c).Any(), true); } - Y_UNIT_TEST(SimdInt) { + Y_UNIT_TEST(SimdInt8) { + if (!NX86::HaveAVX2()) { + return; + } __m256i x = _mm256_set1_epi8(0); - int8_t arr[32]; + i8 arr[32]; for (auto &i : arr) { i = 0; } - TSimd8<int8_t> a(x), b(arr), c(int8_t(0)); + TSimd8<i8> a(x), b(arr), c(i8(0)); UNIT_ASSERT_EQUAL((a == b).Any(), true); UNIT_ASSERT_EQUAL((b == c).Any(), true); - UNIT_ASSERT_EQUAL((c == TSimd8<int8_t>::Zero()).Any(), true); + UNIT_ASSERT_EQUAL((c == TSimd8<i8>::Zero()).Any(), true); - a = TSimd8<int8_t>(int8_t(50)); - b = TSimd8<int8_t>(int8_t(49)); + a = TSimd8<i8>(i8(50)); + b = TSimd8<i8>(i8(49)); UNIT_ASSERT_EQUAL((a.MaxValue(b) == a).Any(), true); UNIT_ASSERT_EQUAL((a.MinValue(b) == b).Any(), true); UNIT_ASSERT_EQUAL((a.MinValue(b) == a).Any(), false); - TSimd8<int8_t> a2(int8_t(5)); - TSimd8<int8_t> a3(int8_t(25)); - a = TSimd8<int8_t>(int8_t(15)); - b = TSimd8<int8_t>(int8_t(10)); + TSimd8<i8> a2(i8(5)); + TSimd8<i8> a3(i8(25)); + a = TSimd8<i8>(i8(15)); + b = TSimd8<i8>(i8(10)); UNIT_ASSERT_EQUAL(((a + b) == a3).Any(), true); UNIT_ASSERT_EQUAL(((a - b) == a2).Any(), true); } } +#pragma clang attribute pop -#include <ydb/library/yql/minikql/comp_nodes/block_join/avx2/end.h> -#else -Y_UNIT_TEST_SUITE(TMiniKQLBlockJoinHaswell) { - Y_UNIT_TEST(SimdBool) {} - Y_UNIT_TEST(SimdUInt) {} - Y_UNIT_TEST(SimdInt) {} -} -#endif - -#if __SSE4_2__ -#include <ydb/library/yql/minikql/comp_nodes/block_join/sse42/begin.h> -Y_UNIT_TEST_SUITE(TMiniKQLBlockJoinWestmere) { - using namespace NKikimr::NMiniKQL::NBlockJoin::NSSE42::NSIMD; +#pragma clang attribute push(__attribute__((target("sse4.2"))), apply_to=function) +#include <ydb/library/yql/utils/simd/simd_sse42.h> +Y_UNIT_TEST_SUITE(TSimdSSE42) { + using namespace NSimd::NSSE42; Y_UNIT_TEST(SimdBool) { - + if (!NX86::HaveSSE42()) { + return; + } TSimd8<bool> tr(true); TSimd8<bool> fal(false); UNIT_ASSERT_EQUAL(tr.Any(), true); @@ -111,19 +114,22 @@ Y_UNIT_TEST_SUITE(TMiniKQLBlockJoinWestmere) { TSimd8<bool> tr_m(_mm_set_epi32(-1, -1, -1, -1)); UNIT_ASSERT_EQUAL((tr_m == tr).Any(), TSimd8<bool>(true).Any()); } - Y_UNIT_TEST(SimdUInt) { + Y_UNIT_TEST(SimdUInt8) { + if (!NX86::HaveSSE42()) { + return; + } __m128i x = _mm_set1_epi8(0U); - uint8_t arr[16]; + ui8 arr[16]; for (auto &i : arr) { i = 0; } - TSimd8<uint8_t> a(x), b(arr), c(uint8_t(0)); + TSimd8<ui8> a(x), b(arr), c(ui8(0)); UNIT_ASSERT_EQUAL((a == b).Any(), true); UNIT_ASSERT_EQUAL((b == c).Any(), true); - UNIT_ASSERT_EQUAL((c == TSimd8<uint8_t>::Zero()).Any(), true); + UNIT_ASSERT_EQUAL((c == TSimd8<ui8>::Zero()).Any(), true); - a = TSimd8<uint8_t>(uint8_t(50)); - b = TSimd8<uint8_t>(uint8_t(49)); + a = TSimd8<ui8>(ui8(50)); + b = TSimd8<ui8>(ui8(49)); UNIT_ASSERT_EQUAL((a.MaxValue(b) == a).Any(), true); UNIT_ASSERT_EQUAL((a.MinValue(b) == b).Any(), true); UNIT_ASSERT_EQUAL((a.MinValue(b) == a).Any(), false); @@ -133,44 +139,40 @@ Y_UNIT_TEST_SUITE(TMiniKQLBlockJoinWestmere) { UNIT_ASSERT_EQUAL(a.AnyBitsSet().Any(), true); - TSimd8<uint8_t> a2(uint8_t(100)); - TSimd8<uint8_t> a3(uint8_t(25)); + TSimd8<ui8> a2(ui8(100)); + TSimd8<ui8> a3(ui8(25)); UNIT_ASSERT_EQUAL((a.Shl<1>() == a2).Any(), true); UNIT_ASSERT_EQUAL((a.Shr<1>() == a3).Any(), true); UNIT_ASSERT_EQUAL((a.Shr<8>() == c).Any(), true); } - Y_UNIT_TEST(SimdInt) { + Y_UNIT_TEST(SimdInt8) { + if (!NX86::HaveSSE42()) { + return; + } __m128i x = _mm_set1_epi8(0); - int8_t arr[16]; + i8 arr[16]; for (auto &i : arr) { i = 0; } - TSimd8<int8_t> a(x), b(arr), c(int8_t(0)); + TSimd8<i8> a(x), b(arr), c(i8(0)); UNIT_ASSERT_EQUAL((a == b).Any(), true); UNIT_ASSERT_EQUAL((b == c).Any(), true); - UNIT_ASSERT_EQUAL((c == TSimd8<int8_t>::Zero()).Any(), true); + UNIT_ASSERT_EQUAL((c == TSimd8<i8>::Zero()).Any(), true); - a = TSimd8<int8_t>(int8_t(50)); - b = TSimd8<int8_t>(int8_t(49)); + a = TSimd8<i8>(i8(50)); + b = TSimd8<i8>(i8(49)); UNIT_ASSERT_EQUAL((a.MaxValue(b) == a).Any(), true); UNIT_ASSERT_EQUAL((a.MinValue(b) == b).Any(), true); UNIT_ASSERT_EQUAL((a.MinValue(b) == a).Any(), false); - TSimd8<int8_t> a2(int8_t(5)); - TSimd8<int8_t> a3(int8_t(25)); - a = TSimd8<int8_t>(int8_t(15)); - b = TSimd8<int8_t>(int8_t(10)); + TSimd8<i8> a2(i8(5)); + TSimd8<i8> a3(i8(25)); + a = TSimd8<i8>(i8(15)); + b = TSimd8<i8>(i8(10)); UNIT_ASSERT_EQUAL(((a + b) == a3).Any(), true); UNIT_ASSERT_EQUAL(((a - b) == a2).Any(), true); } } -#include <ydb/library/yql/minikql/comp_nodes/block_join/sse42/end.h> -#else -Y_UNIT_TEST_SUITE(TMiniKQLBlockJoinWestmere) { - Y_UNIT_TEST(SimdBool) {} - Y_UNIT_TEST(SimdUInt) {} - Y_UNIT_TEST(SimdInt) {} -} -#endif
\ No newline at end of file +#pragma clang attribute pop
\ No newline at end of file diff --git a/ydb/library/yql/utils/simd/ut/CMakeLists.darwin-x86_64.txt b/ydb/library/yql/utils/simd/ut/CMakeLists.darwin-x86_64.txt new file mode 100644 index 00000000000..1f0851bb5d9 --- /dev/null +++ b/ydb/library/yql/utils/simd/ut/CMakeLists.darwin-x86_64.txt @@ -0,0 +1,64 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_executable(ydb-library-yql-utils-simd-ut) +target_include_directories(ydb-library-yql-utils-simd-ut PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/utils/simd +) +target_link_libraries(ydb-library-yql-utils-simd-ut PUBLIC + contrib-libs-cxxsupp + yutil + library-cpp-cpuid_check + cpp-testing-unittest_main +) +target_link_options(ydb-library-yql-utils-simd-ut PRIVATE + -Wl,-platform_version,macos,11.0,11.0 + -fPIC + -fPIC +) +target_sources(ydb-library-yql-utils-simd-ut PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/utils/simd/simd_ut.cpp +) +set_property( + TARGET + ydb-library-yql-utils-simd-ut + PROPERTY + SPLIT_FACTOR + 1 +) +add_yunittest( + NAME + ydb-library-yql-utils-simd-ut + TEST_TARGET + ydb-library-yql-utils-simd-ut + TEST_ARG + --print-before-suite + --print-before-test + --fork-tests + --print-times + --show-fails +) +set_yunittest_property( + TEST + ydb-library-yql-utils-simd-ut + PROPERTY + LABELS + SMALL +) +set_yunittest_property( + TEST + ydb-library-yql-utils-simd-ut + PROPERTY + PROCESSORS + 1 +) +target_allocator(ydb-library-yql-utils-simd-ut + system_allocator +) +vcs_info(ydb-library-yql-utils-simd-ut) diff --git a/ydb/library/yql/utils/simd/ut/CMakeLists.linux-aarch64.txt b/ydb/library/yql/utils/simd/ut/CMakeLists.linux-aarch64.txt new file mode 100644 index 00000000000..f43917db826 --- /dev/null +++ b/ydb/library/yql/utils/simd/ut/CMakeLists.linux-aarch64.txt @@ -0,0 +1,69 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_executable(ydb-library-yql-utils-simd-ut) +target_include_directories(ydb-library-yql-utils-simd-ut PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/utils/simd +) +target_link_libraries(ydb-library-yql-utils-simd-ut PUBLIC + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + cpp-testing-unittest_main +) +target_link_options(ydb-library-yql-utils-simd-ut PRIVATE + -ldl + -lrt + -Wl,--no-as-needed + -fPIC + -fPIC + -lpthread + -lrt + -ldl +) +target_sources(ydb-library-yql-utils-simd-ut PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/utils/simd/simd_ut.cpp +) +set_property( + TARGET + ydb-library-yql-utils-simd-ut + PROPERTY + SPLIT_FACTOR + 1 +) +add_yunittest( + NAME + ydb-library-yql-utils-simd-ut + TEST_TARGET + ydb-library-yql-utils-simd-ut + TEST_ARG + --print-before-suite + --print-before-test + --fork-tests + --print-times + --show-fails +) +set_yunittest_property( + TEST + ydb-library-yql-utils-simd-ut + PROPERTY + LABELS + SMALL +) +set_yunittest_property( + TEST + ydb-library-yql-utils-simd-ut + PROPERTY + PROCESSORS + 1 +) +target_allocator(ydb-library-yql-utils-simd-ut + cpp-malloc-jemalloc +) +vcs_info(ydb-library-yql-utils-simd-ut) diff --git a/ydb/library/yql/utils/simd/ut/CMakeLists.linux-x86_64.txt b/ydb/library/yql/utils/simd/ut/CMakeLists.linux-x86_64.txt new file mode 100644 index 00000000000..15ff8ed27ab --- /dev/null +++ b/ydb/library/yql/utils/simd/ut/CMakeLists.linux-x86_64.txt @@ -0,0 +1,71 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_executable(ydb-library-yql-utils-simd-ut) +target_include_directories(ydb-library-yql-utils-simd-ut PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/utils/simd +) +target_link_libraries(ydb-library-yql-utils-simd-ut PUBLIC + contrib-libs-linux-headers + contrib-libs-cxxsupp + yutil + library-cpp-cpuid_check + cpp-testing-unittest_main +) +target_link_options(ydb-library-yql-utils-simd-ut PRIVATE + -ldl + -lrt + -Wl,--no-as-needed + -fPIC + -fPIC + -lpthread + -lrt + -ldl +) +target_sources(ydb-library-yql-utils-simd-ut PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/utils/simd/simd_ut.cpp +) +set_property( + TARGET + ydb-library-yql-utils-simd-ut + PROPERTY + SPLIT_FACTOR + 1 +) +add_yunittest( + NAME + ydb-library-yql-utils-simd-ut + TEST_TARGET + ydb-library-yql-utils-simd-ut + TEST_ARG + --print-before-suite + --print-before-test + --fork-tests + --print-times + --show-fails +) +set_yunittest_property( + TEST + ydb-library-yql-utils-simd-ut + PROPERTY + LABELS + SMALL +) +set_yunittest_property( + TEST + ydb-library-yql-utils-simd-ut + PROPERTY + PROCESSORS + 1 +) +target_allocator(ydb-library-yql-utils-simd-ut + cpp-malloc-tcmalloc + libs-tcmalloc-no_percpu_cache +) +vcs_info(ydb-library-yql-utils-simd-ut) diff --git a/ydb/library/yql/utils/simd/ut/CMakeLists.txt b/ydb/library/yql/utils/simd/ut/CMakeLists.txt new file mode 100644 index 00000000000..f8b31df0c11 --- /dev/null +++ b/ydb/library/yql/utils/simd/ut/CMakeLists.txt @@ -0,0 +1,17 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + +if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND NOT HAVE_CUDA) + include(CMakeLists.linux-aarch64.txt) +elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND NOT HAVE_CUDA) + include(CMakeLists.linux-x86_64.txt) +endif() diff --git a/ydb/library/yql/utils/simd/ut/CMakeLists.windows-x86_64.txt b/ydb/library/yql/utils/simd/ut/CMakeLists.windows-x86_64.txt new file mode 100644 index 00000000000..72fe7818c18 --- /dev/null +++ b/ydb/library/yql/utils/simd/ut/CMakeLists.windows-x86_64.txt @@ -0,0 +1,59 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_executable(ydb-library-yql-utils-simd-ut) +target_include_directories(ydb-library-yql-utils-simd-ut PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/utils/simd +) +target_link_libraries(ydb-library-yql-utils-simd-ut PUBLIC + contrib-libs-cxxsupp + yutil + library-cpp-cpuid_check + cpp-testing-unittest_main +) +target_sources(ydb-library-yql-utils-simd-ut PRIVATE + ${CMAKE_SOURCE_DIR}/ydb/library/yql/utils/simd/simd_ut.cpp +) +set_property( + TARGET + ydb-library-yql-utils-simd-ut + PROPERTY + SPLIT_FACTOR + 1 +) +add_yunittest( + NAME + ydb-library-yql-utils-simd-ut + TEST_TARGET + ydb-library-yql-utils-simd-ut + TEST_ARG + --print-before-suite + --print-before-test + --fork-tests + --print-times + --show-fails +) +set_yunittest_property( + TEST + ydb-library-yql-utils-simd-ut + PROPERTY + LABELS + SMALL +) +set_yunittest_property( + TEST + ydb-library-yql-utils-simd-ut + PROPERTY + PROCESSORS + 1 +) +target_allocator(ydb-library-yql-utils-simd-ut + system_allocator +) +vcs_info(ydb-library-yql-utils-simd-ut) diff --git a/ydb/library/yql/utils/simd/ut/ya.make b/ydb/library/yql/utils/simd/ut/ya.make new file mode 100644 index 00000000000..9701c0d5d8f --- /dev/null +++ b/ydb/library/yql/utils/simd/ut/ya.make @@ -0,0 +1,7 @@ +UNITTEST_FOR(ydb/library/yql/utils/simd) + +SRCS( + simd_ut.cpp +) + +END()
\ No newline at end of file diff --git a/ydb/library/yql/utils/simd/ya.make b/ydb/library/yql/utils/simd/ya.make new file mode 100644 index 00000000000..f17981ff0bb --- /dev/null +++ b/ydb/library/yql/utils/simd/ya.make @@ -0,0 +1,3 @@ +RECURSE_FOR_TESTS( + ut +)
\ No newline at end of file diff --git a/ydb/library/yql/utils/ya.make b/ydb/library/yql/utils/ya.make index ea7a40b3299..bfe80050998 100644 --- a/ydb/library/yql/utils/ya.make +++ b/ydb/library/yql/utils/ya.make @@ -60,6 +60,7 @@ RECURSE( failure_injector fetch log + simd test_http_server threading ) |