Ignore:
Timestamp:
May 26, 2009, 9:01:47 PM (15 years ago)
Author:
rosiere
Message:

1) Context_state : Add statistics
2) Add configuration with multi front_end
3) Add optionnal pid at log filename

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h

    r119 r120  
    5252#ifdef STATISTICS
    5353  public    : Stat                           * _stat;
     54  private   : counter_t                     ** _stat_nb_cycle_state_ok                     ; //[nb_context]
     55  private   : counter_t                     ** _stat_nb_cycle_state_ko_excep               ; //[nb_context]
     56  private   : counter_t                     ** _stat_nb_cycle_state_ko_miss_branch         ; //[nb_context]
     57  private   : counter_t                     ** _stat_nb_cycle_state_ko_miss_load           ; //[nb_context]
     58  private   : counter_t                     ** _stat_nb_cycle_state_ko_miss_load_and_branch; //[nb_context]
     59  private   : counter_t                     ** _stat_nb_cycle_state_ko_msync               ; //[nb_context]
     60  private   : counter_t                     ** _stat_nb_cycle_state_ko_psync               ; //[nb_context]
     61  private   : counter_t                     ** _stat_nb_cycle_state_ko_csync               ; //[nb_context]
     62  private   : counter_t                     ** _stat_nb_cycle_state_ko_spr                 ; //[nb_context]
    5463#endif
    5564
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Types.h

    r119 r120  
    2929      CONTEXT_STATE_KO_EXCEP_ADDR                      , // update address manager
    3030      CONTEXT_STATE_KO_EXCEP_SPR                       , // update spr (epc, esr, sr[DSX])
    31 //       CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR           , // update address manager
    32 //       CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE    , // branch is complete, wait update by update_prediction_table
    3331      CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE         , // branch is complete, wait update by update_prediction_table
    3432      CONTEXT_STATE_KO_MISS_BRANCH_ADDR                , // update address manager
     
    6866      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_ADDR                       : return "context_state_ko_excep_addr"                      ; break;
    6967      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_SPR                        : return "context_state_ko_excep_spr"                       ; break;
    70 //       case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE     : return "context_state_ko_miss_branch_fast_wait_update"    ; break;
    71 //       case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR            : return "context_state_ko_miss_branch_fast_addr"           ; break;
    7268      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE          : return "context_state_ko_miss_branch_wait_update"         ; break;
    7369      case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_ADDR                 : return "context_state_ko_miss_branch_addr"                ; break;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_statistics_allocation.cpp

    r83 r120  
    88
    99#include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h"
     10#include "Behavioural/include/Allocation.h"
    1011
    1112namespace morpheo {
     
    2627                      "Context_State",
    2728                      param_statistics);
    28    
     29
     30    ALLOC1(_stat_nb_cycle_state_ok                     ,counter_t *,_param->_nb_context);
     31    ALLOC1(_stat_nb_cycle_state_ko_excep               ,counter_t *,_param->_nb_context);
     32    ALLOC1(_stat_nb_cycle_state_ko_miss_branch         ,counter_t *,_param->_nb_context);
     33    ALLOC1(_stat_nb_cycle_state_ko_miss_load           ,counter_t *,_param->_nb_context);
     34    ALLOC1(_stat_nb_cycle_state_ko_miss_load_and_branch,counter_t *,_param->_nb_context);
     35    ALLOC1(_stat_nb_cycle_state_ko_msync               ,counter_t *,_param->_nb_context);
     36    ALLOC1(_stat_nb_cycle_state_ko_psync               ,counter_t *,_param->_nb_context);
     37    ALLOC1(_stat_nb_cycle_state_ko_csync               ,counter_t *,_param->_nb_context);
     38    ALLOC1(_stat_nb_cycle_state_ko_spr                 ,counter_t *,_param->_nb_context);
     39
     40    for (uint32_t i=0; i<_param->_nb_context; ++i)
     41      {
     42        _stat_nb_cycle_state_ok                      [i] = _stat->create_counter("nb_cycle_state_ok_"                     +toString(i),"",toString(_("Number of cycle in state ok                      (context %d)"),i));
     43        _stat_nb_cycle_state_ko_excep                [i] = _stat->create_counter("nb_cycle_state_ko_excep_"               +toString(i),"",toString(_("Number of cycle in state ko_excep                (context %d)"),i));
     44        _stat_nb_cycle_state_ko_miss_branch          [i] = _stat->create_counter("nb_cycle_state_ko_miss_branch_"         +toString(i),"",toString(_("Number of cycle in state ko_miss_branch          (context %d)"),i));
     45        _stat_nb_cycle_state_ko_miss_load            [i] = _stat->create_counter("nb_cycle_state_ko_miss_load_"           +toString(i),"",toString(_("Number of cycle in state ko_miss_load            (context %d)"),i));
     46        _stat_nb_cycle_state_ko_miss_load_and_branch [i] = _stat->create_counter("nb_cycle_state_ko_miss_load_and_branch_"+toString(i),"",toString(_("Number of cycle in state ko_miss_load_and_branch (context %d)"),i));
     47        _stat_nb_cycle_state_ko_msync                [i] = _stat->create_counter("nb_cycle_state_ko_msync_"               +toString(i),"",toString(_("Number of cycle in state ko_msync                (context %d)"),i));
     48        _stat_nb_cycle_state_ko_psync                [i] = _stat->create_counter("nb_cycle_state_ko_psync_"               +toString(i),"",toString(_("Number of cycle in state ko_psync                (context %d)"),i));
     49        _stat_nb_cycle_state_ko_csync                [i] = _stat->create_counter("nb_cycle_state_ko_csync_"               +toString(i),"",toString(_("Number of cycle in state ko_csync                (context %d)"),i));
     50        _stat_nb_cycle_state_ko_spr                  [i] = _stat->create_counter("nb_cycle_state_ko_spr_"                 +toString(i),"",toString(_("Number of cycle in state ko_spr                  (context %d)"),i));
     51
     52
     53        _stat->create_expr_percent("percent_state_ok_"                     +toString(i),"nb_cycle_state_ok_"                     +toString(i),"cycle",toString(_("Percent of cycle in state ok                      (context %d)"),i));
     54        _stat->create_expr_percent("percent_state_ko_excep_"               +toString(i),"nb_cycle_state_ko_excep_"               +toString(i),"cycle",toString(_("Percent of cycle in state ko_excep                (context %d)"),i));
     55        _stat->create_expr_percent("percent_state_ko_miss_branch_"         +toString(i),"nb_cycle_state_ko_miss_branch_"         +toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_branch          (context %d)"),i));
     56        _stat->create_expr_percent("percent_state_ko_miss_load_"           +toString(i),"nb_cycle_state_ko_miss_load_"           +toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_load            (context %d)"),i));
     57        _stat->create_expr_percent("percent_state_ko_miss_load_and_branch_"+toString(i),"nb_cycle_state_ko_miss_load_and_branch_"+toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_load_and_branch (context %d)"),i));
     58        _stat->create_expr_percent("percent_state_ko_msync_"               +toString(i),"nb_cycle_state_ko_msync_"               +toString(i),"cycle",toString(_("Percent of cycle in state ko_msync                (context %d)"),i));
     59        _stat->create_expr_percent("percent_state_ko_psync_"               +toString(i),"nb_cycle_state_ko_psync_"               +toString(i),"cycle",toString(_("Percent of cycle in state ko_psync                (context %d)"),i));
     60        _stat->create_expr_percent("percent_state_ko_csync_"               +toString(i),"nb_cycle_state_ko_csync_"               +toString(i),"cycle",toString(_("Percent of cycle in state ko_csync                (context %d)"),i));
     61        _stat->create_expr_percent("percent_state_ko_spr_"                 +toString(i),"nb_cycle_state_ko_spr_"                 +toString(i),"cycle",toString(_("Percent of cycle in state ko_spr                  (context %d)"),i));
     62      }
     63
    2964    log_end(Context_State,FUNCTION);
    3065  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_statistics_deallocation.cpp

    r83 r120  
    88
    99#include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h"
     10#include "Behavioural/include/Allocation.h"
    1011
    1112namespace morpheo {
     
    2425
    2526    log_printf(INFO,Context_State,FUNCTION,_("Generate Statistics file"));
    26    
     27
    2728    delete _stat;
     29
     30    DELETE1(_stat_nb_cycle_state_ok                     ,_param->_nb_context);
     31    DELETE1(_stat_nb_cycle_state_ko_excep               ,_param->_nb_context);
     32    DELETE1(_stat_nb_cycle_state_ko_miss_branch         ,_param->_nb_context);
     33    DELETE1(_stat_nb_cycle_state_ko_miss_load           ,_param->_nb_context);
     34    DELETE1(_stat_nb_cycle_state_ko_miss_load_and_branch,_param->_nb_context);
     35    DELETE1(_stat_nb_cycle_state_ko_msync               ,_param->_nb_context);
     36    DELETE1(_stat_nb_cycle_state_ko_psync               ,_param->_nb_context);
     37    DELETE1(_stat_nb_cycle_state_ko_csync               ,_param->_nb_context);
     38    DELETE1(_stat_nb_cycle_state_ko_spr                 ,_param->_nb_context);
    2839   
    2940    log_end(Context_State,FUNCTION);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_transition.cpp

    r119 r120  
    678678      }
    679679
     680
     681#ifdef STATISTICS
     682    if (usage_is_set(_usage,USE_STATISTICS))
     683      for (uint32_t i=0; i<_param->_nb_context; ++i)
     684        switch(reg_STATE[i])
     685          {
     686          case CONTEXT_STATE_OK                                 : (*_stat_nb_cycle_state_ok                      [i])++; break;
     687
     688          case CONTEXT_STATE_KO_EXCEP                           :
     689          case CONTEXT_STATE_KO_EXCEP_ADDR                      :
     690          case CONTEXT_STATE_KO_EXCEP_SPR                       : (*_stat_nb_cycle_state_ko_excep                [i])++; break;
     691
     692          case CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE         :
     693          case CONTEXT_STATE_KO_MISS_BRANCH_ADDR                :
     694          case CONTEXT_STATE_KO_MISS_BRANCH_WAITEND             : (*_stat_nb_cycle_state_ko_miss_branch          [i])++; break;
     695
     696          case CONTEXT_STATE_KO_MISS_LOAD_ADDR                  :
     697          case CONTEXT_STATE_KO_MISS_LOAD_WAITEND               : (*_stat_nb_cycle_state_ko_miss_load            [i])++; break;
     698
     699          case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE:
     700          case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR       :
     701          case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND    : (*_stat_nb_cycle_state_ko_miss_load_and_branch [i])++; break;
     702
     703//        case CONTEXT_STATE_KO_MSYNC                           :
     704//        case CONTEXT_STATE_KO_MSYNC_ISSUE                     :
     705          case CONTEXT_STATE_KO_MSYNC_EXEC                      : (*_stat_nb_cycle_state_ko_msync                [i])++; break;
     706
     707//        case CONTEXT_STATE_KO_PSYNC                           :
     708          case CONTEXT_STATE_KO_PSYNC_FLUSH                     :
     709          case CONTEXT_STATE_KO_PSYNC_ADDR                      : (*_stat_nb_cycle_state_ko_psync                [i])++; break;
     710
     711//        case CONTEXT_STATE_KO_CSYNC                           :
     712          case CONTEXT_STATE_KO_CSYNC_FLUSH                     :
     713          case CONTEXT_STATE_KO_CSYNC_ADDR                      : (*_stat_nb_cycle_state_ko_csync                [i])++; break;
     714
     715//        case CONTEXT_STATE_KO_SPR                             :
     716//        case CONTEXT_STATE_KO_SPR_ISSUE                       :
     717          case CONTEXT_STATE_KO_SPR_EXEC                        : (*_stat_nb_cycle_state_ko_spr                  [i])++; break;
     718          }
     719#endif
     720
     721
     722
    680723#if DEBUG >= DEBUG_TRACE
    681724    for (uint32_t i=0; i<_param->_nb_context; i++)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_genMealy.cpp

    r119 r120  
    202202
    203203//                  can_continue [x] = false; // one branch per context, the DS don't execute
    204                     can_continue [x]&= PORT_READ(in_PREDICT_CAN_CONTINUE [i]); // one branch per context, the DS don't execute
     204                    can_continue [x]&= PORT_READ(in_PREDICT_CAN_CONTINUE [i]); // one branch per context, the DS don't execute
    205205                    have_decod_branch [x] = true;
    206                   }
     206                   
     207                    log_printf(TRACE,Decod,FUNCTION,"      * predict_can_continue   : %d",PORT_READ(in_PREDICT_CAN_CONTINUE [i]));
     208                  }
    207209
    208210                Tevent_type_t event_type = _decod_instruction->_event_type;
     
    245247
    246248                can_continue [x] &= have_transaction; // to have a in order decod !!! if a previous instruction can decod, also next instruction can't decod.
     249
     250                log_printf(TRACE,Decod,FUNCTION,"      * have_transaction       : %d",have_transaction);
     251
    247252              }
    248253
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h

    r111 r120  
    3434  public : uint32_t   _size_history              ;
    3535  public : uint32_t * _size_ras_index            ; // [nb_context]
    36   public : const bool _not_accurate_block_predict;
    3736  public : uint32_t   _nb_thread                          ;
    3837  public : uint32_t * _translate_num_context_to_num_thread;//[nb_context]                   
     38  public : const bool _accurate_block_predict    ;
     39  public : const bool _accurate_block_decod      ;
    3940
    4041//public : uint32_t   _size_context_id           ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp

    r111 r120  
    3434                          uint32_t * translate_num_context_to_num_thread ,//[nb_context]
    3535                          bool       is_toplevel):
    36     _not_accurate_block_predict (false)
     36    _accurate_block_predict (false),
     37    _accurate_block_decod   (false)
    3738  {
    3839    log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp

    r119 r120  
    88#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h"
    99#include "Behavioural/include/Allocation.h"
     10#include "Common/include/Filename.h"
    1011
    1112namespace morpheo                    {
     
    250251      if (_param->_have_thread [i])
    251252        {
    252           std::string filename = MORPHEO_LOG+"/"+toString(getpid())+"-Branchement_prediction-thread_"+toString(i)+".log";
     253          std::string filename = morpheo::filename(MORPHEO_LOG,
     254                                                   "Branchement_prediction-thread_"+toString(i),
     255                                                   "",
     256                                                   "log",
     257                                                   false,
     258                                                   log_with_pid,
     259                                                   false);
    253260         
    254261          branchement_log_file [i] .open(filename.c_str() ,std::ios::out | std::ios::trunc);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp

    r110 r120  
    3333
    3434        Tcontext_t    context     = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
    35         bool          is_accurate = reg_IS_ACCURATE [context];
     35        bool          is_accurate = _param->_accurate_block_decod or reg_IS_ACCURATE [context];
    3636        event_state_t event_state = reg_EVENT_STATE [context];
    3737        uint32_t      ptr_write   = reg_UPT_TOP     [context];
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_predict.cpp

    r88 r120  
    4545        PORT_WRITE(out_PREDICT_UPDATE_PREDICTION_ID [i], internal_PREDICT_UPDATE_PREDICTION_ID [i]);
    4646
    47         bool is_accurate = not _param->_not_accurate_block_predict or reg_IS_ACCURATE[context];
     47        bool is_accurate = _param->_accurate_block_predict or reg_IS_ACCURATE[context];
    4848
    4949        // Ack if :
     
    5252        //  * is_accurate
    5353        internal_PREDICT_ACK [i] = ((reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._state == UPDATE_FETCH_PREDICTION_STATE_EMPTY) and
    54 //                                  PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]) and
    55                                     (reg_EVENT_STATE [context] == EVENT_STATE_OK) and
     54                                    (reg_EVENT_STATE [context] == EVENT_STATE_OK) and
     55//                                  (reg_UFPT_NB_UPDATE [context] == 0) and
    5656                                    is_accurate);
    5757
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp

    r119 r120  
    203203              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._state        = UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD;
    204204
    205               Tbranch_condition_t condition = PORT_READ(in_PREDICT_BTB_CONDITION [i]);
    206 
     205              Tbranch_condition_t condition   = PORT_READ(in_PREDICT_BTB_CONDITION [i]);
     206              bool                is_accurate = _param->_accurate_block_predict or PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]);
    207207              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._condition    = condition;
    208208              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_src  = PORT_READ(in_PREDICT_BTB_ADDRESS_SRC  [i]);
    209209              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_dest = PORT_READ(in_PREDICT_BTB_ADDRESS_DEST [i]);
    210210              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._last_take    = PORT_READ(in_PREDICT_BTB_LAST_TAKE    [i]);
    211               reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._is_accurate  = PORT_READ(in_PREDICT_BTB_IS_ACCURATE  [i]);
     211              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._is_accurate  = is_accurate;
    212212              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._history      = (_param->_have_port_history)?PORT_READ(in_PREDICT_DIR_HISTORY [i]):0;
    213213              reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_ras  = PORT_READ(in_PREDICT_RAS_ADDRESS      [i]);
     
    263263                  // Have a miss !!!
    264264                  condition   = PORT_READ(in_DECOD_BTB_CONDITION [i]);
    265                   is_accurate = PORT_READ(in_DECOD_IS_ACCURATE   [i]);
     265                  is_accurate = _param->_accurate_block_decod or PORT_READ(in_DECOD_IS_ACCURATE   [i]);
    266266
    267267                  // if can_continue else don't wait the end of all instruction
Note: See TracChangeset for help on using the changeset viewer.