1#pragma once
2
3#include <c10/core/DeviceType.h>
4#include <c10/core/DispatchKey.h>
5#include <c10/util/Exception.h>
6
7namespace c10 {
8
9/**
10 * QEngine is an enum that is used to select the engine to run quantized ops.
11 * Keep this enum in sync with get_qengine_id() in
12 * torch/backends/quantized/__init__.py
13 */
14enum class QEngine : uint8_t {
15 NoQEngine = 0,
16 FBGEMM = 1,
17 QNNPACK = 2,
18 ONEDNN = 3,
19 X86 = 4,
20};
21
22constexpr auto kNoQEngine = QEngine::NoQEngine;
23constexpr auto kFBGEMM = QEngine::FBGEMM;
24constexpr auto kQNNPACK = QEngine::QNNPACK;
25constexpr auto kONEDNN = QEngine::ONEDNN;
26constexpr auto kX86 = QEngine::X86;
27
28inline std::string toString(QEngine qengine) {
29 switch (qengine) {
30 case kNoQEngine:
31 return "NoQEngine";
32 case kFBGEMM:
33 return "FBGEMM";
34 case kQNNPACK:
35 return "QNNPACK";
36 case kONEDNN:
37 return "ONEDNN";
38 case kX86:
39 return "X86";
40 default:
41 TORCH_CHECK(
42 false, "Unrecognized Quantized Engine: ", static_cast<int>(qengine));
43 }
44}
45
46} // namespace c10
47