#if !defined(TORCH_STABLE_ONLY) && !defined(TORCH_TARGET_VERSION) #pragma once #include #include namespace at::native { // Quantize a float value into a uint value given scale and zero_point template TORCH_API T quantize_val(double scale, int64_t zero_point, float value); // TODO combine this with quantize_val once the numerics for ARM are aligned // with it template T quantize_val_arm( const float scale, const int32_t zero_point, const float value); template void quantize_vec( double scale, int64_t zero_point, const float* src, T* dst, size_t count = 8); template TORCH_API float dequantize_val(double scale, int64_t zero_point, T value); template TORCH_API float dequantize_vec( double scale, int64_t zero_point, const T* src, float* dst, size_t count = 8); template TORCH_API DST_T requantize_val(double /*src_scale*/, int64_t /*src_zero_point*/, double /*dst_scale*/, int64_t /*dst_zero_point*/, SRC_T src); // Given a multiplier and a zero_point, requantize int32_t computed values back // to quantized values. See comment above // make_per_tensor_affine_quantizer function for the usage of int64_t template TORCH_API DST_T requantize_from_int(double multiplier, int64_t zero_point, int64_t src); int quantize_val_float_qparams(float scale, float zero_point, float value, int qmin, int qmax); } // namespace at #else #error "This file should not be included when either TORCH_STABLE_ONLY or TORCH_TARGET_VERSION is defined." #endif // !defined(TORCH_STABLE_ONLY) && !defined(TORCH_TARGET_VERSION)