Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cmake/svs.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ include(CMakeDependentOption)
# elsewhere let user disable SVS
cmake_dependent_option(USE_SVS "Build with SVS library support" ON "SVS_SUPPORTED" OFF)

set(SVS_LVQ_SUPPORTED 0)
if(USE_SVS)
message(STATUS "SVS support enabled")
# Configure SVS build
Expand All @@ -47,6 +48,7 @@ if(USE_SVS)
endif()

cmake_dependent_option(SVS_SHARED_LIB "Use SVS pre-compiled shared library" ON "USE_SVS AND GLIBC_FOUND AND SVS_LVQ_SUPPORTED" OFF)
set(SVS_SHARED_LIB OFF CACHE BOOL "Force disable SVS shared library" FORCE)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if (GLIBC_2_28_FOUND)
set(SVS_URL "https://github.com/intel/ScalableVectorSearch/releases/download/v0.0.11/svs-shared-library-0.0.11-reduced-clang.tar.gz" CACHE STRING "SVS URL")
Expand Down
38 changes: 38 additions & 0 deletions tests/unit/test_svs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3158,6 +3158,44 @@ TEST(SVSTest, scalar_quantization_query) {
}
}

TEST(SVSTest, compute_distance) {
// Test svs::distance computation for custom data allocations and alignments
using namespace svs::distance;

const size_t dim = 4;
uint8_t *raw_a = (uint8_t *)malloc(dim * sizeof(float) + 1);
uint8_t *raw_b = (uint8_t *)malloc(dim * sizeof(float) + 1);
float *a = reinterpret_cast<float *>(raw_a + 1);
float *b = reinterpret_cast<float *>(raw_b + 1);
// float* a = (float*)malloc(dim * sizeof(float) + 1);
// float* b = (float*)malloc(dim * sizeof(float) + 1);

for (size_t i = 0; i < dim; i++) {
a[i] = static_cast<float>(i);
b[i] = static_cast<float>(i * 2);
}

auto dist_l2 = svs::distance::compute(svs::DistanceL2{}, std::span(a, dim), std::span(b, dim));
auto dist_ip = svs::distance::compute(svs::DistanceIP{}, std::span(a, dim), std::span(b, dim));

auto dist_l2_avx2 =
svs::distance::L2Impl<svs::Dynamic, float, float,
svs::distance::AVX_AVAILABILITY::AVX2>::compute(a, b,
svs::lib::MaybeStatic(
dim));
auto dist_ip_avx2 =
svs::distance::IPImpl<svs::Dynamic, float, float,
svs::distance::AVX_AVAILABILITY::AVX2>::compute(a, b,
svs::lib::MaybeStatic(
dim));

EXPECT_DOUBLE_EQ(dist_l2, dist_l2_avx2);
EXPECT_DOUBLE_EQ(dist_ip, dist_ip_avx2);

free(raw_a);
free(raw_b);
}

#else // HAVE_SVS

TEST(SVSTest, svs_not_supported) {
Expand Down
Loading