mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-01-05 10:22:41 +08:00
Abstract distances_simd.h from distances.h (#14512)
Signed-off-by: yudong.cai <yudong.cai@zilliz.com>
This commit is contained in:
parent
3d69c8ab67
commit
1a76707e36
@ -9,9 +9,9 @@
|
||||
#include <faiss/impl/ScalarQuantizerDC.h>
|
||||
#include <faiss/impl/ScalarQuantizerDC_avx.h>
|
||||
#include <faiss/impl/ScalarQuantizerDC_avx512.h>
|
||||
#include <faiss/utils/distances.h>
|
||||
#include <faiss/utils/distances_avx.h>
|
||||
#include <faiss/utils/distances_avx512.h>
|
||||
#include <faiss/utils/distances_simd.h>
|
||||
#include <faiss/utils/distances_simd_avx.h>
|
||||
#include <faiss/utils/distances_simd_avx512.h>
|
||||
#include <faiss/utils/instruction_set.h>
|
||||
|
||||
namespace faiss {
|
||||
|
||||
@ -7,16 +7,15 @@
|
||||
|
||||
// -*- c++ -*-
|
||||
|
||||
#include <faiss/utils/distances.h>
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
#include <cmath>
|
||||
|
||||
#include <omp.h>
|
||||
#include <faiss/FaissHook.h>
|
||||
|
||||
#include <faiss/impl/FaissAssert.h>
|
||||
#include <faiss/utils/distances.h>
|
||||
#include <faiss/FaissHook.h>
|
||||
|
||||
|
||||
#ifndef FINTEGER
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
|
||||
#include <faiss/utils/Heap.h>
|
||||
#include <faiss/utils/BitsetView.h>
|
||||
#include <faiss/utils/distances_simd.h>
|
||||
|
||||
|
||||
namespace faiss {
|
||||
@ -24,28 +25,6 @@ namespace faiss {
|
||||
* Optimized distance/norm/inner prod computations
|
||||
*********************************************************/
|
||||
|
||||
#ifdef __SSE__
|
||||
float fvec_L2sqr_sse (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
float fvec_inner_product_sse (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
float fvec_L1_sse (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
float fvec_Linf_sse (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
#endif
|
||||
|
||||
/** Compute pairwise distances between sets of vectors
|
||||
*
|
||||
* @param d dimension of the vectors
|
||||
@ -69,18 +48,6 @@ void fvec_inner_products_ny (
|
||||
const float * y,
|
||||
size_t d, size_t ny);
|
||||
|
||||
/* compute ny square L2 distance bewteen x and a set of contiguous y vectors */
|
||||
void fvec_L2sqr_ny (
|
||||
float * dis,
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d, size_t ny);
|
||||
|
||||
|
||||
/** squared norm of a vector */
|
||||
float fvec_norm_L2sqr (const float * x,
|
||||
size_t d);
|
||||
|
||||
/** compute the L2 norms for a set of vectors
|
||||
*
|
||||
* @param ip output norms, size nx
|
||||
|
||||
@ -7,9 +7,6 @@
|
||||
|
||||
// -*- c++ -*-
|
||||
|
||||
#include <faiss/utils/distances.h>
|
||||
#include <faiss/FaissHook.h>
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
@ -118,14 +115,12 @@ void fvec_L2sqr_ny_ref (float * dis,
|
||||
size_t d, size_t ny)
|
||||
{
|
||||
for (size_t i = 0; i < ny; i++) {
|
||||
dis[i] = fvec_L2sqr (x, y, d);
|
||||
dis[i] = fvec_L2sqr_ref (x, y, d);
|
||||
y += d;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*********************************************************
|
||||
* SSE and AVX implementations
|
||||
*/
|
||||
|
||||
77
internal/core/src/index/thirdparty/faiss/utils/distances_simd.h
vendored
Normal file
77
internal/core/src/index/thirdparty/faiss/utils/distances_simd.h
vendored
Normal file
@ -0,0 +1,77 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
// -*- c++ -*-
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <faiss/utils/BitsetView.h>
|
||||
|
||||
|
||||
namespace faiss {
|
||||
|
||||
/*********************************************************
|
||||
* Optimized distance/norm/inner prod computations
|
||||
*********************************************************/
|
||||
|
||||
float fvec_L2sqr_ref (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
float fvec_inner_product_ref (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
float fvec_L1_ref (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
float fvec_Linf_ref (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
#ifdef __SSE__
|
||||
float fvec_L2sqr_sse (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
float fvec_inner_product_sse (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
float fvec_L1_sse (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
|
||||
float fvec_Linf_sse (
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d);
|
||||
#endif
|
||||
|
||||
/* compute ny square L2 distance bewteen x and a set of contiguous y vectors */
|
||||
void fvec_L2sqr_ny (
|
||||
float * dis,
|
||||
const float * x,
|
||||
const float * y,
|
||||
size_t d, size_t ny);
|
||||
|
||||
|
||||
/** squared norm of a vector */
|
||||
float fvec_norm_L2sqr (const float * x,
|
||||
size_t d);
|
||||
|
||||
} // namespace faiss
|
||||
@ -1,14 +1,11 @@
|
||||
|
||||
// -*- c++ -*-
|
||||
|
||||
#include <faiss/utils/distances_avx.h>
|
||||
#include <faiss/utils/distances_simd_avx.h>
|
||||
#include <faiss/impl/FaissAssert.h>
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
#include <cmath>
|
||||
|
||||
#include <immintrin.h>
|
||||
|
||||
namespace faiss {
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
|
||||
// -*- c++ -*-
|
||||
#include <faiss/utils/distances_avx.h>
|
||||
#include <faiss/utils/distances_avx512.h>
|
||||
|
||||
#include <faiss/utils/distances_simd_avx512.h>
|
||||
#include <faiss/impl/FaissAssert.h>
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
#include <cmath>
|
||||
|
||||
#include <immintrin.h>
|
||||
|
||||
namespace faiss {
|
||||
@ -33,6 +30,8 @@ static inline __m128 masked_read (int d, const float *x) {
|
||||
|
||||
#if (defined(__AVX512F__) && defined(__AVX512DQ__))
|
||||
|
||||
extern uint8_t lookup8bit[256];
|
||||
|
||||
float
|
||||
fvec_inner_product_avx512(const float* x, const float* y, size_t d) {
|
||||
__m512 msum0 = _mm512_setzero_ps();
|
||||
|
||||
@ -6,8 +6,8 @@
|
||||
*/
|
||||
|
||||
#include <faiss/utils/BinaryDistance.h>
|
||||
#include <faiss/utils/distances_avx.h>
|
||||
#include <faiss/utils/distances_avx512.h>
|
||||
#include <faiss/utils/distances_simd_avx.h>
|
||||
#include <faiss/utils/distances_simd_avx512.h>
|
||||
|
||||
namespace faiss {
|
||||
|
||||
|
||||
@ -33,7 +33,6 @@
|
||||
#include <omp.h>
|
||||
|
||||
#include <faiss/utils/Heap.h>
|
||||
#include <faiss/utils/distances_avx.h>
|
||||
#include <faiss/utils/utils.h>
|
||||
#include <faiss/impl/AuxIndexStructures.h>
|
||||
#include <faiss/impl/FaissAssert.h>
|
||||
|
||||
@ -13,8 +13,8 @@
|
||||
#define FAISS_JACCARD_INL_H
|
||||
|
||||
#include <faiss/utils/BinaryDistance.h>
|
||||
#include <faiss/utils/distances_avx.h>
|
||||
#include <faiss/utils/distances_avx512.h>
|
||||
#include <faiss/utils/distances_simd_avx.h>
|
||||
#include <faiss/utils/distances_simd_avx512.h>
|
||||
|
||||
namespace faiss {
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user