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

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

?? ref.c

?? 這是個(gè)trace drive的Cache模擬器
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
}#endif	/* !D4CUSTOM || D4_OPT (walloc_never) */#if !D4CUSTOM || D4_OPT (walloc_nofetch)/* * Write allocate if no fetch is required * (write exactly fills an integral number of subblocks) */D4_INLINEintd4walloc_nofetch (d4cache *c, d4memref m){	return m.size == D4REFNSB(c,m) << D4VAL (c, lg2subblocksize);}#endif	/* !D4CUSTOM || D4_OPT (walloc_nofetch) */#if !D4CUSTOM || D4_OPT (wback_always)/* * Always write back */D4_INLINEintd4wback_always (d4cache *c, d4memref m, int setnumber, d4stacknode *ptr, int walloc){	return 1;}#endif	/* !D4CUSTOM || D4_OPT (wback_always) */#if !D4CUSTOM || D4_OPT (wback_never)/* * Never write back (i.e., always write through) */D4_INLINEintd4wback_never (d4cache *c, d4memref m, int setnumber, d4stacknode *ptr, int walloc){	return 0;}#endif	/* !D4CUSTOM || D4_OPT (wback_never) */#if !D4CUSTOM || D4_OPT (wback_nofetch)/* * Write back if no fetch is required * The actual test is for every affected subblock to be valid or * for the write to completely cover all affected subblocks. */D4_INLINEintd4wback_nofetch (d4cache *c, d4memref m, int setnumber, d4stacknode *ptr, int walloc){	return (D4ADDR2SBMASK(c,m) & ~ptr->valid) == 0 ||	       m.size == (D4REFNSB(c,m) << D4VAL (c, lg2subblocksize));}#endif	/* !D4CUSTOM || D4_OPT (wback_nofetch) */#if !D4CUSTOM || D4_OPT (ccc)/* * This function implements an infinite-sized cache, used * when classifying cache misses into compulsory, capacity, * and conflict misses. * * Return value: *	-1 if at least 1 affected subblock (but not the whole block) *		misses in the infinite cache *	0 if all affected subblocks hit in the infinite cache *	1 if the whole block misses in the infinite cache * Note we require that the number of subblocks per block be a *	divisor of D4_BITMAP_RSIZE, so blocks are not split across bitmaps */static intd4infcache (d4cache *c, d4memref m){	const unsigned int sbsize = 1 << D4VAL (c, lg2subblocksize);	const d4addr sbaddr = D4ADDR2SUBBLOCK (c, m.address);	const int nsb = D4REFNSB (c, m);	unsigned int bitoff; /* offset of bit in bitmap */	int hi, lo, i, b;	static int totranges = 0, totbitmaps = 0;	bitoff = (sbaddr & (D4_BITMAP_RSIZE-1)) / sbsize;	/* binary search for range containing our address */	hi = c->nranges-1;	lo = 0;	while (lo <= hi) {		i = lo + (hi-lo)/2;		if (c->ranges[i].addr + D4_BITMAP_RSIZE <= sbaddr)			lo = i + 1;		/* need to look higher */		else if (c->ranges[i].addr > sbaddr)			hi = i - 1;		/* need to look lower */		else { /* found the right range */			const int sbpb = 1 << (D4VAL (c, lg2blocksize) - D4VAL (c, lg2subblocksize));			int nb;			/* count affected bits we've seen */			for (nb = 0, b = 0;  b < nsb;  b++)				nb += ((c->ranges[i].bitmap[(bitoff+b)/CHAR_BIT] &					(1<<((bitoff+b)%CHAR_BIT))) != 0);			if (nb == nsb)				return 0;	/* we've seen it all before */			/* consider the whole block */			if (sbpb != 1 && nsb != sbpb) {				unsigned int bbitoff = (D4ADDR2BLOCK (c, m.address) &							(D4_BITMAP_RSIZE-1)) / sbsize;				for (nb = 0, b = 0;  b < sbpb;  b++)					nb += ((c->ranges[i].bitmap[(bbitoff+b)/CHAR_BIT] &						(1<<((bbitoff+b)%CHAR_BIT))) != 0);			}			/* set the bits */			for (b = 0;  b < nsb;  b++)				c->ranges[i].bitmap[(bitoff+b)/CHAR_BIT] |=					(1<<((bitoff+b)%CHAR_BIT));			return nb==0 ? 1 : -1;		}	}	/* lo > hi: range not found; find position and insert new range */	if (c->nranges >= c->maxranges-1) {		/* ran out of range pointers; allocate some more */		int oldmaxranges = c->maxranges;		c->maxranges = (c->maxranges + 10) * 2;		if (c->ranges == NULL) /* don't trust realloc(NULL,...) */			c->ranges = malloc (c->maxranges * sizeof(*c->ranges));		else			c->ranges = realloc (c->ranges, c->maxranges * sizeof(*c->ranges));		if (c->ranges == NULL) {			fprintf (stderr, "DineroIV: can't allocate more "				 "bitmap pointers for cache %s (%d so far, total %d)\n",				 c->name, oldmaxranges, totranges);			exit(1);		}		totranges++;	}	for (i = c->nranges++ - 1;  i >= 0;  i--) {		if (c->ranges[i].addr < sbaddr)			break;		c->ranges[i+1] = c->ranges[i];	}	c->ranges[i+1].addr = sbaddr & ~(D4_BITMAP_RSIZE-1);	c->ranges[i+1].bitmap = calloc ((((D4_BITMAP_RSIZE + sbsize - 1)					/ sbsize) + CHAR_BIT - 1) / CHAR_BIT, 1);	if (c->ranges[i+1].bitmap == NULL) {		fprintf (stderr, "DineroIV: can't allocate another bitmap "			 "(currently %d, total %d, each mapping 0x%x bytes)\n",			 c->nranges-1, totbitmaps, D4_BITMAP_RSIZE);		exit(1);	}	totbitmaps++;	for (b = 0;  b < nsb;  b++, bitoff++)		c->ranges[i+1].bitmap[bitoff/CHAR_BIT] |= (1<<(bitoff%CHAR_BIT));	return 1; /* we've not seen it before */}#endif /* !D4CUSTOM || D4_OPT (ccc) *//* * Split a memory reference if it crosses a block boundary. * The remainder, if any, is queued for processing later. */D4_INLINEd4memrefd4_splitm (d4cache *c, d4memref mr, d4addr ba){	const int bsize = 1 << D4VAL (c, lg2blocksize);	const int bmask = bsize - 1;	int newsize;	d4pendstack *pf;	if (ba == D4ADDR2BLOCK (c, mr.address + mr.size - 1))		return mr;	pf = d4get_mref();        pf->m.address = ba + bsize;        pf->m.accesstype = mr.accesstype | D4_MULTIBLOCK;	newsize = bsize - (mr.address&bmask);        pf->m.size = mr.size - newsize;	pf->next = c->pending;	c->pending = pf;	c->multiblock++;	mr.size = newsize;	return mr;}/* * Handle a memory reference for the given cache. * The user calls this function for the cache closest to * the processor; other caches are handled automatically. */voidd4ref (d4cache *c, d4memref mr){    /* special cases first */    if ((D4VAL (c, flags) & D4F_MEM) != 0) /* Special case for simulated memory */	c->fetch[(int)mr.accesstype]++;    else if (mr.accesstype == D4XCOPYB || mr.accesstype == D4XINVAL) {	d4memref m = mr;	/* dumb compilers might de-optimize if we take addr of mr */	if (m.accesstype == D4XCOPYB)		d4copyback (c, &m, 1);	else		d4invalidate (c, &m, 1);    }    else {				 /* Everything else */	const d4addr blockaddr = D4ADDR2BLOCK (c, mr.address);	const d4memref m = d4_splitm (c, mr, blockaddr);	const int atype = D4BASIC_ATYPE (m.accesstype);	const int setnumber = D4ADDR2SET (c, m.address);	const int ronly = D4CUSTOM && (D4VAL (c, flags) & D4F_RO) != 0; /* conservative */	const int walloc = !ronly && atype == D4XWRITE && D4VAL (c, wallocf) (c, m);	const int sbbits = D4ADDR2SBMASK (c, m);	int miss, blockmiss, wback;	d4stacknode *ptr;	if ((D4VAL (c, flags) & D4F_RO) != 0 && atype == D4XWRITE) {		fprintf (stderr, "Dinero IV: write to read-only cache %d (%s)\n",			 c->cacheid, c->name);		exit (9);	}	/*	 * Find address in the cache.	 * Quickly check for top of stack.	 */	ptr = c->stack[setnumber].top;	if (ptr->blockaddr == blockaddr && ptr->valid != 0)		; /* found it */	else if (!D4CUSTOM || D4VAL (c, assoc) > 1)		ptr = d4_find (c, setnumber, blockaddr);	else		ptr = NULL;	blockmiss = (ptr == NULL);	miss = blockmiss || (sbbits & ptr->valid) != sbbits;	/*	 * Prefetch on reads and instruction fetches, but not on	 * writes, misc, and prefetch references.	 * Optionally, some percentage may be thrown away.	 */	if ((!D4CUSTOM || !D4_OPT (prefetch_none)) &&	    (m.accesstype == D4XREAD || m.accesstype == D4XINSTRN)) {		d4pendstack *pf = D4VAL (c, prefetchf) (c, m, miss, ptr);		if (pf != NULL) {			/* Note: 0 <= random() <= 2^31-1 and 0 <= random()/(INT_MAX/100) < 100. */			if (D4VAL (c, prefetch_abortpercent) > 0 &&			    random()/(INT_MAX/100) < D4VAL (c, prefetch_abortpercent))				d4put_mref (pf);	/* throw it away */			else {				pf->next = c->pending;	/* add to pending list */				c->pending = pf;			}		}	}	/*	 * Update the cache	 * Don't do it for non-write-allocate misses	 */	wback = 0;	if (ronly || atype != D4XWRITE || !blockmiss || walloc) {		/*		 * Adjust priority stack as necessary		 */		ptr = D4VAL (c, replacementf) (c, setnumber, m, ptr);		/*		 * Update state bits		 */		if (blockmiss) {			assert (ptr->valid == 0);			ptr->referenced = 0;			ptr->dirty = 0;	 	}		ptr->valid |= sbbits;		if ((m.accesstype & D4PREFETCH) == 0)			ptr->referenced |= sbbits;		/*		 * For writes, decide if write-back or write-through.		 * Set the dirty bits if write-back is going to be used.		 */		wback = !ronly &&			(atype == D4XWRITE) &&			D4VAL (c, wbackf) (c, m, setnumber, ptr, walloc);		if (wback)			ptr->dirty |= sbbits;		/*		 * Take care of replaced block		 * including write-back if necessary		 */		if (blockmiss) {			d4stacknode *rptr = c->stack[setnumber].top->up;			if (rptr->valid != 0) {				if (!ronly && (rptr->valid & rptr->dirty) != 0)					d4_wbblock (c, rptr, D4VAL (c, lg2subblocksize));				if (c->stack[setnumber].n > D4HASH_THRESH)					d4_unhash (c, setnumber, rptr);				rptr->valid = 0;			}		}	}	/*	 * Prepare reference for downstream cache.	 * We do this for write-throughs, read-type misses,	 * and fetches for incompletely written subblocks	 * when a write misses and write-allocate is being used.	 * In some cases, a write can generate two downstream references:	 * a fetch to load the complete subblock and a write-through store.	 */	if (!ronly && atype == D4XWRITE && !wback) {		d4pendstack *newm = d4get_mref();		newm->m = m; 		newm->next = c->pending;		c->pending = newm;	}	if (miss && (ronly || atype != D4XWRITE ||		     (walloc && m.size != D4REFNSB (c, m) << D4VAL (c, lg2subblocksize)))) {		d4pendstack *newm = d4get_mref();		/* note, we drop prefetch attribute */		newm->m.accesstype = (atype == D4XWRITE) ? D4XREAD : atype;		newm->m.address = D4ADDR2SUBBLOCK (c, m.address);		newm->m.size = D4REFNSB (c, m) << D4VAL (c, lg2subblocksize);		newm->next = c->pending;		c->pending = newm;	}	/*	 * Do fully associative and infinite sized caches too.	 * This allows classifying misses into {compulsory,capacity,conflict}.	 * An extra "set" is provided (==c->numsets) for the fully associative	 * simulation.	 */	if ((D4CUSTOM && D4_OPT (ccc)) ||	    (!D4CUSTOM && (c->flags & D4F_CCC) != 0)) {					/* set to use for fully assoc cache */		const int fullset = D4VAL(c,numsets);					/* number of blocks in fully assoc cache */		int fullmiss, fullblockmiss;	/* like miss and blockmiss, but for fully assoc cache */		ptr = c->stack[fullset].top;		if (ptr->blockaddr != blockaddr)			ptr = d4_find (c, fullset, blockaddr);		else if (ptr->valid == 0)			ptr = NULL;		fullblockmiss = (ptr == NULL);		fullmiss = fullblockmiss || (sbbits & ptr->valid) != sbbits;		/* take care of stack update */		if (ronly || atype != D4XWRITE || !fullblockmiss || walloc) {			ptr = D4VAL (c, replacementf) (c, fullset, m, ptr);			assert (!fullblockmiss || ptr->valid == 0);			ptr->valid |= sbbits;		}		/* classify misses */		if (miss) {			int infmiss = 0; /* assume hit in infinite cache */			if (!fullmiss) /* hit in fully assoc: conflict miss */				c->conf_miss[(int)m.accesstype]++;			else {				infmiss = d4infcache (c, m);				if (infmiss != 0) /* first miss: compulsory */					c->comp_miss[(int)m.accesstype]++;				else	/* hit in infinite cache: capacity miss */					c->cap_miss[(int)m.accesstype]++;			}			if (blockmiss) {				if (!fullblockmiss) /* block hit in full assoc */					c->conf_blockmiss[(int)m.accesstype]++;				else if (infmiss == 1) /* block miss in full and inf */					c->comp_blockmiss[(int)m.accesstype]++;				else /* part of block hit in infinite cache */					c->cap_blockmiss[(int)m.accesstype]++;			}		}		/* take care of replaced block */		if (fullblockmiss) {			d4stacknode *rptr = c->stack[fullset].top->up;			if (rptr->valid != 0) {				if (c->stack[fullset].n > D4HASH_THRESH)					d4_unhash (c, fullset, rptr);				rptr->valid = 0;			}		}	}	/*	 * Update non-ccc metrics. 	 */	c->fetch[(int)m.accesstype]++;	if (miss) {		c->miss[(int)m.accesstype]++;		if (blockmiss)			c->blockmiss[(int)m.accesstype]++;	}	/*	 * Now make recursive calls for pending references	 */	if (c->pending)		d4_dopending (c, c->pending);    }}#endif /* !D4CUSTOM || D4_REF_ONCE>1 */#undef D4_REF_ONCE#define D4_REF_ONCE 2	/* from now on, skip the first stuff and do the rest */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色狠狠色狠狠综合| 99久久99精品久久久久久| 丝袜诱惑亚洲看片| 亚洲精品国产一区二区精华液| 欧美在线观看视频在线| 91网站黄www| 国产精品一卡二卡在线观看| 久草这里只有精品视频| 国产一区91精品张津瑜| 国产一区二区三区精品欧美日韩一区二区三区 | 精品久久人人做人人爰| 日韩三级视频在线观看| 日韩欧美国产wwwww| 欧美不卡123| 精品久久五月天| 久久亚洲精华国产精华液| 久久综合九色综合97婷婷 | 亚洲在线成人精品| 亚洲一区中文日韩| 午夜久久久影院| 亚洲激情五月婷婷| 亚洲高清在线视频| 日本一区中文字幕| 亚洲制服丝袜一区| 日韩成人免费在线| 久久99蜜桃精品| 国产精品影视在线观看| av激情亚洲男人天堂| 日本久久电影网| 日韩一区二区中文字幕| 欧美日韩在线一区二区| 欧美电影在线免费观看| 91啪亚洲精品| 欧美日本一区二区在线观看| 日韩免费观看高清完整版| 国产欧美日韩另类视频免费观看| 国产精品高潮久久久久无| 欧美三级电影在线观看| 精品日韩一区二区| 国产精品国产三级国产| 亚洲成人午夜电影| 午夜精品福利久久久| 久久99精品国产91久久来源| 国产高清不卡二三区| 91久久精品一区二区三| 99精品视频在线免费观看| 成人性视频网站| 在线视频一区二区三区| 日韩你懂的在线播放| 国产精品久久久久7777按摩 | 婷婷综合久久一区二区三区| 国产中文字幕精品| 91麻豆成人久久精品二区三区| 成人免费高清视频| 欧美日韩精品欧美日韩精品 | 亚洲成人精品一区二区| 一本到不卡免费一区二区| 欧美一二三在线| 日韩午夜在线影院| 亚洲图片另类小说| 青青草成人在线观看| aa级大片欧美| 一本色道亚洲精品aⅴ| 日韩你懂的在线观看| 在线不卡免费欧美| 自拍偷拍欧美精品| 毛片av中文字幕一区二区| 不卡欧美aaaaa| 欧美电视剧免费观看| 亚洲精品视频一区| 国产91精品免费| 色综合久久天天| 久久免费视频一区| 三级影片在线观看欧美日韩一区二区 | 91精品中文字幕一区二区三区| 国产精品美女久久久久av爽李琼| 天天色综合成人网| 精品在线播放午夜| 欧美三级中文字| 国产精品毛片a∨一区二区三区| 三级不卡在线观看| 蜜桃精品视频在线| 欧美日韩三级一区| 日韩一区在线播放| 亚洲第一二三四区| 这里只有精品电影| 夜夜嗨av一区二区三区网页| 美脚の诱脚舐め脚责91| 久久99精品国产91久久来源| 17c精品麻豆一区二区免费| 精东粉嫩av免费一区二区三区| 久久只精品国产| 成人一区二区三区视频| 久久精品水蜜桃av综合天堂| 首页亚洲欧美制服丝腿| 欧美电影在哪看比较好| 6080国产精品一区二区| 高清在线成人网| 免费国产亚洲视频| 国产在线观看一区二区| 91黄色免费版| 日韩精品久久理论片| 欧美精品一区二区三区蜜桃| 粗大黑人巨茎大战欧美成人| 亚洲色图在线看| 欧美高清hd18日本| 国产在线播放一区二区三区| 国产精品伦一区二区三级视频| 91视频精品在这里| 日韩av在线发布| 国产清纯美女被跳蛋高潮一区二区久久w| 不卡一区中文字幕| 午夜久久久久久电影| 久久先锋影音av鲁色资源网| 91欧美一区二区| 麻豆精品久久久| 中文字幕在线不卡一区二区三区| 日韩精品亚洲一区| 日韩精品一区二| www.亚洲精品| 午夜精品福利一区二区三区蜜桃| 久久久久久久久久久久久久久99| 99久久久久久99| 日韩精品电影在线| 国产日本亚洲高清| 欧美精品色一区二区三区| 国产成人鲁色资源国产91色综| 一区二区三区.www| 久久精品亚洲精品国产欧美| 欧美日韩日本视频| 成人综合在线视频| 奇米色777欧美一区二区| 久久久久久久综合狠狠综合| 欧美图片一区二区三区| 国产老妇另类xxxxx| 亚洲第一二三四区| 亚洲欧洲精品一区二区三区不卡 | 欧美一区二区三区视频在线| 成人福利视频在线看| 美女网站一区二区| 伊人开心综合网| 国产色综合一区| 欧美日韩aaaaa| 亚洲自拍偷拍综合| 久久黄色级2电影| 成人免费在线观看入口| www.成人在线| 亚洲视频中文字幕| 日韩精品三区四区| 日本道色综合久久| 久久综合给合久久狠狠狠97色69| 日韩精品免费专区| 亚洲综合视频在线观看| 中文子幕无线码一区tr| 久久综合色之久久综合| 欧美一区二区私人影院日本| 色婷婷久久久久swag精品| av网站一区二区三区| 国产精品一级片在线观看| 日日夜夜免费精品| 午夜久久电影网| 亚洲综合999| 一区二区三区丝袜| 最新高清无码专区| 国产精品无遮挡| 久久久久国产一区二区三区四区 | 国产精品久久久久久久久免费丝袜 | 有坂深雪av一区二区精品| 国产精品美女久久久久av爽李琼| 久久久青草青青国产亚洲免观| 日韩一区二区免费电影| 51精品国自产在线| 欧美日韩一区三区| 欧美日韩美少妇| 欧美日韩亚洲综合一区| 欧美日韩中文字幕一区二区| 欧洲另类一二三四区| 欧洲一区在线电影| 欧美唯美清纯偷拍| 欧美美女直播网站| 欧美精品v国产精品v日韩精品| 欧美日韩成人激情| 欧美肥妇free| 精品久久五月天| 国产无一区二区| 欧美国产精品v| 国产精品久久久久三级| 日韩美女精品在线| 一区二区三区国产精华| 亚洲一区在线观看视频| 三级不卡在线观看| 久久精品二区亚洲w码| 久久 天天综合| 粉嫩欧美一区二区三区高清影视| 国产成人精品网址| 91亚洲精品乱码久久久久久蜜桃| 色乱码一区二区三区88| 欧美色图12p| 日韩一区二区在线观看视频| 欧美另类z0zxhd电影|