命名空间 faiss::quantize_lut
-
namespace quantize_lut
将 PQ 浮点查找表 (LUT) 量化为 uint8 以及将偏差量化为 uint16 的函数。 累加应该在 uint16 中进行。 量化系数是浮点数 (a, b),使得
量化中最难的部分是需要加在一起的多个 LUT。 在这种情况下,必须选择系数 a,以便总和适合 uint16 累加器。original_value = quantized_value * a / b
函数
-
void round_uint8_per_column(float *tab, size_t n, size_t d, float *a_out = nullptr, float *b_out = nullptr)
-
void round_uint8_per_column_multi(float *tab, size_t m, size_t n, size_t d, float *a_out = nullptr, float *b_out = nullptr)
-
void quantize_LUT_and_bias(size_t nprobe, size_t M, size_t ksub, bool lut_is_3d, const float *LUT, const float *bias, uint8_t *LUTq, size_t M2, uint16_t *biasq, float *a_out = nullptr, float *b_out = nullptr)
LUT 量化为 uint8,偏差量化为 uint16。
(nprobe, M, ksub, lut_is_3d) 确定 LUT 的大小
LUT 输入
2D 大小 (M, ksub):每个探针的单个矩阵 (lut_is_3d=false)
3D 大小 (nprobe, M, ksub):每个探针的单独 LUT (lut_is_3d=true) 偏差输入
nullptr:偏差为 0
大小 (nprobe):每个探针一个偏差 输出
LUTq LUT 的 uint8 版本(M 大小向上舍入为 M2)
biasq (或 nullptr):LUT 的 uint16 版本
a, b:逼近真实距离的标量
-
void aq_quantize_LUT_and_bias(size_t nprobe, size_t M, size_t ksub, const float *LUT, const float *bias, size_t M_norm, int norm_scale, uint8_t *LUTq, size_t M2, uint16_t *biasq, float *a_out, float *b_out)
-
float aq_estimate_norm_scale(size_t M, size_t ksub, size_t M_norm, const float *LUT)
-
void round_uint8_per_column(float *tab, size_t n, size_t d, float *a_out = nullptr, float *b_out = nullptr)