dram.cc

来自「M5,一个功能强大的多处理器系统模拟器.很多针对处理器架构,性能的研究都使用它作」· CC 代码 · 共 1,471 行 · 第 1/5 页

CC
1,471
字号
                                full_overlapping++;                              }                            else/*in between case*/                              {                                lat = SD_T_READ_READ_SBANK-corrected_overlap;                                in_between_case++;                                partial_overlapping++;                              }                          }                        else/*worst case*/                          {                            lat = SD_T_READ_READ_SBANK;                            worst_case++;                          }                        same_bank_read_access++;                        sbr_after_read++;                      }                    else/*write*/                      {/*no option case*/                        lat = SD_T_WRITE_WRITE_SBANK;                        same_bank_write_access++;                        sbw_after_write++;                        worst_case++;                      }                  }              }            else /*other bank*/              {                if (cmdIsRead)                  {                        /* Page empty */                    if (current_row == active_row[current_bank])/*row is still active*/                      {                        if (corrected_overlap > 0 )/*overlapping*/                          {                            if(corrected_overlap >= pre_lat)/*best case*/                              {                                lat = SD_BEST_T_READ_READ_OBANK;                                best_case++;                                full_overlapping++;                              }                            else/*in between case*/                              {                                lat = SD_T_READ_READ_OBANK - corrected_overlap;                                in_between_case++;                                partial_overlapping++;                              }                          }                        else/*in between case*/                          {                            lat = SD_T_READ_READ_OBANK;                            in_between_case++;                          }                        other_bank_read_access_hit++;                        obr_after_read_hit++;                      }                    else/*row is not active*/                      {                        if (corrected_overlap > 0 )/*overlapping*/                          {                            if(corrected_overlap >= SD_T_READ_READ_OBANK )/*best case*/                              {                                lat = SD_BEST_T_READ_READ_OBANK;                                best_case++;                                full_overlapping++;                              }                            else/*in between case*/                              {                                lat = SD_T_READ_READ_OBANK-corrected_overlap;                                in_between_case++;                                partial_overlapping++;                              }                          }                        else/*worst case*/                          {                            lat = SD_T_READ_READ_OBANK;                            worst_case++;                          }                          // DR keep track of time between misses                          was_miss = 1;                        other_bank_read_access_miss[0]++;                        obr_after_read_miss++;                      }                  }                else/*write*/                  {                    if (current_row == active_row[current_bank])/*row is still active*/                      { /*best_case*/                        lat = SD_BEST_T_WRITE_WRITE_OBANK;                        best_case++;                        other_bank_write_access_hit++;                        obw_after_write_hit++;                      }                    else/*row is not active*/                      {                        if (corrected_overlap > 0 )/*overlapping*/                          {                            if(corrected_overlap >=SD_T_WRITE_WRITE_OBANK)/*best case*/                              {                                lat = SD_BEST_T_WRITE_WRITE_OBANK;                                best_case++;                                full_overlapping++;                              }                            else/*in between case*/                              {                                lat = SD_T_WRITE_WRITE_OBANK-corrected_overlap;                                in_between_case++;                                partial_overlapping++;                              }                          }                        else/*worst case*/                          {                            lat = SD_T_WRITE_WRITE_OBANK;                            worst_case++;                          }                          // DR keep track of time between misses                          was_miss = 1;                        other_bank_write_access_miss[0]++;                        obw_after_write_miss++;                      }                  }              }          }        else /*lastCmdIsRead != cmdIsRead*/          {            if (current_bank == last_bank)/*same bank*/              {                if (current_row == last_row)/*same row*/                  {                        /* Page Hit */                    if (cmdIsRead)                      {/*worst case*/                        lat = SD_T_READ_WRITE_SROW;                        srow_flag = true;                        same_row_read_access++;                        srr_after_write++;                        worst_case++;                      }                    else/*write*/                      {/*worst case*/                        lat = SD_T_WRITE_READ_SROW;                        srow_flag = true;                        same_row_write_access++;                        srw_after_read++;                        worst_case++;                      }                  }                else /*other row in same bank*/                  {                        /* Page Miss */                    if (cmdIsRead)                      {/*worst case*/                        lat = SD_T_READ_WRITE_SBANK;                        same_bank_read_access++;                        sbr_after_write++;                        worst_case++;                      }                    else/*write*/                      {                        if (corrected_overlap > 0 )/*overlapping*/                          {                            if (corrected_overlap >= pre_lat)/*best case*/                              {                                lat = SD_BEST_T_WRITE_READ_SBANK;                                best_case++;                                full_overlapping++;                              }                            else/*in between case*/                              {                                lat = SD_T_WRITE_READ_SBANK-corrected_overlap;                                in_between_case++;                                partial_overlapping++;                              }                          }                        else/*worst case*/                          {                            lat = SD_T_WRITE_READ_OBANK;                            worst_case++;                          }                        same_bank_write_access++;                        sbw_after_read++;                      }                  }              }            else /*other bank*/              {                        /* Page empty */                if (cmdIsRead)                  {                    if (current_row == active_row[current_bank])/*row is still active*/                      { /*best case*/                        lat = SD_BEST_T_READ_WRITE_OBANK;                        best_case++;                        other_bank_read_access_hit++;                        obr_after_write_hit++;                      }                    else/*row is not active*/                      {                        if (corrected_overlap > 0 )/*overlapping*/                          {                            if(corrected_overlap >= (pre_lat+act_lat))/*best case*/                              {                                lat = SD_BEST_T_READ_WRITE_OBANK;                                best_case++;                                full_overlapping++;                              }                            else/*in between case*/                              {                                lat = SD_T_READ_WRITE_OBANK-corrected_overlap;                                in_between_case++;                                partial_overlapping++;                              }                          }                        else/*worst case*/                          {                            lat = SD_T_READ_WRITE_OBANK;                            worst_case++;                          }                          // DR keep track of time between misses                          was_miss = 1;                        other_bank_read_access_miss[0]++;                        obr_after_write_miss++;                      }                  }                else/*write*/                  {                    if (current_row == active_row[current_bank])/*row is still active*/                      { /*best case*/                        lat = SD_BEST_T_WRITE_READ_OBANK;                        best_case++;                        other_bank_write_access_hit++;                        obw_after_read_hit++;                      }                    else/*row is not active*/                      {                        if (corrected_overlap > 0 )/*overlapping*/                          {                            if (corrected_overlap >= (SD_T_WRITE_READ_OBANK-SD_BEST_T_WRITE_READ_OBANK))/*best case*/                              {/*best case*/                                lat = SD_BEST_T_WRITE_READ_OBANK;                                best_case++;                                full_overlapping++;                              }                            else/*in between case*/                              {                                lat = SD_T_WRITE_READ_OBANK-corrected_overlap;                                in_between_case++;                                partial_overlapping++;                              }                          }                        else/*worst case*/                          {                            lat = SD_T_WRITE_READ_OBANK;                            worst_case++;                          }                          // DR keep track of time between misses                          was_miss = 1;                        other_bank_write_access_miss[0]++;                        obw_after_read_miss++;                      }                  }              }          }        /*fprintf(stderr,"%4d %4d ",lat,active_row[current_bank]);debugging*/        lat += chunks; /* burst length added*/        if(srow_flag == false)                timing_correction = cpu_ratio*(trc_lat - pre_lat - act_lat - cas_lat - 1);        /*fprintf(stderr,"%4d ",lat);debugging*/        active_row[current_bank]=current_row; /* open-page (hit) register */        lastCmdIsRead = cmdIsRead;        last_bank = current_bank;        last_row  = current_row;        if (cpu_ratio < 1.0)          {            lat = (lat+((int)(1/cpu_ratio)-1))/(int)(1/cpu_ratio);          }        else          {            temp = (int)(lat*cpu_ratio);            lat = (lat*cpu_ratio == temp)?temp:(temp+1); /*round up*/          }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?