Ignore:
Timestamp:
Feb 19, 2009, 5:31:47 PM (15 years ago)
Author:
rosiere
Message:

1) OOO_egine : add stat to depiste low perf source
2) Commit : add stat
3) LSU_Pointer : retire - always ack (else combinatory loop). insert - max nb_inst_memory
4) TopLevel? : add debug_idle_time to stop combinatory loop.
5) Issue_queue : add reexecute_queue, new implementation (routage after issue_queue)
6) Decod / Predictor : add "can_continue"

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop
Files:
1 added
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Load_store_unit.h

    r97 r110  
    6767  private   : counter_t                      * _stat_percent_use_load_queue;
    6868  private   : counter_t                      * _stat_percent_use_speculative_access_queue;
     69
     70  private   : counter_t                      * _stat_nb_inst_load;
     71  private   : counter_t                      * _stat_nb_inst_load_commit_speculative;
     72  private   : counter_t                      * _stat_nb_inst_load_commit_miss;
    6973
    7074//   private   : counter_t                      * _stat_nb_load_miss_speculation;
     
    226230
    227231#ifdef STATISTICS
    228   public  : void     statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
     232  public  : void     statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
     233  public  : void     statistics_deallocation   (void);
    229234#endif
    230235                                               
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit.cpp

    r88 r110  
    5656        log_printf(INFO,Load_store_unit,FUNCTION,"Allocation of statistics");
    5757       
    58         statistics_declaration(param_statistics);
     58        statistics_allocation(param_statistics);
    5959      }
    6060#endif
     
    181181#ifdef STATISTICS
    182182    if (usage_is_set(_usage,USE_STATISTICS))
    183       {
    184         log_printf(INFO,Load_store_unit,FUNCTION,"Generate Statistics file");
    185        
    186         delete _stat;
    187       }
     183      statistics_deallocation ();
    188184#endif
    189185
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp

    r106 r110  
    602602                              _load_queue[index_load]._exception = EXCEPTION_MEMORY_MISS_SPECULATION;
    603603                              _load_queue[index_load]._write_rd  = 1; // write the good result
     604
     605#ifdef STATISTICS
     606                              if (usage_is_set(_usage,USE_STATISTICS))
     607                                (*_stat_nb_inst_load_commit_miss) ++;
     608#endif
    604609                            }
    605610                         
     
    696701#ifdef DEBUG_TEST
    697702                      if (is_operation_memory_store_head(operation) == true)
    698                         throw ErrorMorpheo(_("Transaction in memory_in's interface, actual state of store_queue is \"STORE_QUEUE_NO_VALID_NO_SPECULATIVE\", also a previous store_head have been receiveid. But this operation is a store_head."));
     703                        throw ERRORMORPHEO(FUNCTION,_("Transaction in memory_in's interface, actual state of store_queue is \"STORE_QUEUE_NO_VALID_NO_SPECULATIVE\", also a previous store_head have been receiveid. But this operation is a store_head."));
    699704#endif
    700705                      // Test if have a new exception (priority : miss_speculation)
     
    714719#ifdef DEBUG_TEST
    715720                      if (is_operation_memory_store_head(operation) == false)
    716                         throw ErrorMorpheo(_("Transaction in memory_in's interface, actual state of store_queue is \"STORE_QUEUE_VALID_SPECULATIVE\", also a previous access with register and address have been receiveid. But this operation is a not store_head."));
     721                        throw ERRORMORPHEO(FUNCTION,_("Transaction in memory_in's interface, actual state of store_queue is \"STORE_QUEUE_VALID_SPECULATIVE\", also a previous access with register and address have been receiveid. But this operation is a not store_head."));
    717722#endif
    718723                      if (operation == OPERATION_MEMORY_STORE_HEAD_KO)
     
    729734                  case STORE_QUEUE_COMMIT                  :
    730735                    {
    731                       throw ErrorMorpheo("<Load_store_unit::function_speculative_load_commit_transition> Invalid state and operation");
     736                      throw ERRORMORPHEO(FUNCTION,"<Load_store_unit::function_speculative_load_commit_transition> Invalid state and operation");
    732737                    }
    733738                  }
     
    847852                  // if the speculation is a miss, write_rd is re set at 1.
    848853                  _load_queue [internal_MEMORY_OUT_PTR]._write_rd = 0;
     854
     855#ifdef STATISTICS
     856                  if (usage_is_set(_usage,USE_STATISTICS))
     857                    (*_stat_nb_inst_load_commit_speculative) ++;
     858#endif
     859
    849860                  break;
    850861                }
     
    889900              case SELECT_LOAD_QUEUE :
    890901                {
    891                   throw ErrorMorpheo(_("Invalid selection"));
     902                  throw ERRORMORPHEO(FUNCTION,_("Invalid selection"));
    892903                  break;
    893904                }
     
    964975           
    965976            _speculative_access_queue_control->pop();
    966           }
     977
     978#ifdef STATISTICS
     979            if (usage_is_set(_usage,USE_STATISTICS))
     980              (*_stat_nb_inst_load) ++;
     981#endif
     982          }
    967983
    968984        //================================================================
     
    9931009#ifdef DEBUG_TEST
    9941010                if (not have_dcache_rsp(_load_queue [packet_id]._operation))
    995                   throw ErrorMorpheo(_("Receive of respons, but the corresponding operation don't wait a respons."));
     1011                  throw ERRORMORPHEO(FUNCTION,_("Receive of respons, but the corresponding operation don't wait a respons."));
    9961012#endif
    9971013
     
    10321048                      case LOAD_QUEUE_WAIT_CHECK : _load_queue [packet_id]._state = LOAD_QUEUE_COMMIT_CHECK; break;
    10331049                      case LOAD_QUEUE_WAIT       : _load_queue [packet_id]._state = LOAD_QUEUE_COMMIT      ; break;
    1034                       default : throw ErrorMorpheo(_("Illegal state (dcache_rsp).")); break;
     1050                      default : throw ERRORMORPHEO(FUNCTION,_("Illegal state (dcache_rsp).")); break;
    10351051                      }
    10361052                  }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_statistics_allocation.cpp

    r108 r110  
    2020
    2121#undef  FUNCTION
    22 #define FUNCTION "Load_store_unit::statistics_declaration"
    23   void Load_store_unit::statistics_declaration (morpheo::behavioural::Parameters_Statistics * param_statistics)
     22#define FUNCTION "Load_store_unit::statistics_allocation"
     23  void Load_store_unit::statistics_allocation (morpheo::behavioural::Parameters_Statistics * param_statistics)
    2424  {
    2525    log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
     
    4949    _stat->create_expr("percent_use_speculative_access_queue" , "/ * average_use_speculative_access_queue 100 " + toString(_param->_size_speculative_access_queue), false);
    5050
     51
     52    _stat_nb_inst_load                         = _stat->create_variable("nb_inst_load"                   );
     53    _stat_nb_inst_load_commit_speculative      = _stat->create_variable("nb_inst_load_commit_speculative");
     54    _stat_nb_inst_load_commit_miss             = _stat->create_variable("nb_inst_load_commit_miss"       );
     55
     56    _stat->create_expr_percent("percent_nb_inst_load_commit_speculative","nb_inst_load_commit_speculative", "nb_inst_load"                   , "Percent of load instruction with a speculative commit ");
     57    _stat->create_expr_percent("percent_nb_inst_load_commit_miss"       ,"nb_inst_load_commit_miss"       , "nb_inst_load_commit_speculative", "Percent of load instruction with a miss speculative commit");
     58
     59
    5160    log_printf(FUNC,Load_store_unit,FUNCTION,"End");
    5261  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_genMoore.cpp

    r88 r110  
    44 * $Id$
    55 *
    6  * [ Description ]
     6 * [ Description ]
    77 *
    88 */
     
    2727    log_function(Reservation_station,FUNCTION,_name.c_str());
    2828
    29     // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~
     29    // ~~~~~[ Interface "insert" ]~~~~~~~~~~~~~~~~~~~~~~~~
    3030   
    3131    // accept a new instructions when reservation_station is not full
     
    3838    PORT_WRITE(out_INSERT_ACK, internal_INSERT_ACK);
    3939
    40     // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~
     40    // ~~~~~[ Interface "retire" ]~~~~~~~~~~~~~~~~~~~~~~~
    4141
    4242    uint32_t index_queue=0;
     
    4646      {
    4747        bool     val        = false;
    48         uint32_t index_find = 0;;
     48        uint32_t index_find = 0;
     49
     50        log_printf(TRACE,Reservation_station,FUNCTION,"  * RETIRE [%d]",i);
    4951
    5052        for (; (
     
    6769              (
    6870#ifdef  SYSTEMC_VHDL_COMPATIBILITY
    69                _queue_valid [index_queue]      and
     71               _queue_valid [index_queue] and
    7072#endif
    7173               _queue[index_find]._data_ra_val and
     
    7476               );
    7577
    76 //          cout << "========== Moore : " << endl
    77 //               << " * i           : " << i << endl
    78 //               << " * val         : " << val << endl
    79 //               << " * index_queue : " << index_queue << endl
    80 //               << " * index_find  : " << index_find << endl;
     78            log_printf(
     79#ifdef  SYSTEMC_VHDL_COMPATIBILITY
     80                       TRACE,Reservation_station,FUNCTION,"    [%d] valid : %d, data ra %d, rb %d, rc %d - %d",
     81                       index_find,
     82                       _queue_valid [index_queue],
     83#else
     84                       TRACE,Reservation_station,FUNCTION,"    [%d] data ra %d, rb %d, rc %d - %d",
     85                       index_find,
     86#endif
     87                       _queue[index_find]._data_ra_val,
     88                       _queue[index_find]._data_rb_val,
     89                       _queue[index_find]._data_rc_val,
     90                       val);
    8191          }
    8292
Note: See TracChangeset for help on using the changeset viewer.