gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
units.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #ifndef __BASE_STATS_UNITS_HH__
30 #define __BASE_STATS_UNITS_HH__
31 
32 #include <type_traits>
33 
34 #include "base/compiler.hh"
35 #include "base/cprintf.hh"
36 
37 namespace gem5
38 {
39 
43 #define UNIT_CYCLE GEM5_DEPRECATED_MACRO( \
44  UNIT_CYCLE, statistics::units::Cycle::get(), \
45  "Use statistics::units::Cycle::get()")
46 #define UNIT_TICK GEM5_DEPRECATED_MACRO( \
47  UNIT_TICK, statistics::units::Tick::get(), "Use statistics::units::Tick::get()")
48 #define UNIT_SECOND GEM5_DEPRECATED_MACRO( \
49  UNIT_SECOND, statistics::units::Second::get(), \
50  "Use statistics::units::Second::get()")
51 #define UNIT_BIT GEM5_DEPRECATED_MACRO( \
52  UNIT_BIT, statistics::units::Bit::get(), "Use statistics::units::Bit::get()")
53 #define UNIT_BYTE GEM5_DEPRECATED_MACRO( \
54  UNIT_BYTE, statistics::units::Byte::get(), "Use statistics::units::Byte::get()")
55 #define UNIT_JOULE GEM5_DEPRECATED_MACRO( \
56  UNIT_JOULE, statistics::units::Joule::get(), \
57  "Use statistics::units::Joule::get()")
58 #define UNIT_VOLT GEM5_DEPRECATED_MACRO( \
59  UNIT_VOLD, statistics::units::Volt::get(), "Use statistics::units::Volt::get()")
60 #define UNIT_CELSIUS GEM5_DEPRECATED_MACRO( \
61  UNIT_CELSIUS, statistics::units::DegreeCelsius::get(), \
62  "Use statistics::units::DegreeCelsius::get()")
63 #define UNIT_RATE(T1, T2) GEM5_DEPRECATED_MACRO( \
64  UNIT_RATE, (statistics::units::Rate<T1, T2>::get()), \
65  "Use statistics::units::Rate<T1, T2>::get()")
66 #define UNIT_RATIO GEM5_DEPRECATED_MACRO( \
67  UNIT_RATIO, statistics::units::Ratio::get(), \
68  "Use statistics::units::Ratio::get()")
69 #define UNIT_COUNT GEM5_DEPRECATED_MACRO( \
70  UNIT_COUNT, statistics::units::Count::get(), \
71  "Use statistics::units::Count::get()")
72 #define UNIT_WATT GEM5_DEPRECATED_MACRO( \
73  UNIT_WATT, statistics::units::Watt::get(), "Use statistics::units::Watt::get()")
74 #define UNIT_UNSPECIFIED GEM5_DEPRECATED_MACRO( \
75  UNIT_UNSPECIFIED, statistics::units::Unspecified::get(), \
76  "Use statistics::units::Unspecified::get()")
77 
78 namespace statistics
79 {
80 
112 namespace units
113 {
114 
120 class Base
121 {
122  public:
123  virtual std::string getUnitString() const = 0;
124 };
125 
126 class Cycle : public Base
127 {
128  private:
129  Cycle() {}
130  public:
131  Cycle(Cycle const&) = delete;
132  void operator=(Cycle const&) = delete;
133  static Cycle*
134  get()
135  {
136  static Cycle instance;
137  return &instance;
138  }
139  static std::string toString() { return "Cycle"; }
140  std::string getUnitString() const override { return Cycle::toString(); }
141 };
142 
143 class Tick : public Base
144 {
145  private:
146  Tick() {}
147  public:
148  Tick(Tick const&) = delete;
149  void operator=(Tick const&) = delete;
150  static Tick*
151  get()
152  {
153  static Tick instance;
154  return &instance;
155  }
156  static std::string toString() { return "Tick"; }
157  std::string getUnitString() const override { return Tick::toString(); }
158 };
159 
160 class Second : public Base
161 {
162  private:
163  Second() {}
164  public:
165  Second(Second const&) = delete;
166  void operator=(Second const&) = delete;
167  static Second*
168  get()
169  {
170  static Second instance;
171  return &instance;
172  }
173  static std::string toString() { return "Second"; }
174  std::string getUnitString() const override { return Second::toString(); }
175 };
176 
177 class Bit : public Base
178 {
179  private:
180  Bit() {}
181  public:
182  Bit(Bit const&) = delete;
183  void operator=(Bit const&) = delete;
184  static Bit*
185  get()
186  {
187  static Bit instance;
188  return &instance;
189  }
190  static std::string toString() { return "Bit"; }
191  std::string getUnitString() const override { return Bit::toString(); }
192 };
193 
194 class Byte : public Base
195 {
196  private:
197  Byte() {}
198  public:
199  Byte(Byte const&) = delete;
200  void operator=(Byte const&) = delete;
201  static Byte*
202  get()
203  {
204  static Byte instance;
205  return &instance;
206  }
207  static std::string toString() { return "Byte"; }
208  std::string getUnitString() const override { return Byte::toString(); }
209 };
210 
211 class Watt : public Base
212 {
213  private:
214  Watt() {}
215  public:
216  Watt(Watt const&) = delete;
217  void operator=(Watt const&) = delete;
218  static Watt*
219  get()
220  {
221  static Watt instance;
222  return &instance;
223  }
224  static std::string toString() { return "Watt"; }
225  std::string getUnitString() const override { return Watt::toString(); }
226 };
227 
228 
229 class Joule : public Base
230 {
231  private:
232  Joule() {}
233  public:
234  Joule(Joule const&) = delete;
235  void operator=(Joule const&) = delete;
236  static Joule*
237  get()
238  {
239  static Joule instance;
240  return &instance;
241  }
242  static std::string toString() { return "Joule"; }
243  std::string getUnitString() const override { return Joule::toString(); }
244 };
245 
246 class Volt : public Base
247 {
248  private:
249  Volt() {}
250  public:
251  Volt(Volt const&) = delete;
252  void operator=(Volt const&) = delete;
253  static Volt*
254  get()
255  {
256  static Volt instance;
257  return &instance;
258  }
259  static std::string toString() { return "Volt"; }
260  std::string getUnitString() const override { return Volt::toString(); }
261 };
262 
263 class DegreeCelsius : public Base
264 {
265  private:
267  public:
268  DegreeCelsius(DegreeCelsius const&) = delete;
269  void operator=(DegreeCelsius const&) = delete;
270  static DegreeCelsius*
271  get()
272  {
273  static DegreeCelsius instance;
274  return &instance;
275  }
276  static std::string toString() { return "Celsius"; }
277  std::string
278  getUnitString() const override
279  {
280  return DegreeCelsius::toString();
281  }
282 };
283 
284 
285 class Count : public Base
286 {
287  private:
288  Count() {}
289  public:
290  Count(Count const&) = delete;
291  void operator=(Count const&) = delete;
292  static Count*
293  get()
294  {
295  static Count instance;
296  return &instance;
297  }
298  static std::string toString() { return "Count"; }
299  std::string getUnitString() const override { return Count::toString(); }
300 };
301 
302 class Ratio : public Base
303 {
304  private:
305  Ratio() {}
306  public:
307  Ratio(Ratio const&) = delete;
308  void operator=(Ratio const&) = delete;
309  static Ratio*
310  get()
311  {
312  static Ratio instance;
313  return &instance;
314  }
315  static std::string toString() { return "Ratio"; }
316  std::string getUnitString() const override { return Ratio::toString(); }
317 };
318 
319 class Unspecified : public Base
320 {
321  private:
323  public:
324  Unspecified(Unspecified const&) = delete;
325  void operator=(Unspecified const&) = delete;
326  static Unspecified*
327  get()
328  {
329  static Unspecified instance;
330  return &instance;
331  }
332  static std::string toString() { return "Unspecified"; }
333  std::string
334  getUnitString() const override
335  {
336  return Unspecified::toString();
337  }
338 };
339 
340 template <typename T1, typename T2>
341 class Rate : public Base
342 {
343  static_assert(std::is_base_of_v<Base, T1>, "Rate(T1,T2) must have "
344  "T1 and T2 derived from statistics::units::Base");
345  static_assert(std::is_base_of_v<Base, T2>, "Rate(T1,T2) must have "
346  "T1 and T2 derived from statistics::units::Base");
347  static_assert(!std::is_same_v<T1, T2> || std::is_same_v<T1, Count> ||
348  std::is_same_v<T1, Unspecified>,
349  "Rate(T1,T2) must have T1 and T2 of different types; "
350  "otherwise, it would be a Ratio");
351 
352  private:
354  public:
355  Rate<T1,T2>(Rate<T1,T2> const&) = delete;
356  void operator=(Rate<T1,T2> const&) = delete;
357  static Rate<T1,T2>*
358  get()
359  {
360  static Rate<T1,T2> instance;
361  return &instance;
362  }
363  static std::string
365  {
366  return csprintf("(%s/%s)", T1::toString(), T2::toString());
367  }
368  std::string
369  getUnitString() const override
370  {
371  return Rate<T1,T2>::toString();
372  }
373 };
374 
375 } // namespace units
376 } // namespace statistics
377 } // namespace gem5
378 
379 #endif // __BASE_STATS_UNITS_HH__
gem5::statistics::units::Byte::Byte
Byte()
Definition: units.hh:197
gem5::statistics::units::Volt::Volt
Volt()
Definition: units.hh:249
gem5::statistics::units::Second::get
static Second * get()
Definition: units.hh:168
gem5::statistics::units::Base::getUnitString
virtual std::string getUnitString() const =0
gem5::statistics::units::Base
The Base class is the parent class of all unit classes.
Definition: units.hh:120
gem5::statistics::units::DegreeCelsius::toString
static std::string toString()
Definition: units.hh:276
gem5::statistics::units::Byte::toString
static std::string toString()
Definition: units.hh:207
gem5::statistics::units::Rate::getUnitString
std::string getUnitString() const override
Definition: units.hh:369
gem5::statistics::units::Bit::Bit
Bit()
Definition: units.hh:180
gem5::statistics::units::Joule::toString
static std::string toString()
Definition: units.hh:242
gem5::statistics::units::Unspecified::toString
static std::string toString()
Definition: units.hh:332
gem5::statistics::units::DegreeCelsius
Definition: units.hh:263
gem5::statistics::units::DegreeCelsius::getUnitString
std::string getUnitString() const override
Definition: units.hh:278
gem5::statistics::units::Unspecified::getUnitString
std::string getUnitString() const override
Definition: units.hh:334
gem5::statistics::units::Second::Second
Second()
Definition: units.hh:163
gem5::statistics::units::Rate::get
static Rate< T1, T2 > * get()
Definition: units.hh:358
gem5::statistics::units::Cycle::get
static Cycle * get()
Definition: units.hh:134
gem5::statistics::units::Bit::operator=
void operator=(Bit const &)=delete
gem5::csprintf
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:161
gem5::statistics::units::Count
Definition: units.hh:285
gem5::statistics::units::Tick::operator=
void operator=(Tick const &)=delete
gem5::statistics::units::Unspecified::get
static Unspecified * get()
Definition: units.hh:327
gem5::statistics::units::Volt::operator=
void operator=(Volt const &)=delete
gem5::statistics::units::Second
Definition: units.hh:160
gem5::statistics::units::Volt::getUnitString
std::string getUnitString() const override
Definition: units.hh:260
gem5::statistics::units::Tick::toString
static std::string toString()
Definition: units.hh:156
gem5::statistics::units::Watt::toString
static std::string toString()
Definition: units.hh:224
gem5::statistics::units::Count::get
static Count * get()
Definition: units.hh:293
gem5::statistics::units::Joule::operator=
void operator=(Joule const &)=delete
gem5::statistics::units::Ratio::get
static Ratio * get()
Definition: units.hh:310
gem5::statistics::units::Volt
Definition: units.hh:246
gem5::statistics::units::Unspecified::Unspecified
Unspecified()
Definition: units.hh:322
gem5::statistics::units::Ratio::toString
static std::string toString()
Definition: units.hh:315
gem5::statistics::units::Joule::Joule
Joule()
Definition: units.hh:232
gem5::statistics::units::Volt::toString
static std::string toString()
Definition: units.hh:259
gem5::statistics::units::Joule::get
static Joule * get()
Definition: units.hh:237
gem5::statistics::units::Ratio::Ratio
Ratio()
Definition: units.hh:305
gem5::statistics::units::Joule
Definition: units.hh:229
gem5::statistics::units::Second::operator=
void operator=(Second const &)=delete
gem5::statistics::units::Tick::getUnitString
std::string getUnitString() const override
Definition: units.hh:157
gem5::statistics::units::Unspecified
Definition: units.hh:319
gem5::statistics::units::Watt::getUnitString
std::string getUnitString() const override
Definition: units.hh:225
gem5::statistics::units::Tick::Tick
Tick()
Definition: units.hh:146
gem5::statistics::units::Second::toString
static std::string toString()
Definition: units.hh:173
gem5::statistics::units::Count::Count
Count()
Definition: units.hh:288
cprintf.hh
compiler.hh
gem5::statistics::units::Byte
Definition: units.hh:194
gem5::statistics::units::Cycle::getUnitString
std::string getUnitString() const override
Definition: units.hh:140
gem5::statistics::units::Count::getUnitString
std::string getUnitString() const override
Definition: units.hh:299
gem5::statistics::units::Watt::operator=
void operator=(Watt const &)=delete
gem5::statistics::units::Bit
Definition: units.hh:177
gem5::statistics::units::Cycle
Definition: units.hh:126
gem5::statistics::units::Second::getUnitString
std::string getUnitString() const override
Definition: units.hh:174
gem5::statistics::units::Ratio
Definition: units.hh:302
gem5::statistics::units::DegreeCelsius::operator=
void operator=(DegreeCelsius const &)=delete
gem5::statistics::units::Byte::getUnitString
std::string getUnitString() const override
Definition: units.hh:208
gem5::statistics::units::Cycle::operator=
void operator=(Cycle const &)=delete
gem5::statistics::units::Bit::get
static Bit * get()
Definition: units.hh:185
gem5::statistics::units::Byte::operator=
void operator=(Byte const &)=delete
gem5::statistics::units::Count::toString
static std::string toString()
Definition: units.hh:298
gem5::statistics::units::Rate::operator=
void operator=(Rate< T1, T2 > const &)=delete
gem5::statistics::units::DegreeCelsius::DegreeCelsius
DegreeCelsius()
Definition: units.hh:266
gem5::statistics::units::Watt::Watt
Watt()
Definition: units.hh:214
gem5::statistics::units::Ratio::operator=
void operator=(Ratio const &)=delete
gem5::statistics::units::Volt::get
static Volt * get()
Definition: units.hh:254
gem5::statistics::units::Ratio::getUnitString
std::string getUnitString() const override
Definition: units.hh:316
gem5::statistics::units::Tick::get
static Tick * get()
Definition: units.hh:151
gem5::statistics::units::Count::operator=
void operator=(Count const &)=delete
gem5::statistics::units::Rate
Definition: units.hh:341
gem5::statistics::units::DegreeCelsius::get
static DegreeCelsius * get()
Definition: units.hh:271
gem5::statistics::units::Watt::get
static Watt * get()
Definition: units.hh:219
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::statistics::units::Rate::toString
static std::string toString()
Definition: units.hh:364
gem5::statistics::units::Byte::get
static Byte * get()
Definition: units.hh:202
gem5::statistics::units::Unspecified::operator=
void operator=(Unspecified const &)=delete
gem5::statistics::units::Bit::toString
static std::string toString()
Definition: units.hh:190
gem5::statistics::units::Joule::getUnitString
std::string getUnitString() const override
Definition: units.hh:243
gem5::statistics::units::Cycle::Cycle
Cycle()
Definition: units.hh:129
gem5::statistics::units::Tick
Definition: units.hh:143
gem5::statistics::units::Watt
Definition: units.hh:211
gem5::statistics::units::Cycle::toString
static std::string toString()
Definition: units.hh:139
gem5::statistics::units::Bit::getUnitString
std::string getUnitString() const override
Definition: units.hh:191

Generated on Sun Jul 30 2023 01:56:51 for gem5 by doxygen 1.8.17