Abstract distances_simd.h from distances.h (#14512)

Signed-off-by: yudong.cai <yudong.cai@zilliz.com>
This commit is contained in:
Cai Yudong 2021-12-29 16:13:20 +08:00 committed by GitHub
parent 3d69c8ab67
commit 1a76707e36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 94 additions and 61 deletions

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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
*/

View 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

View File

@ -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 {

View File

@ -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();

View File

@ -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 {

View File

@ -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>

View File

@ -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 {