好吧,这只是我的第二个问题,而且非常糟糕.这是一个学校作业,但没有人(包括助教)似乎能够帮助我.这是一个很高的订单,但我不知道还能在哪里转.
本质上,分配是制作缓存模拟器.这个版本是直接映射,实际上只是整个项目的一小部分,但如果我甚至无法解决这个问题,我就没有机会与其他关联.我发布了我的整个代码,因为我不想对问题的位置做任何假设.
这是测试用例:http://www.mediafire.com/?tty5dnihydnw
然后运行以下命令:
./ sims 512 direct 32 fifo wt pinatrace.out
你应该得到:
hits: 604037
misses 138349
writes: 239269
reads: 138349
Run Code Online (Sandbox Code Playgroud)
但我得到:
Hits: 587148
Misses: 155222
Writes: 239261
Reads: 155222
Run Code Online (Sandbox Code Playgroud)
如果有人能够至少指出我正确的方向,我将不胜感激.我被困在这里大约12个小时.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
struct myCache
{
int valid;
char *tag;
char *block;
};
/*
sim [-h] <cache size> <associativity> <block size> <replace alg> <write policy>
<trace file>
*/
//God willing I come up with a better Hex to Bin convertion that …Run Code Online (Sandbox Code Playgroud) (所有都被声明为int,没有事先被初始化为任何东西.我已经包含math.h并且正在使用-lm进行编译)
cachesize = atoi(argv[1]);
blocksize = atoi(argv[3]);
setnumber = (cachesize/blocksize);
printf("setnumber: %d\n", setnumber);
setbits = (log(setnumber))/(log(2));
printf("sbits: %d\n", setbits);
Run Code Online (Sandbox Code Playgroud)
当cachesize为1024并且blockize为16时,输出如下:
setnumber: 64
sbits: 5
Run Code Online (Sandbox Code Playgroud)
但是log(64)/ log(2)= 6!
当给出cachesize 512并阻塞32时,它可以正常工作.我似乎无法获胜.
我真的希望这对我来说是一个愚蠢的错误,如果有人能指出它是什么,我将不胜感激!谢谢!
PS:我先在Yahoo Answers上发布了这个,但那可能很傻.不会再这样做了.
c ×2