gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
stattest.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2003-2005 The Regents of The University of Michigan
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  * Authors: Nathan Binkert
29  */
30 
31 #include "pybind11/pybind11.h"
32 
33 #include <iomanip>
34 #include <iostream>
35 #include <string>
36 
37 #include "base/cprintf.hh"
38 #include "base/misc.hh"
39 #include "base/statistics.hh"
40 #include "base/types.hh"
41 #include "sim/core.hh"
42 #include "sim/init.hh"
43 #include "sim/stat_control.hh"
44 
45 namespace py = pybind11;
46 
47 // override the default main() code for this unittest
48 const char *m5MainCommands[] = {
49  "import m5.stattestmain",
50  "m5.stattestmain.main()",
51  0 // sentinel is required
52 };
53 
54 using namespace std;
55 using namespace Stats;
56 
57 double testfunc();
58 struct StatTest;
60 
61 
62 double
64 {
65  return 9.8;
66 }
67 
68 class TestClass {
69  public:
70  double operator()() { return 9.7; }
71 };
72 
73 struct StatTest
74 {
106 
109 
116 
117  void run();
118  void init();
119 };
120 
121 StatTest &
123 {
124  static StatTest st;
125  return st;
126 }
127 
128 void
130 {
131  EventQueue *q = getEventQueue(0);
132  curEventQueue(q);
133 
134  cprintf("sizeof(Scalar) = %d\n", sizeof(Scalar));
135  cprintf("sizeof(Vector) = %d\n", sizeof(Vector));
136  cprintf("sizeof(Distribution) = %d\n", sizeof(Distribution));
137 
138  s1
139  .name("Stat01")
140  .desc("this is statistic 1")
141  ;
142 
143  s2
144  .name("Stat02")
145  .desc("this is statistic 2")
146  .prereq(s11)
147  ;
148 
149  s3
150  .name("Stat03")
151  .desc("this is statistic 3")
152  .prereq(f5)
153  ;
154 
155  s4
156  .name("Stat04")
157  .desc("this is statistic 4")
158  .prereq(s11)
159  ;
160 
161  s5
162  .init(5)
163  .name("Stat05")
164  .desc("this is statistic 5")
165  .prereq(s11)
166  .subname(0, "foo1")
167  .subname(1, "foo2")
168  .subname(2, "foo3")
169  .subname(3, "foo4")
170  .subname(4, "foo5")
171  ;
172 
173  s6
174  .init(1, 100, 13)
175  .name("Stat06")
176  .desc("this is statistic 6")
177  .prereq(s11)
178  ;
179 
180  s7
181  .init(7)
182  .name("Stat07")
183  .desc("this is statistic 7")
184  .precision(1)
185  .flags(pdf | total)
186  .prereq(s11)
187  ;
188 
189  s8
190  .init(10)
191  .name("Stat08")
192  .desc("this is statistic 8")
193  .precision(2)
194  .prereq(s11)
195  .subname(4, "blarg")
196  ;
197 
198  s9
199  .name("Stat09")
200  .desc("this is statistic 9")
201  .precision(4)
202  .prereq(s11)
203  ;
204 
205  s10
206  .name("Stat10")
207  .desc("this is statistic 10")
208  .prereq(s11)
209  ;
210 
211  s12
212  .init(1, 100, 13)
213  .name("Stat12")
214  .desc("this is statistic 12")
215  ;
216 
217  s13
218  .init(4, 0, 99, 10)
219  .name("Stat13")
220  .desc("this is statistic 13")
221  ;
222 
223  s14
224  .init(9)
225  .name("Stat14")
226  .desc("this is statistic 14")
227  ;
228 
229  s15
230  .init(10)
231  .name("Stat15")
232  .desc("this is statistic 15")
233  ;
234 
235  s16
236  .init(2, 9)
237  .name("Stat16")
238  .desc("this is statistic 16")
239  .flags(total)
240  .subname(0, "sub0")
241  .subname(1, "sub1")
242  .ysubname(0, "y0")
243  .ysubname(1, "y1")
244  ;
245 
246  s17
247  .functor(testfunc)
248  .name("Stat17")
249  .desc("this is stat 17")
250  ;
251 
252  TestClass testclass;
253  s18
254  .functor(testclass)
255  .name("Stat18")
256  .desc("this is stat 18")
257  ;
258 
259  h01
260  .init(11)
261  .name("Histogram01")
262  .desc("this is histogram 1")
263  ;
264 
265  h02
266  .init(10)
267  .name("Histogram02")
268  .desc("this is histogram 2")
269  ;
270 
271  h03
272  .init(11)
273  .name("Histogram03")
274  .desc("this is histogram 3")
275  ;
276 
277  h04
278  .init(10)
279  .name("Histogram04")
280  .desc("this is histogram 4")
281  ;
282 
283  h05
284  .init(11)
285  .name("Histogram05")
286  .desc("this is histogram 5")
287  ;
288 
289  h06
290  .init(10)
291  .name("Histogram06")
292  .desc("this is histogram 6")
293  ;
294 
295  h07
296  .init(11)
297  .name("Histogram07")
298  .desc("this is histogram 7")
299  ;
300 
301  h08
302  .init(10)
303  .name("Histogram08")
304  .desc("this is histogram 8")
305  ;
306 
307  h09
308  .init(11)
309  .name("Histogram09")
310  .desc("this is histogram 9")
311  ;
312 
313  h10
314  .init(10)
315  .name("Histogram10")
316  .desc("this is histogram 10")
317  ;
318 
319  h11
320  .init(11)
321  .name("Histogram11")
322  .desc("this is histogram 11")
323  ;
324 
325  h12
326  .init(10)
327  .name("Histogram12")
328  .desc("this is histogram 12")
329  ;
330 
331  sh1
332  .init(0)
333  .name("SparseHistogram1")
334  .desc("this is sparse histogram 1")
335  ;
336 
337  f1
338  .name("Formula1")
339  .desc("this is formula 1")
340  .prereq(s11)
341  ;
342 
343  f2
344  .name("Formula2")
345  .desc("this is formula 2")
346  .prereq(s11)
347  .precision(1)
348  ;
349 
350  f3
351  .name("Formula3")
352  .desc("this is formula 3")
353  .prereq(s11)
354  .subname(0, "bar1")
355  .subname(1, "bar2")
356  .subname(2, "bar3")
357  .subname(3, "bar4")
358  .subname(4, "bar5")
359  ;
360 
361  f4
362  .name("Formula4")
363  .desc("this is formula 4")
364  ;
365 
366  s19
367  .init(2)
368  .name("Stat19")
369  .desc("this is statistic 19 for vector op testing")
370  .flags(total | nozero | nonan)
371  ;
372  s20
373  .init(2)
374  .name("Stat20")
375  .desc("this is statistic 20 for vector op testing")
376  .flags(total | nozero | nonan)
377  ;
378 
379  f6
380  .name("vector_op_test_formula")
381  .desc("The total stat should equal 1")
382  .flags(total |nozero |nonan)
383  ;
384 
385  f1 = s1 + s2;
386  f2 = (-s1) / (-s2) * (-s3 + ULL(100) + s4);
387  f3 = sum(s5) * s7;
388  f4 += constant(10.0);
389  f4 += s5[3];
390  f5 = constant(1);
391  f6 = s19/s20;
392 }
393 
394 void
396 {
397  s16[1][0] = 1;
398  s16[0][1] = 3;
399  s16[0][0] = 2;
400  s16[1][1] = 9;
401  s16[1][1] += 9;
402  s16[1][8] += 8;
403  s16[1][7] += 7;
404  s16[1][6] += 6;
405  s16[1][5] += 5;
406  s16[1][4] += 4;
407 
408  s11 = 1;
409  s3 = 9;
410  s8[3] = 9;
411  s15[0].sample(1234);
412  s15[1].sample(1234);
413  s15[2].sample(1234);
414  s15[3].sample(1234);
415  s15[4].sample(1234);
416  s15[5].sample(1234);
417  s15[6].sample(1234);
418  s15[7].sample(1234);
419  s15[8].sample(1234);
420  s15[9].sample(1234);
421 
422  s10.sample(1000000000);
423  curEventQueue()->setCurTick(curTick() + ULL(1000000));
424  s10.sample(100000);
425  s10.sample(100000);
426  s10.sample(100000);
427  s10.sample(100000);
428  s10.sample(100000);
429  s10.sample(100000);
430  s10.sample(100000);
431  s10.sample(100000);
432  s10.sample(100000);
433  s10.sample(100000);
434  s10.sample(100000);
435  s10.sample(100000);
436  s10.sample(100000);
437  s13[0].sample(12);
438  s13[1].sample(29);
439  s13[2].sample(12);
440  s13[3].sample(29);
441  s13[0].sample(42);
442  s13[1].sample(29);
443  s13[2].sample(42);
444  s13[3].sample(32);
445  s13[0].sample(52);
446  s13[1].sample(49);
447  s13[2].sample(42);
448  s13[3].sample(25);
449  s13[0].sample(32);
450  s13[1].sample(49);
451  s13[2].sample(22);
452  s13[3].sample(49);
453  s13[0].sample(62);
454  s13[1].sample(99);
455  s13[2].sample(72);
456  s13[3].sample(23);
457  s13[0].sample(52);
458  s13[1].sample(78);
459  s13[2].sample(69);
460  s13[3].sample(49);
461 
462  s14[0].sample(1234);
463  s14[1].sample(4134);
464  s14[4].sample(1213);
465  s14[3].sample(1124);
466  s14[2].sample(1243);
467  s14[7].sample(1244);
468  s14[4].sample(7234);
469  s14[2].sample(9234);
470  s14[3].sample(1764);
471  s14[7].sample(1564);
472  s14[3].sample(3234);
473  s14[1].sample(2234);
474  s14[5].sample(1234);
475  s14[2].sample(4334);
476  s14[2].sample(1234);
477  s14[4].sample(4334);
478  s14[6].sample(1234);
479  s14[8].sample(8734);
480  s14[1].sample(5234);
481  s14[3].sample(8234);
482  s14[7].sample(5234);
483  s14[4].sample(4434);
484  s14[3].sample(7234);
485  s14[2].sample(1934);
486  s14[1].sample(9234);
487  s14[5].sample(5634);
488  s14[3].sample(1264);
489  s14[7].sample(5223);
490  s14[0].sample(1234);
491  s14[0].sample(5434);
492  s14[3].sample(8634);
493  s14[1].sample(1234);
494 
495 
496  s15[0].sample(1234);
497  s15[1].sample(4134);
498  curEventQueue()->setCurTick(curTick() + ULL(1000000));
499  s15[4].sample(1213);
500  curEventQueue()->setCurTick(curTick() + ULL(1000000));
501  s15[3].sample(1124);
502  curEventQueue()->setCurTick(curTick() + ULL(1000000));
503  s15[2].sample(1243);
504  curEventQueue()->setCurTick(curTick() + ULL(1000000));
505  s15[7].sample(1244);
506  curEventQueue()->setCurTick(curTick() + ULL(1000000));
507  s15[4].sample(7234);
508  s15[2].sample(9234);
509  s15[3].sample(1764);
510  s15[7].sample(1564);
511  s15[3].sample(3234);
512  s15[1].sample(2234);
513  curEventQueue()->setCurTick(curTick() + ULL(1000000));
514  s15[5].sample(1234);
515  curEventQueue()->setCurTick(curTick() + ULL(1000000));
516  s15[9].sample(4334);
517  curEventQueue()->setCurTick(curTick() + ULL(1000000));
518  s15[2].sample(1234);
519  curEventQueue()->setCurTick(curTick() + ULL(1000000));
520  s15[4].sample(4334);
521  s15[6].sample(1234);
522  curEventQueue()->setCurTick(curTick() + ULL(1000000));
523  s15[8].sample(8734);
524  curEventQueue()->setCurTick(curTick() + ULL(1000000));
525  s15[1].sample(5234);
526  curEventQueue()->setCurTick(curTick() + ULL(1000000));
527  s15[3].sample(8234);
528  curEventQueue()->setCurTick(curTick() + ULL(1000000));
529  s15[7].sample(5234);
530  s15[4].sample(4434);
531  s15[3].sample(7234);
532  s15[2].sample(1934);
533  s15[1].sample(9234);
534  curEventQueue()->setCurTick(curTick() + ULL(1000000));
535  s15[5].sample(5634);
536  s15[3].sample(1264);
537  s15[7].sample(5223);
538  s15[0].sample(1234);
539  s15[0].sample(5434);
540  s15[3].sample(8634);
541  curEventQueue()->setCurTick(curTick() + ULL(1000000));
542  s15[1].sample(1234);
543 
544  s4 = curTick();
545 
546  s8[3] = 99999;
547 
548  s3 = 12;
549  s3++;
550  curEventQueue()->setCurTick(curTick() + 9);
551 
552  s1 = 9;
553  s1 += 9;
554  s1 -= 11;
555  s1++;
556  ++s1;
557  s1--;
558  --s1;
559 
560  s2 = 9;
561 
562  s5[0] += 1;
563  s5[1] += 2;
564  s5[2] += 3;
565  s5[3] += 4;
566  s5[4] += 5;
567 
568  s7[0] = 10;
569  s7[1] = 20;
570  s7[2] = 30;
571  s7[3] = 40;
572  s7[4] = 50;
573  s7[5] = 60;
574  s7[6] = 70;
575 
576  s6.sample(0);
577  s6.sample(1);
578  s6.sample(2);
579  s6.sample(3);
580  s6.sample(4);
581  s6.sample(5);
582  s6.sample(6);
583  s6.sample(7);
584  s6.sample(8);
585  s6.sample(9);
586 
587  s6.sample(10);
588  s6.sample(10);
589  s6.sample(10);
590  s6.sample(10);
591  s6.sample(10);
592  s6.sample(10);
593  s6.sample(10);
594  s6.sample(10);
595  s6.sample(11);
596  s6.sample(19);
597  s6.sample(20);
598  s6.sample(20);
599  s6.sample(21);
600  s6.sample(21);
601  s6.sample(31);
602  s6.sample(98);
603  s6.sample(99);
604  s6.sample(99);
605  s6.sample(99);
606 
607  s7[0] = 700;
608  s7[1] = 600;
609  s7[2] = 500;
610  s7[3] = 400;
611  s7[4] = 300;
612  s7[5] = 200;
613  s7[6] = 100;
614 
615  s9.sample(100);
616  s9.sample(100);
617  s9.sample(100);
618  s9.sample(100);
619  s9.sample(10);
620  s9.sample(10);
621  s9.sample(10);
622  s9.sample(10);
623  s9.sample(10);
624 
625  curEventQueue()->setCurTick(curTick() + 9);
626  s4 = curTick();
627  s6.sample(100);
628  s6.sample(100);
629  s6.sample(100);
630  s6.sample(101);
631  s6.sample(102);
632 
633  s12.sample(100);
634  for (int i = 0; i < 100; i++) {
635  h01.sample(i);
636  h02.sample(i);
637  }
638 
639  for (int i = -100; i < 100; i++) {
640  h03.sample(i);
641  h04.sample(i);
642  }
643 
644  for (int i = -100; i < 1000; i++) {
645  h05.sample(i);
646  h06.sample(i);
647  }
648 
649  for (int i = 100; i >= -1000; i--) {
650  h07.sample(i);
651  h08.sample(i);
652  }
653 
654  for (int i = 0; i <= 1023; i++) {
655  h09.sample(i);
656  h10.sample(i);
657  }
658 
659  for (int i = -1024; i <= 1023; i++) {
660  h11.sample(i);
661  h12.sample(i);
662  }
663 
664  for (int i = 0; i < 1000; i++) {
665  sh1.sample(random() % 10000);
666  }
667 
668  s19[0] = 1;
669  s19[1] = 100000;
670  s20[0] = 100000;
671  s20[1] = 1;
672 
673 }
674 
675 static void
676 stattest_init_pybind(py::module &m_internal)
677 {
678  py::module m = m_internal.def_submodule("stattest");
679 
680  m
681  .def("stattest_init", []() { __stattest().init(); })
682  .def("stattest_run", []() { __stattest().run(); })
683  ;
684 }
685 
686 static EmbeddedPyBind embed_("stattest", stattest_init_pybind);
Scalar s11
Definition: stattest.cc:85
const FlagsType pdf
Print the percent of the total that this entry represents.
Definition: info.hh:51
Vector s19
Definition: stattest.cc:107
VectorAverageDeviation s15
Definition: stattest.cc:89
EventQueue * getEventQueue(uint32_t index)
Function for returning eventq queue for the provided index.
Definition: eventq.cc:64
Bitfield< 7 > i
Definition: miscregs.hh:1378
A stat that calculates the per tick average of a value.
Definition: statistics.hh:2485
Bitfield< 0 > m
Definition: miscregs.hh:1577
Histogram h02
Definition: stattest.cc:94
Distribution s12
Definition: stattest.cc:86
const FlagsType nonan
Don't print if this is NAN.
Definition: info.hh:59
Scalar s1
Definition: stattest.cc:75
void setCurTick(Tick newVal)
Definition: eventq.hh:614
Scalar s4
Definition: stattest.cc:78
Vector2d s16
Definition: stattest.cc:90
Histogram h08
Definition: stattest.cc:100
Value s17
Definition: stattest.cc:91
Vector s20
Definition: stattest.cc:108
A vector of scalar stats.
Definition: statistics.hh:2499
A vector of distributions.
Definition: statistics.hh:2610
const char * m5MainCommands[]
Definition: stattest.cc:48
Vector s5
Definition: stattest.cc:79
Value s18
Definition: stattest.cc:92
Declaration of Statistics objects.
double operator()()
Definition: stattest.cc:70
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:2475
This is a vector of AverageDeviation stats.
Definition: statistics.hh:2662
Calculates the mean and variance of all the samples.
Definition: statistics.hh:2574
Formula f3
Definition: stattest.cc:112
Formula f2
Definition: stattest.cc:111
Scalar s2
Definition: stattest.cc:76
Distribution s6
Definition: stattest.cc:80
VectorDistribution s13
Definition: stattest.cc:87
Histogram h09
Definition: stattest.cc:101
static void stattest_init_pybind(py::module &m_internal)
Definition: stattest.cc:676
Tick curTick()
The current simulated tick.
Definition: core.hh:47
AverageDeviation s10
Definition: stattest.cc:84
Queue of events sorted in time order.
Definition: eventq.hh:488
Histogram h06
Definition: stattest.cc:98
Vector s7
Definition: stattest.cc:81
Histogram h04
Definition: stattest.cc:96
void run()
Definition: stattest.cc:395
Bitfield< 27 > q
Definition: miscregs.hh:1367
A simple distribution stat.
Definition: statistics.hh:2523
static EmbeddedPyBind embed_("stattest", stattest_init_pybind)
EventQueue * curEventQueue()
Definition: eventq.hh:84
Histogram h05
Definition: stattest.cc:97
A simple histogram stat.
Definition: statistics.hh:2551
Temp constant(T val)
Definition: statistics.hh:3211
StandardDeviation s9
Definition: stattest.cc:83
Formula f6
Definition: stattest.cc:115
Calculates the per tick mean and variance of the samples.
Definition: statistics.hh:2592
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
VectorStandardDeviation s14
Definition: stattest.cc:88
#define ULL(N)
uint64_t constant
Definition: types.hh:50
Histogram h07
Definition: stattest.cc:99
Bitfield< 29, 28 > sh1
Definition: miscregs.hh:1692
Histogram h10
Definition: stattest.cc:102
void init()
Definition: stattest.cc:129
Histogram h03
Definition: stattest.cc:95
const FlagsType total
Print the total.
Definition: info.hh:49
A formula for statistics that is calculated when printed.
Definition: statistics.hh:2895
Average s3
Definition: stattest.cc:77
Temp sum(Temp val)
Definition: statistics.hh:3224
Formula f5
Definition: stattest.cc:114
Histogram h12
Definition: stattest.cc:104
Formula f4
Definition: stattest.cc:113
Histogram h01
Definition: stattest.cc:93
Bitfield< 11 > st
Definition: miscregs.hh:1509
double testfunc()
Definition: stattest.cc:63
Histogram h11
Definition: stattest.cc:103
AverageVector s8
Definition: stattest.cc:82
SparseHistogram sh1
Definition: stattest.cc:105
A vector of Average stats.
Definition: statistics.hh:2507
A 2-Dimensional vecto of scalar stats.
Definition: statistics.hh:2515
This is a vector of StandardDeviation stats.
Definition: statistics.hh:2639
const FlagsType nozero
Don't print if this is zero.
Definition: info.hh:57
StatTest & __stattest()
Definition: stattest.cc:122
Formula f1
Definition: stattest.cc:110
const FlagsType init
This Stat is Initialized.
Definition: info.hh:45
void cprintf(const char *format, const Args &...args)
Definition: cprintf.hh:155

Generated on Fri Jun 9 2017 13:03:52 for gem5 by doxygen 1.8.6