/** * 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. */ #pragma once #include "../utils/DeviceTensor.cuh" #include "../utils/Float16.cuh" namespace faiss { namespace gpu { class GpuResources; /// Calculates brute-force L2 distance between `vectors` and /// `queries`, returning the k closest results seen void runL2Distance(GpuResources* resources, Tensor& vectors, bool vectorsRowMajor, // can be optionally pre-computed; nullptr if we // have to compute it upon the call Tensor* vectorNorms, Tensor& queries, bool queriesRowMajor, int k, Tensor& outDistances, Tensor& outIndices, // Do we care about `outDistances`? If not, we can // take shortcuts. bool ignoreOutDistances = false); /// Calculates brute-force inner product distance between `vectors` /// and `queries`, returning the k closest results seen void runIPDistance(GpuResources* resources, Tensor& vectors, bool vectorsRowMajor, Tensor& queries, bool queriesRowMajor, int k, Tensor& outDistances, Tensor& outIndices); #ifdef FAISS_USE_FLOAT16 void runIPDistance(GpuResources* resources, Tensor& vectors, bool vectorsRowMajor, Tensor& queries, bool queriesRowMajor, int k, Tensor& outDistances, Tensor& outIndices, bool useHgemm); void runL2Distance(GpuResources* resources, Tensor& vectors, bool vectorsRowMajor, Tensor* vectorNorms, Tensor& queries, bool queriesRowMajor, int k, Tensor& outDistances, Tensor& outIndices, bool useHgemm, bool ignoreOutDistances = false); #endif } } // namespace