Deleted Added
sdiff udiff text old ( 8229:78bf55f23338 ) new ( 8235:6381dc8bcfcc )
full compact
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 <iomanip>
32#include <iostream>
33#include <string>
34
35#include "base/stats/mysql.hh"
36#include "base/stats/text.hh"
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/stat_control.hh"
43
44using namespace std;
45using namespace Stats;
46
47double
48testfunc()
49{
50 return 9.8;
51}
52
53class TestClass {
54 public:
55 double operator()() { return 9.7; }
56};
57
58const char *progname = "";
59
60void
61usage()
62{
63 panic("incorrect usage.\n"
64 "usage:\n"
65 "\t%s [-t [-c] [-d]]\n", progname);
66}
67
68int
69main(int argc, char *argv[])
70{
71 bool descriptions = false;
72 bool text = false;
73
74#if USE_MYSQL
75 string mysql_name;
76 string mysql_db;
77 string mysql_host;
78 string mysql_user = "binkertn";
79 string mysql_passwd;
80#endif
81
82 char c;
83 progname = argv[0];
84 while ((c = getopt(argc, argv, "cD:dh:P:p:s:tu:")) != -1) {
85 switch (c) {
86 case 'd':
87 descriptions = true;
88 break;
89 case 't':
90 text = true;
91 break;
92#if USE_MYSQL
93 case 'D':
94 mysql_db = optarg;
95 break;
96 case 'h':
97 mysql_host = optarg;
98 break;
99 case 'P':
100 mysql_passwd = optarg;
101 break;
102 case 's':
103 mysql_name = optarg;
104 break;
105 case 'u':
106 mysql_user = optarg;
107 break;
108#endif
109 default:
110 usage();
111 }
112 }
113
114 if (!text && descriptions)
115 usage();
116
117 initSimStats();
118
119 Scalar s1;
120 Scalar s2;
121 Average s3;
122 Scalar s4;
123 Vector s5;
124 Distribution s6;
125 Vector s7;
126 AverageVector s8;
127 StandardDeviation s9;
128 AverageDeviation s10;
129 Scalar s11;
130 Distribution s12;
131 VectorDistribution s13;
132 VectorStandardDeviation s14;
133 VectorAverageDeviation s15;
134 Vector2d s16;
135 Value s17;
136 Value s18;
137 Histogram h01;
138 Histogram h02;
139 Histogram h03;
140 Histogram h04;
141 Histogram h05;
142 Histogram h06;
143 Histogram h07;
144 Histogram h08;
145 Histogram h09;
146 Histogram h10;
147 Histogram h11;
148 Histogram h12;
149
150 Formula f1;
151 Formula f2;
152 Formula f3;
153 Formula f4;
154 Formula f5;
155
156 cprintf("sizeof(Scalar) = %d\n", sizeof(Scalar));
157 cprintf("sizeof(Vector) = %d\n", sizeof(Vector));
158 cprintf("sizeof(Distribution) = %d\n", sizeof(Distribution));
159
160 s1
161 .name("Stat01")
162 .desc("this is statistic 1")
163 ;
164
165 s2
166 .name("Stat02")
167 .desc("this is statistic 2")
168 .prereq(s11)
169 ;
170
171 s3
172 .name("Stat03")
173 .desc("this is statistic 3")
174 .prereq(f5)
175 ;
176
177 s4
178 .name("Stat04")
179 .desc("this is statistic 4")
180 .prereq(s11)
181 ;
182
183 s5
184 .init(5)
185 .name("Stat05")
186 .desc("this is statistic 5")
187 .prereq(s11)
188 .subname(0, "foo1")
189 .subname(1, "foo2")
190 .subname(2, "foo3")
191 .subname(3, "foo4")
192 .subname(4, "foo5")
193 ;
194
195 s6
196 .init(1, 100, 13)
197 .name("Stat06")
198 .desc("this is statistic 6")
199 .prereq(s11)
200 ;
201
202 s7
203 .init(7)
204 .name("Stat07")
205 .desc("this is statistic 7")
206 .precision(1)
207 .flags(pdf | total)
208 .prereq(s11)
209 ;
210
211 s8
212 .init(10)
213 .name("Stat08")
214 .desc("this is statistic 8")
215 .precision(2)
216 .prereq(s11)
217 .subname(4, "blarg")
218 ;
219
220 s9
221 .name("Stat09")
222 .desc("this is statistic 9")
223 .precision(4)
224 .prereq(s11)
225 ;
226
227 s10
228 .name("Stat10")
229 .desc("this is statistic 10")
230 .prereq(s11)
231 ;
232
233 s12
234 .init(1, 100, 13)
235 .name("Stat12")
236 .desc("this is statistic 12")
237 ;
238
239 s13
240 .init(4, 0, 99, 10)
241 .name("Stat13")
242 .desc("this is statistic 13")
243 ;
244
245 s14
246 .init(9)
247 .name("Stat14")
248 .desc("this is statistic 14")
249 ;
250
251 s15
252 .init(10)
253 .name("Stat15")
254 .desc("this is statistic 15")
255 ;
256
257 s16
258 .init(2, 9)
259 .name("Stat16")
260 .desc("this is statistic 16")
261 .flags(total)
262 .subname(0, "sub0")
263 .subname(1, "sub1")
264 .ysubname(0, "y0")
265 .ysubname(1, "y1")
266 ;
267
268 s17
269 .functor(testfunc)
270 .name("Stat17")
271 .desc("this is stat 17")
272 ;
273
274 TestClass testclass;
275 s18
276 .functor(testclass)
277 .name("Stat18")
278 .desc("this is stat 18")
279 ;
280
281 h01
282 .init(11)
283 .name("Histogram01")
284 .desc("this is histogram 1")
285 ;
286
287 h02
288 .init(10)
289 .name("Histogram02")
290 .desc("this is histogram 2")
291 ;
292
293 h03
294 .init(11)
295 .name("Histogram03")
296 .desc("this is histogram 3")
297 ;
298
299 h04
300 .init(10)
301 .name("Histogram04")
302 .desc("this is histogram 4")
303 ;
304
305 h05
306 .init(11)
307 .name("Histogram05")
308 .desc("this is histogram 5")
309 ;
310
311 h06
312 .init(10)
313 .name("Histogram06")
314 .desc("this is histogram 6")
315 ;
316
317 h07
318 .init(11)
319 .name("Histogram07")
320 .desc("this is histogram 7")
321 ;
322
323 h08
324 .init(10)
325 .name("Histogram08")
326 .desc("this is histogram 8")
327 ;
328
329 h09
330 .init(11)
331 .name("Histogram09")
332 .desc("this is histogram 9")
333 ;
334
335 h10
336 .init(10)
337 .name("Histogram10")
338 .desc("this is histogram 10")
339 ;
340
341 h11
342 .init(11)
343 .name("Histogram11")
344 .desc("this is histogram 11")
345 ;
346
347 h12
348 .init(10)
349 .name("Histogram12")
350 .desc("this is histogram 12")
351 ;
352
353 f1
354 .name("Formula1")
355 .desc("this is formula 1")
356 .prereq(s11)
357 ;
358
359 f2
360 .name("Formula2")
361 .desc("this is formula 2")
362 .prereq(s11)
363 .precision(1)
364 ;
365
366 f3
367 .name("Formula3")
368 .desc("this is formula 3")
369 .prereq(s11)
370 .subname(0, "bar1")
371 .subname(1, "bar2")
372 .subname(2, "bar3")
373 .subname(3, "bar4")
374 .subname(4, "bar5")
375 ;
376
377 f4
378 .name("Formula4")
379 .desc("this is formula 4")
380 ;
381
382
383 f1 = s1 + s2;
384 f2 = (-s1) / (-s2) * (-s3 + ULL(100) + s4);
385 f3 = sum(s5) * s7;
386 f4 += constant(10.0);
387 f4 += s5[3];
388 f5 = constant(1);
389
390 enable();
391 reset();
392
393 s16[1][0] = 1;
394 s16[0][1] = 3;
395 s16[0][0] = 2;
396 s16[1][1] = 9;
397 s16[1][1] += 9;
398 s16[1][8] += 8;
399 s16[1][7] += 7;
400 s16[1][6] += 6;
401 s16[1][5] += 5;
402 s16[1][4] += 4;
403
404 s11 = 1;
405 s3 = 9;
406 s8[3] = 9;
407 s15[0].sample(1234);
408 s15[1].sample(1234);
409 s15[2].sample(1234);
410 s15[3].sample(1234);
411 s15[4].sample(1234);
412 s15[5].sample(1234);
413 s15[6].sample(1234);
414 s15[7].sample(1234);
415 s15[8].sample(1234);
416 s15[9].sample(1234);
417
418 s10.sample(1000000000);
419 curTick(curTick() + ULL(1000000));
420 s10.sample(100000);
421 s10.sample(100000);
422 s10.sample(100000);
423 s10.sample(100000);
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 s13[0].sample(12);
434 s13[1].sample(29);
435 s13[2].sample(12);
436 s13[3].sample(29);
437 s13[0].sample(42);
438 s13[1].sample(29);
439 s13[2].sample(42);
440 s13[3].sample(32);
441 s13[0].sample(52);
442 s13[1].sample(49);
443 s13[2].sample(42);
444 s13[3].sample(25);
445 s13[0].sample(32);
446 s13[1].sample(49);
447 s13[2].sample(22);
448 s13[3].sample(49);
449 s13[0].sample(62);
450 s13[1].sample(99);
451 s13[2].sample(72);
452 s13[3].sample(23);
453 s13[0].sample(52);
454 s13[1].sample(78);
455 s13[2].sample(69);
456 s13[3].sample(49);
457
458 s14[0].sample(1234);
459 s14[1].sample(4134);
460 s14[4].sample(1213);
461 s14[3].sample(1124);
462 s14[2].sample(1243);
463 s14[7].sample(1244);
464 s14[4].sample(7234);
465 s14[2].sample(9234);
466 s14[3].sample(1764);
467 s14[7].sample(1564);
468 s14[3].sample(3234);
469 s14[1].sample(2234);
470 s14[5].sample(1234);
471 s14[2].sample(4334);
472 s14[2].sample(1234);
473 s14[4].sample(4334);
474 s14[6].sample(1234);
475 s14[8].sample(8734);
476 s14[1].sample(5234);
477 s14[3].sample(8234);
478 s14[7].sample(5234);
479 s14[4].sample(4434);
480 s14[3].sample(7234);
481 s14[2].sample(1934);
482 s14[1].sample(9234);
483 s14[5].sample(5634);
484 s14[3].sample(1264);
485 s14[7].sample(5223);
486 s14[0].sample(1234);
487 s14[0].sample(5434);
488 s14[3].sample(8634);
489 s14[1].sample(1234);
490
491
492 s15[0].sample(1234);
493 s15[1].sample(4134);
494 curTick(curTick() + ULL(1000000));
495 s15[4].sample(1213);
496 curTick(curTick() + ULL(1000000));
497 s15[3].sample(1124);
498 curTick(curTick() + ULL(1000000));
499 s15[2].sample(1243);
500 curTick(curTick() + ULL(1000000));
501 s15[7].sample(1244);
502 curTick(curTick() + ULL(1000000));
503 s15[4].sample(7234);
504 s15[2].sample(9234);
505 s15[3].sample(1764);
506 s15[7].sample(1564);
507 s15[3].sample(3234);
508 s15[1].sample(2234);
509 curTick(curTick() + ULL(1000000));
510 s15[5].sample(1234);
511 curTick(curTick() + ULL(1000000));
512 s15[9].sample(4334);
513 curTick(curTick() + ULL(1000000));
514 s15[2].sample(1234);
515 curTick(curTick() + ULL(1000000));
516 s15[4].sample(4334);
517 s15[6].sample(1234);
518 curTick(curTick() + ULL(1000000));
519 s15[8].sample(8734);
520 curTick(curTick() + ULL(1000000));
521 s15[1].sample(5234);
522 curTick(curTick() + ULL(1000000));
523 s15[3].sample(8234);
524 curTick(curTick() + ULL(1000000));
525 s15[7].sample(5234);
526 s15[4].sample(4434);
527 s15[3].sample(7234);
528 s15[2].sample(1934);
529 s15[1].sample(9234);
530 curTick(curTick() + ULL(1000000));
531 s15[5].sample(5634);
532 s15[3].sample(1264);
533 s15[7].sample(5223);
534 s15[0].sample(1234);
535 s15[0].sample(5434);
536 s15[3].sample(8634);
537 curTick(curTick() + ULL(1000000));
538 s15[1].sample(1234);
539
540 s4 = curTick();
541
542 s8[3] = 99999;
543
544 s3 = 12;
545 s3++;
546 curTick(curTick() + 9);
547
548 s1 = 9;
549 s1 += 9;
550 s1 -= 11;
551 s1++;
552 ++s1;
553 s1--;
554 --s1;
555
556 s2 = 9;
557
558 s5[0] += 1;
559 s5[1] += 2;
560 s5[2] += 3;
561 s5[3] += 4;
562 s5[4] += 5;
563
564 s7[0] = 10;
565 s7[1] = 20;
566 s7[2] = 30;
567 s7[3] = 40;
568 s7[4] = 50;
569 s7[5] = 60;
570 s7[6] = 70;
571
572 s6.sample(0);
573 s6.sample(1);
574 s6.sample(2);
575 s6.sample(3);
576 s6.sample(4);
577 s6.sample(5);
578 s6.sample(6);
579 s6.sample(7);
580 s6.sample(8);
581 s6.sample(9);
582
583 s6.sample(10);
584 s6.sample(10);
585 s6.sample(10);
586 s6.sample(10);
587 s6.sample(10);
588 s6.sample(10);
589 s6.sample(10);
590 s6.sample(10);
591 s6.sample(11);
592 s6.sample(19);
593 s6.sample(20);
594 s6.sample(20);
595 s6.sample(21);
596 s6.sample(21);
597 s6.sample(31);
598 s6.sample(98);
599 s6.sample(99);
600 s6.sample(99);
601 s6.sample(99);
602
603 s7[0] = 700;
604 s7[1] = 600;
605 s7[2] = 500;
606 s7[3] = 400;
607 s7[4] = 300;
608 s7[5] = 200;
609 s7[6] = 100;
610
611 s9.sample(100);
612 s9.sample(100);
613 s9.sample(100);
614 s9.sample(100);
615 s9.sample(10);
616 s9.sample(10);
617 s9.sample(10);
618 s9.sample(10);
619 s9.sample(10);
620
621 curTick(curTick() + 9);
622 s4 = curTick();
623 s6.sample(100);
624 s6.sample(100);
625 s6.sample(100);
626 s6.sample(101);
627 s6.sample(102);
628
629 s12.sample(100);
630 for (int i = 0; i < 100; i++) {
631 h01.sample(i);
632 h02.sample(i);
633 }
634
635 for (int i = -100; i < 100; i++) {
636 h03.sample(i);
637 h04.sample(i);
638 }
639
640 for (int i = -100; i < 1000; i++) {
641 h05.sample(i);
642 h06.sample(i);
643 }
644
645 for (int i = 100; i >= -1000; i--) {
646 h07.sample(i);
647 h08.sample(i);
648 }
649
650 for (int i = 0; i <= 1023; i++) {
651 h09.sample(i);
652 h10.sample(i);
653 }
654
655 for (int i = -1024; i <= 1023; i++) {
656 h11.sample(i);
657 h12.sample(i);
658 }
659
660 prepare();
661
662 if (text) {
663 Text out(cout);
664 out.descriptions = descriptions;
665 out();
666 }
667
668#if USE_MYSQL
669 if (!mysql_name.empty()) {
670 MySql out;
671 out.connect(mysql_host, mysql_db, mysql_user, mysql_passwd, "test",
672 mysql_name, "test");
673 out();
674 }
675#endif
676
677 return 0;
678}