source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_statistics_allocation.cpp @ 88

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 4.7 KB
Line 
1#ifdef STATISTICS
2/*
3 * $Id: Issue_queue_statistics_allocation.cpp 88 2008-12-10 18:31:39Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Issue_queue.h"
10
11namespace morpheo {
12namespace behavioural {
13namespace core {
14namespace multi_ooo_engine {
15namespace ooo_engine {
16namespace issue_queue {
17
18
19#undef  FUNCTION
20#define FUNCTION "Issue_queue::statistics_allocation"
21  void Issue_queue::statistics_allocation (morpheo::behavioural::Parameters_Statistics * param_statistics)
22  {
23    log_begin(Issue_queue,FUNCTION);
24
25    _stat = new Stat (static_cast<std::string>(_name),
26                      "Issue_queue",
27                      param_statistics);
28   
29    _stat_bank_nb_inst     = new counter_t * [_param->_nb_bank];
30    _stat_nb_inst_issue_in = new counter_t * [_param->_nb_rename_unit];
31
32    // instruction
33    {
34      _stat_nb_inst_reexecute = _stat->create_variable("nb_inst_reexecute");
35
36      std::string sum_nb_inst_issue_in = "";
37      std::string sum_average_use_interface_issue_in = "";
38      for (uint32_t i=0; i<_param->_nb_rename_unit; i++)
39        {
40          _stat_nb_inst_issue_in [i] = _stat->create_variable("nb_inst_issue_in_"+toString(i));
41         
42          _stat->create_expr_average_by_cycle("average_use_interface_issue_in_"+toString(i), "nb_inst_issue_in_"+toString(i), "", toString(_("Average instruction by cycle on issue_in interface (rename_unit %d)"),i));
43          _stat->create_expr_percent         ("percent_use_interface_issue_in_"+toString(i) , "average_use_interface_issue_in_"+toString(i), toString(_param->_nb_inst_rename [i]), toString(_("Percent usage of issue_in interface (rename_unit %d)"),i));
44         
45          if (i == 0)
46            {
47              sum_nb_inst_issue_in               = "nb_inst_issue_in_"+toString(i);
48              sum_average_use_interface_issue_in = "average_use_interface_issue_in_"+toString(i);
49            }
50          else
51            {
52              sum_nb_inst_issue_in               = "+ nb_inst_issue_in_"+toString(i) + " " +sum_nb_inst_issue_in;
53              sum_average_use_interface_issue_in = "+ average_use_interface_issue_in_"+toString(i)+ " "+sum_average_use_interface_issue_in;
54            }
55        }
56     
57      _stat->create_expr_average_by_cycle("average_use_interface_reexecute", "nb_inst_reexecute", "", _("Average instruction by cycle on reexecute interface"));
58      _stat->create_expr_percent         ("percent_use_interface_reexecute" , "average_use_interface_reexecute", toString(_param->_nb_inst_reexecute), _("Percent usage of reexecute interface"));
59     
60      _stat->create_expr_average_by_cycle("average_inst_in", "+ nb_inst_reexecute " + sum_nb_inst_issue_in, "", _("Average instruction by cycle"));
61      _stat->create_expr_percent         ("percent_inst_in"          , "average_inst_in"              , toString(_param->_nb_bank), _("Percent of instruction by cycle"));
62      _stat->create_expr_percent         ("percent_inst_reexecute", "average_use_interface_reexecute" , "average_inst_in", _("Percent of instruction reexecute by cycle"));
63      _stat->create_expr_percent         ("percent_inst_issue_in" , sum_average_use_interface_issue_in, "average_inst_in", _("Percent of instruction issue_in by cycle"));
64    }
65   
66    {
67      _stat_nb_inst_issue_out = _stat->create_variable("nb_inst_issue_out");
68
69      _stat->create_expr_average_by_cycle("average_use_interface_issue_out", "nb_inst_issue_out", "", _("Average instruction by cycle on issue_out interface"));
70      _stat->create_expr_percent         ("percent_use_interface_issue_out" , "average_use_interface_issue_out", toString(_param->_nb_inst_issue), _("Percent usage of issue_out interface"));
71    }
72
73    // bank/queue occupation
74    {
75      std::string sum_bank_nb_inst = "";
76      for (uint32_t i=0; i<_param->_nb_bank; i++)
77        {
78          _stat_bank_nb_inst [i] = _stat->create_variable("bank_nb_inst_"+toString(i));
79         
80          _stat->create_expr_average_by_cycle("average_occupation_bank_"+toString(i), "bank_nb_inst_"+toString(i), "", toString(_("Average instruction by cycle (bank %d)"),i));
81          _stat->create_expr_percent         ("percent_occupation_bank_"+toString(i), "average_occupation_bank_"+toString(i), toString(_param->_size_bank), toString(_("Percent occupation of bank (bank %d)"),i));
82         
83          if (i == 0)
84            sum_bank_nb_inst = "bank_nb_inst_"+toString(i);
85          else
86            sum_bank_nb_inst = "+ bank_nb_inst_"+toString(i) + " " +sum_bank_nb_inst;
87        }
88     
89      _stat->create_expr_average_by_cycle("average_occupation_bank", sum_bank_nb_inst, "", _("Average instruction by cycle (all bank)"));
90      _stat->create_expr_percent         ("percent_occupation_bank" , "average_occupation_bank", toString(_param->_size_queue), _("Percent occupation of issue_queue (all bank)"));
91    }
92
93    log_end(Issue_queue,FUNCTION);
94  };
95
96}; // end namespace issue_queue
97}; // end namespace ooo_engine
98}; // end namespace multi_ooo_engine
99}; // end namespace core
100
101}; // end namespace behavioural
102}; // end namespace morpheo             
103#endif
Note: See TracBrowser for help on using the repository browser.