亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? floss_reasons.cc

?? linux下基于c++的處理器仿真平臺。具有處理器流水線
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005 * The Regents of The University of Michigan * All Rights Reserved * * This code is part of the M5 simulator, developed by Nathan Binkert, * Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions * from Ron Dreslinski, Dave Greene, Lisa Hsu, Kevin Lim, Ali Saidi, * and Andrew Schultz. * * Permission is granted to use, copy, create derivative works and * redistribute this software and such derivative works for any * purpose, so long as the copyright notice above, this grant of * permission, and the disclaimer below appear in all copies made; and * so long as the name of The University of Michigan is not used in * any advertising or publicity pertaining to the use or distribution * of this software without specific, written prior authorization. * * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE * UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND * WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE * LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM * ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH * DAMAGES. */#include <cassert>#include <iostream>#include <iomanip>#include <string>#include "base/callback.hh"#include "base/cprintf.hh"#include "base/misc.hh"#include "base/statistics.hh"#include "cpu/smt.hh"#include "encumbered/cpu/full/dyn_inst.hh"#include "encumbered/cpu/full/fetch.hh"#include "encumbered/cpu/full/floss_reasons.hh"#include "encumbered/cpu/full/cpu.hh"#include "encumbered/cpu/full/issue.hh"#include "encumbered/cpu/full/thread.hh"#include "mem/mem_cmd.hh"using namespace std;#define MAYBE_INLINE#define ENABLE_COUNTER_CHECKING 0#if ENABLE_COUNTER_CHECKINGstatic void check_counters(FullCPU *, FlossState *state);#endifstatic constchar * CommitEndDesc[NUM_COMMIT_END_CAUSES] = {    "ROB_Empty",    "Commit_BW",    "StoreBuf",    "MemBarrier",    "meta: FU",    "meta: DCache"};static constchar * IssueEndDesc[NUM_ISSUE_END_CAUSES] = {    "NoInsts",    "Queue",    "IssueBW",    "TooYoung",    "IssueInorder",    "meta: Deps",    "meta: FU",    "meta: Mem"};static constchar * DisEndDesc[NUM_DIS_END_CAUSES] = {    "IREG_Full",    "FPREG_Full",    "No_Inst",    "ROB_cap",    "IQ_cap",    "BW",    "Policy",    "Serializing",    "Broken",    "meta: IQ full",    "meta: LSQ full",    "meta: ROB full"};static constchar * FetchEndDesc[NUM_FETCH_END_CAUSES] = {    "None",    "Bandwidth",    "BrLim",    "InvPC",    "BTB_Miss",    "BrRecover",    "FaultFlush",    "Sync",    "LowConf",    "Policy",    "Unknown",    "Zero_Prio",    "meta: ICache",    "meta: QFull"};//// These *_split parameters are no longer supported in the simulator// itself, but we give them dummy values here so we can leave the// related floss_reasons intact, just in case we re-implement the// parameters at some later date.//const int fetch_split = 1;const int issue_split = 1;const int decode_split = 1;const int commit_split = 1;static const char **FUDesc;////  FlossState::clear()////  This routine is called prior to the begining of each cycle//voidFlossState::clear(){    for (int t = 0; t < SMT_MAX_THREADS; ++t) {        commit_end_cause[t] = COMMIT_CAUSE_NOT_SET;        issue_end_cause[t] = ISSUE_CAUSE_NOT_SET;	//  this has to be a "policy" since this will be the "end cause"	//  for all the threads that don't get to dispatch this cycle        dispatch_end_cause = FLOSS_DIS_POLICY;	//  Can't do this, because we need the cause from last cycle...	//      machine_floss_state.fetch_end_cause[t] = FLOSS_CAUSE_NOT_SET;	for (int j = 0; j < TheISA::MaxInstSrcRegs; ++j) {	    commit_fu[t][j] = No_OpClass;	    issue_fu[t][j]  = No_OpClass;	}	// this will serve as "not set"	commit_mem_result[t] = MA_NOT_PREDICTED;	issue_mem_result[t]  = MA_NOT_PREDICTED;	fetch_mem_result[t]  = MA_NOT_PREDICTED;    }}/*-------------------------------------------------------------------*/static MAYBE_INLINE voidblame_fu(FullCPU *cpu, int thread, double total_loss, OpClass *fu_classes, 	 FlossType type){    double fu_count = 0;    for (int i = 0; i < TheISA::MaxInstSrcRegs; ++i) {	if (fu_classes[i] != No_OpClass) {	    ++fu_count;	}    }    double loss = total_loss / fu_count;    for (int i = 0; i < TheISA::MaxInstSrcRegs; ++i) {	if (fu_classes[i] != No_OpClass) {	    int fu = fu_classes[i];	    switch (type) {		case FLOSS_IQ_FU:		  cpu->floss_iqfull_fu[thread][fu] += loss;		  break;		case FLOSS_LSQ_FU:		  cpu->floss_lsqfull_fu[thread][fu] += loss;		  break;		case FLOSS_IQ_DEPS:		  cpu->floss_iqfull_deps[thread][fu] += loss;		  break;		case FLOSS_LSQ_DEPS:		  cpu->floss_lsqfull_deps[thread][fu] += loss;		  break;		case FLOSS_ROB:		  cpu->floss_robfull_fu[thread][fu] += loss;		  break;	    }	}    }}/*-------------------------------------------------------------------*/static MAYBE_INLINE voidblame_commit_stage(FullCPU *cpu, FlossState *state, int thread,		   double total_loss){    double blame_fraction[SMT_MAX_THREADS];    double loss_part;    int commit_per_thread;    int t, cause;    int blame_threads = 1;    //    //  If we are splitting bandwidth, we may blame several causes    //    if (commit_split > 1) {        commit_per_thread = cpu->commit_width / commit_split;        for (t = 0; t < cpu->number_of_threads; t++) {	    blame_fraction[t] =		(double)(commit_per_thread - cpu->n_committed[t]) /		(double)(cpu->commit_width - cpu->n_committed_total);        }	blame_threads = cpu->number_of_threads;    } else {        //  we only use the zero-th element        blame_fraction[0] = 1;    }    //  Assign loss due to thread "t" to thread "thread"    for (t=0; t<blame_threads; t++) {        loss_part = total_loss * blame_fraction[t];	cause = state->commit_end_cause[t];        switch (cause) {	  case COMMIT_FU:	    blame_fu(cpu, thread, loss_part, state->commit_fu[t], FLOSS_ROB);            break;	  case COMMIT_DMISS:	    cpu->floss_robfull_dcache[thread][state->commit_mem_result[t]] 		+= loss_part;            break;	  default:	    cpu->floss_robfull_other[thread][cause] += loss_part;            break;        }    }}/*-------------------------------------------------------------------*/static MAYBE_INLINE voidblame_issue_stage(FullCPU *cpu, FlossState *state, int thread, 		  double total_loss, bool lsq){    double blame_fraction[SMT_MAX_THREADS];    double loss_part;    int issue_per_thread;    int t, cause;    int blame_threads = 1;    //    //  If we are splitting bandwidth, we may blame several causes    //    if (issue_split > 1) {        issue_per_thread = cpu->issue_width / issue_split;        for (t = 0; t < cpu->number_of_threads; t++) {	    blame_fraction[t] =		(double)(issue_per_thread - cpu->n_issued[t]) /		(double)(cpu->issue_width - cpu->n_issued_total);	    blame_threads = cpu->number_of_threads;	}    } else {        //  we only use the zero-th element        blame_fraction[0] = 1;    }    //  Assign loss due to thread "t" to thread "thread"    for (t = 0; t < blame_threads; t++) {        loss_part = total_loss * blame_fraction[t];	cause = state->issue_end_cause[t];        switch (cause) {	  case ISSUE_DEPS:	    blame_fu(cpu, thread, loss_part, state->issue_fu[t], 		     lsq ? FLOSS_LSQ_DEPS : FLOSS_IQ_DEPS);            break;	  case ISSUE_FU:	    blame_fu(cpu, thread, loss_part, state->issue_fu[t], 		     lsq ? FLOSS_LSQ_FU : FLOSS_IQ_FU);            break;	  case ISSUE_MEM_BLOCKED:	    if (!lsq) {		cpu->floss_iqfull_dcache[thread][state->issue_mem_result[t]] 		    += loss_part;	    }	    else {		cpu->floss_lsqfull_dcache[thread][state->issue_mem_result[t]] 		    += loss_part;	    }	    break;	  default:	    if (!lsq) {		cpu->floss_iqfull_other[thread][cause] += loss_part;	    }	    else {		cpu->floss_iqfull_other[thread][cause] += loss_part;	    }            break;        }    }}/*-------------------------------------------------------------------*/static MAYBE_INLINE voidblame_dispatch_stage(FullCPU *cpu, FlossState *state, int thread, double loss) {    //    //  Having an MT front-end means that a thread can only be held    //  responsible for fetch loss is _itself_... threads do not interact    //  in the front-end (except for fetch bandwidth)    //    switch (state->dispatch_end_cause) {      case FLOSS_DIS_IQ_FULL:        //  Blame the issue stage        blame_issue_stage(cpu, state, thread, loss, true);        break;      case FLOSS_DIS_LSQ_FULL:        //  Blame the issue stage        blame_issue_stage(cpu, state, thread, loss, false);        break;      case FLOSS_DIS_ROB_FULL:        //  Blame the commit stage        blame_commit_stage(cpu, state, thread, loss);        break;      case FLOSS_DIS_CAUSE_NOT_SET:	panic("FLOSS: dispatch blamed but no cause set");	break;      default:        //  Just blame simple cause        cpu->floss_qfull_other[thread][state->dispatch_end_cause] += loss;        break;    }}/*-------------------------------------------------------------------*/voidFullCPU::flossRecord(FlossState *state, int num_fetched[]){    int thread;    double loss_to_blame = 0;                // Per-thread    int cause;    int counter;    //    //  Generally, we should only have one fetch_end_cause set...    //  However, if this is not the case, then the fetch stage is    //  indicating that we should split the loss across the threads    //  that have a reason specified.    //    //  If fetch_split is active, use "max_to_fetch", otherwise, split    //  the loss evenly between threads with a reason specified.    //    if (fetch_split < 2) {	int total_fetched = 0;	counter = 0;        for (thread = 0; thread < number_of_threads; thread++) {            if (state->fetch_end_cause[thread] != FLOSS_FETCH_CAUSE_NOT_SET)                counter++;	    total_fetched += num_fetched[thread];        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人做爰69片免费看网站| 色呦呦一区二区三区| 国产iv一区二区三区| 欧美日韩中文国产| 国产精品卡一卡二| 国产麻豆精品一区二区| 91精品国产色综合久久| 亚洲老妇xxxxxx| 成人黄色电影在线| 欧美激情一区二区三区全黄| 免费在线观看一区二区三区| 欧美性做爰猛烈叫床潮| 国产精品久久久久永久免费观看 | 日韩毛片在线免费观看| 久久亚洲一级片| 国产精品毛片久久久久久久| 日本不卡一区二区三区高清视频| 欧美一卡2卡三卡4卡5免费| 国产精品毛片高清在线完整版| 精品成人佐山爱一区二区| 日韩毛片视频在线看| 成人丝袜视频网| 国产婷婷色一区二区三区在线| 国产精品午夜在线观看| 国产一区二区三区黄视频| 51精品视频一区二区三区| 亚洲一区二区三区四区在线| 色菇凉天天综合网| 综合欧美亚洲日本| 91免费观看视频| 亚洲色图视频网站| 色吊一区二区三区| 国产精品久久三| 国产老妇另类xxxxx| 欧美成人精品1314www| 日韩专区一卡二卡| 日韩欧美色综合网站| 青青草原综合久久大伊人精品| 麻豆91小视频| 欧美精品一区二区不卡 | 成人自拍视频在线| 国产欧美精品一区二区色综合朱莉| 亚洲三级视频在线观看| 日本韩国精品在线| 洋洋成人永久网站入口| 欧美日韩精品系列| 久久av资源网| 国产精品沙发午睡系列990531| 亚洲国产精品欧美一二99| 欧美日韩激情在线| 精品一区二区三区的国产在线播放| 春色校园综合激情亚洲| 亚洲欧美日韩在线播放| 欧美日韩国产美女| 国内精品久久久久影院色| 国产精品福利在线播放| 一本到不卡免费一区二区| 亚洲国产成人91porn| 精品久久久久久久久久久久久久久 | 一本色道久久综合狠狠躁的推荐 | 视频在线观看一区二区三区| 日韩一二三区视频| 成人avav影音| 亚洲成人动漫av| 国产亚洲精品中文字幕| 欧美亚洲图片小说| 美女www一区二区| 亚洲免费观看高清完整版在线观看熊 | 国产在线播放一区| 亚洲欧美偷拍另类a∨色屁股| 激情五月婷婷综合网| 亚洲男同1069视频| 欧美xxxx老人做受| 99精品久久只有精品| 日韩成人精品在线观看| 中文一区一区三区高中清不卡| 激情综合色播激情啊| 亚洲综合成人在线视频| 国产欧美中文在线| 在线综合视频播放| 在线影院国内精品| 国产成人综合精品三级| 日本亚洲欧美天堂免费| 亚洲视频在线观看三级| 精品国产乱码久久久久久图片 | 欧美日韩国产中文| 国内久久精品视频| 天堂资源在线中文精品| 亚洲丝袜另类动漫二区| 国产欧美在线观看一区| 日韩一二三区不卡| 91精品国产综合久久精品| 91香蕉视频污| 99久久综合狠狠综合久久| 激情深爱一区二区| 美女视频黄频大全不卡视频在线播放| 日韩女同互慰一区二区| 欧美色区777第一页| 日本精品视频一区二区| 成人小视频在线观看| 国产在线精品免费| 久久精品国产久精国产爱| 首页综合国产亚洲丝袜| 亚洲中国最大av网站| 亚洲啪啪综合av一区二区三区| 欧美亚洲动漫精品| 色综合天天综合网天天狠天天| 夜夜嗨av一区二区三区| 亚洲精品老司机| 综合亚洲深深色噜噜狠狠网站| 欧洲视频一区二区| 欧美日韩在线精品一区二区三区激情 | 日本欧美韩国一区三区| 亚洲图片自拍偷拍| 亚洲一二三四在线| 欧美军同video69gay| 国产一区美女在线| 国内外成人在线| 激情都市一区二区| 国产馆精品极品| 粉嫩aⅴ一区二区三区四区| 国产成人综合网站| 99久久国产综合精品女不卡| 91啪在线观看| 欧美精品18+| 精品日韩在线一区| 国产精品伦一区| 亚洲综合久久av| 麻豆精品久久精品色综合| 国产经典欧美精品| 99久久99久久精品免费看蜜桃| 水蜜桃久久夜色精品一区的特点| 国产日韩av一区二区| 中文字幕一区二区日韩精品绯色| 7777精品伊人久久久大香线蕉经典版下载 | 精品一区二区三区免费播放| 精品一区二区三区av| 中文字幕一区二区在线观看| 国产精品久久久一本精品| 日本一区二区不卡视频| 欧美高清在线一区二区| 一区二区在线观看不卡| 日韩电影免费一区| 国产白丝网站精品污在线入口| 国产精品美女www爽爽爽| 一区二区三区在线视频播放| 日韩国产精品久久久久久亚洲| 国产精品久久久久久久久久免费看| 777欧美精品| 中文字幕高清一区| 三级欧美在线一区| 国产麻豆一精品一av一免费| 成人av综合在线| 欧美日韩大陆一区二区| 久久久精品国产免费观看同学| 91精品国产高清一区二区三区| 一本大道久久a久久综合| 欧美一级黄色片| 亚洲视频一区二区免费在线观看| 亚洲裸体在线观看| 亚洲视频在线观看一区| 日韩高清在线不卡| 91丨九色porny丨蝌蚪| 欧美男人的天堂一二区| 欧美国产精品一区二区三区| 日本不卡一区二区| 色呦呦日韩精品| 中文字幕欧美国产| 另类成人小视频在线| 欧美日韩国产经典色站一区二区三区| 欧美亚洲国产怡红院影院| 久久这里只有精品首页| 亚洲一级片在线观看| 不卡一区中文字幕| 久久久99免费| 男男gaygay亚洲| 欧美精品丝袜中出| 夜夜精品视频一区二区 | 国产成人综合在线| 日韩一区二区视频| 一区二区在线观看视频| thepron国产精品| 中国av一区二区三区| 国产一区二区三区观看| 欧美一级xxx| 天堂蜜桃91精品| 欧美人妇做爰xxxⅹ性高电影| 91精品久久久久久久99蜜桃 | 色婷婷亚洲婷婷| 国产精品传媒在线| 欧美三级欧美一级| 亚洲愉拍自拍另类高清精品| 成人国产在线观看| 国产欧美精品国产国产专区| 国产一区二区0| 日韩欧美123| 久久99精品视频| 精品成人在线观看| 国产99精品国产| 国产精品色哟哟|