|
#pragma once |
|
|
|
#include <c10/core/DeviceType.h> |
|
#include <c10/util/Exception.h> |
|
|
|
namespace c10 { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum class QScheme : uint8_t { |
|
PER_TENSOR_AFFINE = 0, |
|
PER_CHANNEL_AFFINE = 1, |
|
PER_TENSOR_SYMMETRIC = 2, |
|
PER_CHANNEL_SYMMETRIC = 3, |
|
PER_CHANNEL_AFFINE_FLOAT_QPARAMS = 4, |
|
COMPILE_TIME_NUM_QSCHEMES = 5, |
|
}; |
|
|
|
constexpr auto kPerTensorAffine = QScheme::PER_TENSOR_AFFINE; |
|
constexpr auto kPerChannelAffine = QScheme::PER_CHANNEL_AFFINE; |
|
constexpr auto kPerTensorSymmetric = QScheme::PER_TENSOR_SYMMETRIC; |
|
constexpr auto kPerChannelSymmetric = QScheme::PER_CHANNEL_SYMMETRIC; |
|
constexpr auto kPerChannelAffineFloatQParams = |
|
QScheme::PER_CHANNEL_AFFINE_FLOAT_QPARAMS; |
|
constexpr int COMPILE_TIME_NUM_QSCHEMES = |
|
static_cast<int>(QScheme::COMPILE_TIME_NUM_QSCHEMES); |
|
|
|
inline std::string toString(QScheme qscheme) { |
|
switch (qscheme) { |
|
case kPerTensorAffine: |
|
return "per_tensor_affine"; |
|
case kPerChannelAffine: |
|
return "per_channel_affine"; |
|
case kPerTensorSymmetric: |
|
return "per_tensor_symmetric"; |
|
case kPerChannelSymmetric: |
|
return "per_channel_symmetric"; |
|
case kPerChannelAffineFloatQParams: |
|
return "per_channel_affine_float_qparams"; |
|
default: |
|
TORCH_CHECK(false, "Unrecognized qscheme: ", static_cast<int>(qscheme)); |
|
} |
|
} |
|
|
|
} |
|
|