aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfixthgame <fixthgame@yandex-team.com>2023-10-16 12:13:35 +0300
committerfixthgame <fixthgame@yandex-team.com>2023-10-16 13:04:36 +0300
commit9f375a40b7c12df484072d0accc3ca926ed04a0c (patch)
tree3455f72b2632c888d820af15d291e15d51e1a3e0
parent51e254a4c50cdbbbd098b372428cd6e840c29241 (diff)
downloadydb-9f375a40b7c12df484072d0accc3ca926ed04a0c.tar.gz
Runtime dispatch для тестов simd
PR Issues
-rw-r--r--.mapping.json6
-rw-r--r--ydb/library/yql/minikql/comp_nodes/block_join/avx2/begin.h3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/block_join/avx2/end.h1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/block_join/sse42/begin.h3
-rw-r--r--ydb/library/yql/minikql/comp_nodes/block_join/sse42/end.h1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/ut/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/library/yql/minikql/comp_nodes/ut/ya.make1
-rw-r--r--ydb/library/yql/utils/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/library/yql/utils/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/library/yql/utils/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/library/yql/utils/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/library/yql/utils/simd/CMakeLists.txt9
-rw-r--r--ydb/library/yql/utils/simd/simd_avx2.h (renamed from ydb/library/yql/minikql/comp_nodes/block_join/avx2/simd.h)8
-rw-r--r--ydb/library/yql/utils/simd/simd_sse42.h (renamed from ydb/library/yql/minikql/comp_nodes/block_join/sse42/simd.h)8
-rw-r--r--ydb/library/yql/utils/simd/simd_ut.cpp (renamed from ydb/library/yql/minikql/comp_nodes/ut/mkql_simd_ut.cpp)156
-rw-r--r--ydb/library/yql/utils/simd/ut/CMakeLists.darwin-x86_64.txt64
-rw-r--r--ydb/library/yql/utils/simd/ut/CMakeLists.linux-aarch64.txt69
-rw-r--r--ydb/library/yql/utils/simd/ut/CMakeLists.linux-x86_64.txt71
-rw-r--r--ydb/library/yql/utils/simd/ut/CMakeLists.txt17
-rw-r--r--ydb/library/yql/utils/simd/ut/CMakeLists.windows-x86_64.txt59
-rw-r--r--ydb/library/yql/utils/simd/ut/ya.make7
-rw-r--r--ydb/library/yql/utils/simd/ya.make3
-rw-r--r--ydb/library/yql/utils/ya.make1
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
)