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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? commit.cc

?? linux下基于c++的處理器仿真平臺(tái)。具有處理器流水線
?? CC
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	  case COMMIT_MODEL_RR:	    thread = rr_commit_last_thread;	    if (clist_num[thread] - clist_idx[thread])		rs = commit_list[thread][clist_idx[thread]++];	    else		reason_thread[thread] = COMMIT_NO_INSN;	    break;	  default:	    fatal("commit model screwed up");	    break;	};	//	//  If we have an instruction to commit, do it...	//	if (rs) {	    --num_eligible;	    if (eligible_to_commit(rs, &reason)) {		if (rs->inst->spec_mode == 0) {		    commit_one_inst(rs);		    ++committed;		    ++committed_thread[thread];		    crash_counter = 0;		} else {		    //		    //  It is possible for completed, mis-speculated		    //  instructions to arrive here between the time		    //  a mispredicted branch is written-back and the time		    //  the recovery event occurs.  In this case, a mis-		    //  speculated instruction would not have been		    //  squashed...  if this happens, squash it now...		    //  --> this doesn't count as a committed instruction		    //		    rs->squash();		    if (ptrace)			ptrace->deleteInst(rs->inst);		    remove_ROB_element(rs);		}		//		//  Check ending conditions		//		if (committed == commit_width) {		    reason = COMMIT_BW;		    blame = thread;		    done = true;		} else if (num_eligible == 0) {		    reason = COMMIT_NO_INSN;		    blame = thread;		    done = true;		}	    } else {		//  We can't commit this instruction... reason is set in		//  eligible_to_commit(), so just set thread		blame = thread;		// we're done with this thread		clist_idx[thread] = clist_num[thread];	    }	} else {	    //  use the default blame info...	    finished_thread[thread] = true;	    ++num_finished_threads;	    if (num_finished_threads == number_of_threads)		done = true;	}	//	//  Check to see if we've examined all eligible instructions	//  in this thread...	//	if (clist_idx[thread] == clist_num[thread]) {	    finished_thread[thread] = true;	    ++num_finished_threads;	    if (num_finished_threads == number_of_threads) {		done = true;	    }	}    } while (!done);    //    //  Assign blame    //    switch(reason) {      case COMMIT_BW:	    if (total_completed > commit_width) {		//  we want to count the number of instructions that could		//  have committed if we hadn't run out of bandwidth		++commit_eligible_samples;		for (int t = 0; t < number_of_threads; ++t) {		    assert(completed[t] >= committed_thread[t]);		    unsigned uncommitted = completed[t] - committed_thread[t];		    commit_eligible[t] += uncommitted;		    commit_bwlimit_stat[t].sample(uncommitted);		}	    }	    break;      case COMMIT_NO_INSN:      case COMMIT_STOREBUF:      case COMMIT_MEMBAR:	break;      case COMMIT_FU:	floss_state.commit_fu[0][0] = OpClass(detail);	break;      case COMMIT_DMISS:	floss_state.commit_mem_result[0] = MemAccessResult(detail);	break;      case COMMIT_CAUSE_NOT_SET:	done = true;  // dummy	break;      default:	fatal("commit causes screwed up");    }    floss_state.commit_end_cause[0] = reason;    //    //  De-allocate memory    //    for (int i = 0; i < number_of_threads; ++i)	if (commit_list[i])	    delete [] commit_list[i];    n_committed_dist.sample(committed);    if (floss_state.commit_end_cause[0] == COMMIT_CAUSE_NOT_SET) {	// very rarely we can have a queue-full fetch problem even when	// we committed the full B/W of instructions, or all of the	// entries in the IQ... maybe because LSQ is full??	floss_state.commit_end_cause[0] =	    (committed == commit_width) ? COMMIT_BW : COMMIT_NO_INSN;	// we arbitrarily attribute these to thread 0; should be factored out	// when interpreting results	floss_state.commit_end_thread = 0;    }}boolFullCPU::eligible_to_commit(ROBStation *rs,			enum CommitEndCause *reason){    bool storebuf_stall = false;    // To be ready to commit:    //  - ROB entry must be complete    //  - for loads/stores, LSQ entry must be complete    //  - for stores, a store buffer entry must be available    //  - for "leading" thread of reg-file-checking redundant pair,    //      reg check buffer entry must be available    if (!rs->completed)	return false;    if (rs->inst->isStore()) {	storebuf_stall = storebuffer->full();	if (*reason == COMMIT_CAUSE_NOT_SET && storebuf_stall)	    *reason = COMMIT_STOREBUF;    }    //    //  If everything is OK for committing this instruction...    //    if (!storebuf_stall)	return true;    return false;}unsignedFullCPU::oldest_inst(ROBStation ***clist, unsigned *cnum, unsigned *cidx){    unsigned rv = 0;    InstSeqNum oldest_seq = 0;    bool not_set = true;    for (int t = 0; t < number_of_threads; ++t) {	//	//  Look at this thread if:	//    (1)  The thread has a commit list	//    (2)  There are still instructions in the list	//	if (clist[t] != 0 && cnum[t] > 0 && cidx[t] < cnum[t]	    && (oldest_seq > clist[t][cidx[t]]->seq || not_set))	{	    rv = t;	    oldest_seq = clist[t][cidx[t]]->seq;	    not_set = false;	}    }    return rv;}voidFullCPU::commit_one_inst(ROBStation *rs){    DynInst *inst = rs->inst;    bool store_inst = false;    unsigned thread = rs->thread_number;    //    // Stores: commit to store buffer if an entry is available.    // Skip stores that faulted and write prefetches that didn't    // translate to a valid physical address..    //    if (inst->isStore() && inst->fault == No_Fault &&	!(inst->isDataPrefetch() &&	  inst->phys_eff_addr == MemReq::inval_addr)) {	assert(inst->phys_eff_addr != MemReq::inval_addr);	if (inst->isCopy()) {	    storebuffer->addCopy(thread, inst->asid, 				 dcacheInterface->getBlockSize(), inst->xc, 				 inst->eff_addr, inst->phys_eff_addr,				 inst->copySrcEffAddr, 				 inst->copySrcPhysEffAddr,				 inst->mem_req_flags,				 inst->PC, rs->seq,				 inst->fetch_seq, rs->queue_num);	} else {	    storebuffer->add(thread, inst->asid, inst->store_size, 			     inst->store_data,			     inst->xc,			     inst->eff_addr, inst->phys_eff_addr,			     inst->mem_req_flags,			     inst->PC, rs->seq,			     inst->fetch_seq, rs->queue_num);	}	// remember to remove LSQ entry	store_inst = true;	//  check for bogus store size	assert(inst->store_size <= 64);    }        if (rs->inst->isWriteBarrier()) {	storebuffer->addWriteBarrier(thread);    }    // Faulting instruction: we are holding off dispatch of the fault    // handler waiting for this to commit.  Notify dispatch that we've    // committed the instruction so it can continue.    if (inst->fault != No_Fault) {	assert(fetch_fault_count[thread] == 1);	new FaultHandlerDelayEvent(this, thread,				   curTick + cycles(fault_handler_delay));    }    // if we're committing a branch, update predictor state...    // if we're using leading-thread prediction, put the    // outcome in the queue too    if (rs->inst->isControl()) {	branch_pred->update(thread, inst->PC, inst->Next_PC,			    inst->Next_PC != inst->PC + sizeof(MachInst),			    /* pred taken? */			    inst->Pred_PC != inst->PC + sizeof(MachInst),			    /* correct pred? */			    inst->Pred_PC == inst->Next_PC,			    rs->inst->staticInst, &inst->dir_update);    }    thread_info[thread].commit_counter++;    // track last committed PC for sampling stats    commitPC[thread] = inst->PC;    traceFunctions(inst->PC);    update_com_inst_stats(inst);    // invalidate ROB operation instance    rs->tag++;    if (DTRACE(Pipeline)) {	string s;	inst->dump(s);	DPRINTF(Pipeline, "Commit %s\n", s);    }    //    //  Special Handling: When instruction commits    //  before branch recovery is done...    //    //  We need to tell the event handler not to try    //  to update the now non-existant ROB entry.    //    //  Note that we're OK if there is no event here,    //  as long as there is _some_ event pending    //    if (rs->inst->recover_inst) {	assert ((rs->recovery_event != NULL) ||		thread_info[thread].recovery_event_pending);	if (rs->recovery_event) {	    //  This recovery event will still happen...	    //  we just have to tell it that it doesn't need to worry	    //  about updating this ROB entry	    rs->recovery_event->invalidate_branch_entry();	    rs->recovery_event = 0;  // to make remove_ROB_entry() happy	}    }    //    //  Store Instructions: Remove LSQ portion of store    //    if (store_inst)	LSQ->squash(rs->lsq_entry);    if (ptrace) {	ptrace->moveInst(rs->inst, PipeTrace::Commit, 0, 0, 0);	ptrace->deleteInst(rs->inst);    }    // update head entry of IQ    remove_ROB_element(rs);    //    // check for instruction-count-based events    //    /**     *@todo com_inst is used as a Stat && in other ways, like here. needs fix     *in case com_inst becomes binned...     */    comInstEventQueue[thread]->serviceEvents(com_inst[thread]);    comLoadEventQueue[thread]->serviceEvents(com_loads[thread]);}voidFullCPU::update_com_inst_stats(DynInst *inst){    unsigned thread = inst->thread_number;    //    //  Pick off the software prefetches    //#ifdef TARGET_ALPHA    if (inst->isDataPrefetch()) {	stat_com_swp[thread]++;    } else {	com_inst[thread]++;	stat_com_inst[thread]++;    }#else    com_inst[thread]++;    stat_com_inst[thread]++;#endif    //    //  Control Instructions    //    if (inst->isControl())	stat_com_branches[thread]++;    //    //  Memory references    //    if (inst->isMemRef()) {	stat_com_refs[thread]++;	if (inst->isLoad()) {	    com_loads[thread]++;	    stat_com_loads[thread]++;	}    }    if (inst->isMemBarrier()) {	stat_com_membars[thread]++;    }}// register commit-stage statisticsvoidFullCPU::commitRegStats(){    using namespace Stats;    n_committed_dist	.init(0,commit_width,1)	.name(name() + ".COM:committed_per_cycle")	.desc("Number of insts commited each cycle")	.flags(pdf)	;    //    //  Commit-Eligible instructions...    //    //  -> The number of instructions eligible to commit in those    //  cycles where we reached our commit BW limit (less the number    //  actually committed)    //    //  -> The average value is computed over ALL CYCLES... not just    //  the BW limited cycles    //    //  -> The standard deviation is computed only over cycles where    //  we reached the BW limit    //    commit_eligible	.init(number_of_threads)	.name(name() + ".COM:bw_limited")	.desc("number of insts not committed due to BW limits")	.flags(total)	;    commit_eligible_samples	.name(name() + ".COM:bw_lim_events")	.desc("number cycles where commit BW limit reached")	;    commit_bwlimit_stat	.init(number_of_threads)	.name(name() + ".COM:bw_lim_stdev")	.desc("standard deviation of bw_lim_avg value")	.precision(4)	.flags(total)	;}voidFullCPU::commitRegFormulas(){    using namespace Stats;    bw_lim_avg	.name(name() + ".COM:bw_lim_avg")	.desc("Avg number not committed in cycles BW limited")	.precision(4)	.flags(total)	;    bw_lim_avg = commit_eligible / commit_eligible_samples;    bw_lim_rate	.name(name() + ".COM:bw_lim_rate")	.desc("Average number not committed due to BW (over all cycles)")	.precision(4)	.flags(total)	;    bw_lim_rate = commit_eligible / numCycles;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产日韩欧美精品| 成人黄色在线视频| 中文子幕无线码一区tr| 欧美色图天堂网| 成人黄色在线看| 久久精品国产色蜜蜜麻豆| 日韩伦理免费电影| 国产欧美日韩精品在线| 日韩一区二区免费电影| 欧美这里有精品| 成人精品小蝌蚪| 激情伊人五月天久久综合| 亚洲福利视频一区二区| 亚洲免费在线观看| 日本一区二区电影| 久久久综合激的五月天| 日韩一区二区在线观看视频 | 国产亚洲精品超碰| 6080国产精品一区二区| 91精彩视频在线| a4yy欧美一区二区三区| 粉嫩蜜臀av国产精品网站| 久久国产成人午夜av影院| 亚洲成人一区二区在线观看| 亚洲人成网站在线| 国产精品嫩草影院av蜜臀| 欧美精品一区二区三区久久久| 国产精品成人免费在线| 欧美r级电影在线观看| 91精品免费观看| 欧美另类久久久品| 欧美人体做爰大胆视频| 精品污污网站免费看| 一本色道久久加勒比精品| 97久久超碰国产精品| 不卡免费追剧大全电视剧网站| 国产白丝网站精品污在线入口| 国内精品视频666| 久久国产精品72免费观看| 麻豆精品一区二区av白丝在线| 免费久久精品视频| 狠狠色丁香婷婷综合| 国产一区免费电影| 国产成人综合视频| 成人午夜大片免费观看| 99久久精品99国产精品| 91麻豆免费观看| 在线一区二区视频| 欧美日韩精品专区| 日韩你懂的在线播放| 欧美r级电影在线观看| 久久久久久久久久久黄色| 欧美经典一区二区| 亚洲欧美日韩电影| 亚洲高清免费一级二级三级| 青青草97国产精品免费观看无弹窗版| 免费在线观看精品| 国产精品一区在线| 97精品久久久久中文字幕 | 美女尤物国产一区| 国产裸体歌舞团一区二区| 成人黄色在线网站| 欧美性受xxxx黑人xyx性爽| 欧美一区二区三区免费大片 | 在线亚洲高清视频| 8x8x8国产精品| 久久综合色综合88| 综合av第一页| 日日噜噜夜夜狠狠视频欧美人| 精久久久久久久久久久| av电影在线观看不卡 | 久久精品夜色噜噜亚洲a∨| 国产精品不卡视频| 天天射综合影视| 国产激情精品久久久第一区二区| 99r国产精品| 69久久99精品久久久久婷婷| 久久精品人人爽人人爽| 一区二区三区日韩精品视频| 免费成人美女在线观看| 成人永久免费视频| 欧美精品1区2区| 亚洲国产精品精华液ab| 午夜视频久久久久久| 国产精品99久久久| 欧美人与z0zoxxxx视频| 中文字幕欧美国产| 日韩电影免费在线| 97久久超碰国产精品| 欧美tk—视频vk| 夜夜亚洲天天久久| 国产成人av一区二区三区在线| 在线观看视频一区二区| 久久久久久久精| 偷拍一区二区三区| 99精品欧美一区| 久久色在线视频| 亚洲成a人v欧美综合天堂下载| 国产成人午夜精品影院观看视频 | 9191久久久久久久久久久| 中文字幕免费不卡| 日本不卡一二三| 在线免费观看不卡av| 国产精品美女久久久久久久久| 日韩福利视频网| 色中色一区二区| 中文字幕在线播放不卡一区| 精品一区二区三区久久| 欧美伦理电影网| 一区二区三区在线免费视频| 国产成人午夜视频| 欧美xxxx在线观看| 色综合激情五月| 中文字幕一区在线观看| 国产成人高清在线| 精品国产一区二区三区不卡 | 欧美巨大另类极品videosbest| 亚洲欧洲国产专区| 国产成人av福利| 久久男人中文字幕资源站| 日本欧美大码aⅴ在线播放| 欧美日韩一区二区三区免费看| 亚洲视频图片小说| 99精品黄色片免费大全| 中文幕一区二区三区久久蜜桃| 国模无码大尺度一区二区三区 | 国产精品美女久久久久久久网站| 激情成人综合网| 日韩欧美的一区二区| 日韩成人av影视| 欧美精品vⅰdeose4hd| 亚洲在线成人精品| 欧美性猛交xxxx黑人交| 亚洲一区二区三区美女| 欧美日韩亚洲高清一区二区| 亚洲综合成人在线视频| 在线观看91视频| 亚洲成人高清在线| 在线播放日韩导航| 免费日本视频一区| 欧美tickling挠脚心丨vk| 精品亚洲免费视频| 久久毛片高清国产| 成人午夜在线免费| 亚洲日本欧美天堂| 在线观看视频一区| 日韩电影在线一区| 2021久久国产精品不只是精品| 国产一区二区中文字幕| 日本一区二区免费在线| 99久久亚洲一区二区三区青草| 亚洲男人的天堂av| 欧美日韩不卡在线| 激情亚洲综合在线| 国产精品乱码妇女bbbb| 91小视频在线| 天天综合色天天综合| 日韩免费电影网站| 国产成人av电影免费在线观看| 亚洲天堂av老司机| 欧美老肥妇做.爰bbww| 麻豆精品在线播放| 国产精品麻豆网站| 欧美午夜一区二区三区免费大片| 日韩精品久久理论片| 久久女同性恋中文字幕| 91色乱码一区二区三区| 午夜亚洲福利老司机| 久久精品视频一区二区三区| 99精品国产91久久久久久| 日日骚欧美日韩| 国产精品女人毛片| 欧美喷水一区二区| 国产成人免费视频网站| 亚洲一区二区三区四区中文字幕| 日韩视频一区二区| 成人av先锋影音| 日韩和欧美的一区| 国产精品青草综合久久久久99| 欧美午夜视频网站| 国产成人综合视频| 视频在线观看国产精品| 欧美激情一二三区| 日韩欧美一区电影| 91小视频在线免费看| 精油按摩中文字幕久久| 一区二区在线观看av| 久久婷婷色综合| 欧美日韩国产123区| 成人深夜在线观看| 美腿丝袜亚洲综合| 一区二区三区在线视频播放| 久久综合久久综合九色| 欧美三级韩国三级日本一级| 粉嫩aⅴ一区二区三区四区五区| 午夜精品免费在线| 成人h精品动漫一区二区三区| 性做久久久久久免费观看| 国产精品理伦片| 精品国产乱子伦一区|