資源簡介
icarnegie ssd6 exercise5 答案

代碼片段和文件信息
//?#pragma?warning(disable:?4244)
/*?Cache?simulator:
?Simulates?4-way?set-associative?cache?using?LRU?for?replacement?policy
?Cache?parameters?configured?at?compile?time?*/
#include?“cache.h“
#include?“defs.h“
#include?“math.h“
/*?cache?parameters?*/
#define?CACHE_SIZE 16384 /* 16KB?cache */
#define?SET_ASSOCIATIVITY 1 /* 4-way?set?associative */
#define?BLOCK_SIZE 32 /* 32-byte?lines */
/*?By?default?configured?for?16KB?cache?with?32B?block?size?*/
static?int?block_bits?=?5;
static?int?set_bits?=?9; //log(CACHE_SIZE/SET_ASSOCIATIVITY/BLOCK_SIZE);
#define?MAX_SET_COUNT?(1?<10)
//#define?BLOCK_SIZE?(1<<(block_bits))
#define?SET_COUNT?(1<<(set_bits))
#define?SET_MASK?(SET_COUNT-1)
/*?Get?cache?index?from?address?*/
#define?GET_INDEX(addr)?(SET_MASK?&?(?(unsigned)?(addr)?>>?block_bits))
/*?Get?cache?tag?from?address?*/
#define?GET_TAG(addr)?((unsigned)?(addr)?>>?(block_bits?+?set_bits))
static?unsigned?tags[MAX_SET_COUNT][SET_ASSOCIATIVITY];
static?int?read_misses?=?0;
static?int?reads?=?0;
static?int?write_misses?=?0;
static?int?writes?=?0;
void?set_cache_measurement_enabled(int?enabled)?{
return;
}
/*?Reset?cache?statistics?without?clearing?cache?*/
void?clear_cache_statistics()
{
read_misses?=?0;
reads?=?0;
write_misses?=?0;
writes?=?0;
}
/*?Create?empty?cache?with?#sets?=?2^s_bits?block?size?=?2^b_bits?*/
void?reset_cache(void)
{
clear_cache_statistics();
reset_cache2(set_bits?block_bits);
}
void?reset_cache2(int?s_bits?int?b_bits)
{
int?i?j;
set_bits?=?s_bits;
block_bits?=?b_bits;
for?(i?=?0;?i? for(?j=0;?j tags[i][j]?=?-1;
}
}
clear_cache_statistics();
}
int?get_read_count()
{
return?reads;
}
int?get_write_count()
{
return?writes;
}
int?get_read_miss_count()
{
return?read_misses;
}
int?get_write_miss_count()
{
return?write_misses;
}
double?get_read_miss_rate()
{
return?(double)?read_misses?/?(double)?reads;
}
double?get_write_miss_rate()
{
return?(double)?write_misses?/?(double)?writes;
}
double?get_miss_rate()
{
return?(double)?(read_misses?+?write_misses)?/?(double)?(reads+?writes);
}
static?void?cache_read(int?*addr)
{
int?i?j;
//?unsigned?long?addr?=?addr_p;
unsigned?tindex?=?GET_INDEX(addr);
unsigned?tag?=?GET_TAG(addr);
reads++;
for(i=0;?i if(tags[tindex][i]?==?tag)?{
for(?j=i?;?j>0?;?j--?)?{
tags[tindex][j]?=?tags[tindex][j-1];
}
tags[tindex][0]?=?tag;
return;
}
}
read_misses++;
for(j=SET_ASSOCIATIVITY-1;?j>0;?j--)?{
tags[tindex][j]?=?tags[tindex][j-1];
}
tags[tindex][0]?=?tag;
return;
}
static?void?cache_write(int?*addr)
{
int?i?j;
unsigned?tindex?=?GET_INDEX(addr);
unsigned?tag?=?GET_TAG(addr);
writes++;
for(i=0;?i if(tags[tindex][i]?==?tag)?{
for(?j=i?;?j>0?;?j--?)?{
ta
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-01-27?21:00??exercise5_handout\
?????文件????????3822??2005-08-16?16:27??exercise5_handout\cache.c
?????文件?????????754??2002-08-06?11:16??exercise5_handout\cache.h
?????文件????????4042??2008-04-26?01:19??exercise5_handout\cache.vcproj
?????文件????????5077??2011-12-30?15:44??exercise5_handout\cache.vcxproj
?????文件????????1422??2011-12-30?15:44??exercise5_handout\cache.vcxproj.filters
?????文件?????????143??2011-12-30?15:44??exercise5_handout\cache.vcxproj.user
?????目錄???????????0??2012-01-27?21:00??exercise5_handout\Debug\
?????文件???????51200??2011-12-30?18:54??exercise5_handout\Debug\cache.exe
?????文件?????????381??2011-12-30?18:54??exercise5_handout\Debug\cache.exe.intermediate.manifest
?????文件??????345116??2011-12-30?18:54??exercise5_handout\Debug\cache.ilk
?????文件??????????85??2011-12-30?18:54??exercise5_handout\Debug\cache.lastbuildstate
?????文件????????1957??2011-12-30?18:54??exercise5_handout\Debug\cache.log
?????文件???????14886??2011-12-30?18:46??exercise5_handout\Debug\cache.obj
?????文件??????388096??2011-12-30?18:54??exercise5_handout\Debug\cache.pdb
?????文件????????2390??2011-12-30?18:54??exercise5_handout\Debug\cl.command.1.tlog
?????文件????????6568??2011-12-30?18:54??exercise5_handout\Debug\CL.read.1.tlog
?????文件????????2348??2011-12-30?18:54??exercise5_handout\Debug\CL.write.1.tlog
?????文件???????38150??2011-12-30?18:46??exercise5_handout\Debug\driver.obj
?????文件????????1606??2011-12-30?18:54??exercise5_handout\Debug\li
?????文件????????3242??2011-12-30?18:54??exercise5_handout\Debug\li
?????文件????????1136??2011-12-30?18:54??exercise5_handout\Debug\li
?????文件?????????390??2011-12-30?18:54??exercise5_handout\Debug\mt.command.1.tlog
?????文件?????????780??2011-12-30?18:54??exercise5_handout\Debug\mt.read.1.tlog
?????文件?????????320??2011-12-30?18:54??exercise5_handout\Debug\mt.write.1.tlog
?????文件????????5045??2011-12-30?18:47??exercise5_handout\Debug\rotate.obj
?????文件????????5717??2011-12-30?18:54??exercise5_handout\Debug\smooth.obj
?????文件???????52224??2011-12-30?18:54??exercise5_handout\Debug\vc100.idb
?????文件???????61440??2011-12-30?18:54??exercise5_handout\Debug\vc100.pdb
?????文件?????????886??2002-08-10?21:49??exercise5_handout\defs.h
?????文件???????18039??2002-08-11?01:40??exercise5_handout\driver.c
............此處省略2個(gè)文件信息
評論
共有 條評論