Caffe2 - C++ API
A deep learning, cross platform ML framework
cpuid.h
1 
17 #pragma once
18 
19 #include <cstdint>
20 
21 #ifdef _MSC_VER
22 #include <intrin.h>
23 #endif
24 
25 #include "caffe2/core/common.h"
26 
27 namespace caffe2 {
28 
29 class CpuId;
30 
31 CAFFE2_API const CpuId& GetCpuId();
32 
34 // Implementation of CpuId that is borrowed from folly.
36 
43 class CpuId {
44  public:
45  CpuId();
46 
47 #define X(name, r, bit) \
48  inline bool name() const { \
49  return ((r) & (1U << bit)) != 0; \
50  }
51 
52 // cpuid(1): Processor Info and Feature Bits.
53 #define C(name, bit) X(name, f1c_, bit)
54  C(sse3, 0)
55  C(pclmuldq, 1)
56  C(dtes64, 2)
57  C(monitor, 3)
58  C(dscpl, 4)
59  C(vmx, 5)
60  C(smx, 6)
61  C(eist, 7)
62  C(tm2, 8)
63  C(ssse3, 9)
64  C(cnxtid, 10)
65  C(fma, 12)
66  C(cx16, 13)
67  C(xtpr, 14)
68  C(pdcm, 15)
69  C(pcid, 17)
70  C(dca, 18)
71  C(sse41, 19)
72  C(sse42, 20)
73  C(x2apic, 21)
74  C(movbe, 22)
75  C(popcnt, 23)
76  C(tscdeadline, 24)
77  C(aes, 25)
78  C(xsave, 26)
79  C(osxsave, 27)
80  C(avx, 28)
81  C(f16c, 29)
82  C(rdrand, 30)
83 #undef C
84 
85 #define D(name, bit) X(name, f1d_, bit)
86  D(fpu, 0)
87  D(vme, 1)
88  D(de, 2)
89  D(pse, 3)
90  D(tsc, 4)
91  D(msr, 5)
92  D(pae, 6)
93  D(mce, 7)
94  D(cx8, 8)
95  D(apic, 9)
96  D(sep, 11)
97  D(mtrr, 12)
98  D(pge, 13)
99  D(mca, 14)
100  D(cmov, 15)
101  D(pat, 16)
102  D(pse36, 17)
103  D(psn, 18)
104  D(clfsh, 19)
105  D(ds, 21)
106  D(acpi, 22)
107  D(mmx, 23)
108  D(fxsr, 24)
109  D(sse, 25)
110  D(sse2, 26)
111  D(ss, 27)
112  D(htt, 28)
113  D(tm, 29)
114  D(pbe, 31)
115 #undef D
116 
117 // cpuid(7): Extended Features.
118 #define B(name, bit) X(name, f7b_, bit)
119  B(bmi1, 3)
120  B(hle, 4)
121  B(avx2, 5)
122  B(smep, 7)
123  B(bmi2, 8)
124  B(erms, 9)
125  B(invpcid, 10)
126  B(rtm, 11)
127  B(mpx, 14)
128  B(avx512f, 16)
129  B(avx512dq, 17)
130  B(rdseed, 18)
131  B(adx, 19)
132  B(smap, 20)
133  B(avx512ifma, 21)
134  B(pcommit, 22)
135  B(clflushopt, 23)
136  B(clwb, 24)
137  B(avx512pf, 26)
138  B(avx512er, 27)
139  B(avx512cd, 28)
140  B(sha, 29)
141  B(avx512bw, 30)
142  B(avx512vl, 31)
143 #undef B
144 
145 #define E(name, bit) X(name, f7c_, bit)
146  E(prefetchwt1, 0)
147  E(avx512vbmi, 1)
148 #undef E
149 
150 #undef X
151 
152  private:
153  CAFFE2_API static uint32_t f1c_;
154  CAFFE2_API static uint32_t f1d_;
155  CAFFE2_API static uint32_t f7b_;
156  CAFFE2_API static uint32_t f7c_;
157 };
158 
159 } // namespace caffe2
Copyright (c) 2016-present, Facebook, Inc.
Identification of an Intel CPU.
Definition: cpuid.h:43