Part A:
#include <stdio.h>
#include <unistd.h>
#include <getopt.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
#include "cachelab.h"
typedef enum{
false,true} bool;
typedef struct {
bool valid;
int tag;
int time;
} block;
block** cache=NULL;
int hit=0,miss=0,eviction=0;
bool h= false, v= false;
int s,E,b;
int S,B;
int clock=0;
void getblock(__uint64_t addr,unsigned size){
B=pow(2,b);
__uint64_t limit=addr+size;
while(addr<limit){
int set=(addr>>b)&((int)(pow(2,s)-1));
int tag=addr>>(b+s);
int i=0;
clock++;
for(;i<E;i++){
if(cache[set][i].valid==true){
if(cache[set][i].tag==tag){
hit++;
cache[set][i].time=clock;
if(v) printf("hit ");
break;
}
}
else{
if(v) printf("miss ");
miss++;
cache[set][i].tag=tag;
cache[set][i].valid=true;
cache[set][i].time=clock;
break;
}
}
if(i==E){
if(v) printf("miss ");
miss++;
int mintime=INT_MAX,minloc;
for(int i=0;i<E

本文探讨了在CacheLab中遇到的行间冲突和AB行列冲突问题,针对3232和6464的矩阵,分析了冲突产生的原因及解决方案。对于3232的情况,由于每8个数字一个block会产生冲突,数组行数为32的8次幂因子时冲突尤为明显。在处理AB矩阵时,对角线元素可能导致存储抖动,需用临时变量规避。对于6167的矩阵,因数组行数不是32的8次幂因子,行间冲突减少,通过增大分块和使用局部变量缓解冲突。
最低0.47元/天 解锁文章
1963

被折叠的 条评论
为什么被折叠?



