/* * cachelab.c - Cache Lab helper functions */ #include #include #include #include "cachelab.h" #include trans_func_t func_list[MAX_TRANS_FUNCS]; int func_counter = 0; /* * printSummary - Summarize the cache simulation statistics. Student cache simulators * must call this function in order to be properly autograded. */ void printSummary(int hits, int misses, int evictions) { printf("hits:%d misses:%d evictions:%d\n", hits, misses, evictions); FILE* output_fp = fopen(".csim_results", "w"); assert(output_fp); fprintf(output_fp, "%d %d %d\n", hits, misses, evictions); fclose(output_fp); } /* * initMatrix - Initialize the given matrix */ void initMatrix(int M, int N, int A[N][M], int B[M][N]) { int i, j; srand(time(NULL)); for (i = 0; i < N; i++){ for (j = 0; j < M; j++){ // A[i][j] = i+j; /* The matrix created this way is symmetric */ A[i][j]=rand(); B[j][i]=rand(); } } } void randMatrix(int M, int N, int A[N][M]) { int i, j; srand(time(NULL)); for (i = 0; i < N; i++){ for (j = 0; j < M; j++){ // A[i][j] = i+j; /* The matrix created this way is symmetric */ A[i][j]=rand(); } } } /* * correctTrans - baseline transpose function used to evaluate correctness */ void correctTrans(int M, int N, int A[N][M], int B[M][N]) { int i, j, tmp; for (i = 0; i < N; i++){ for (j = 0; j < M; j++){ tmp = A[i][j]; B[j][i] = tmp; } } } /* * registerTransFunction - Add the given trans function into your list * of functions to be tested */ void registerTransFunction(void (*trans)(int M, int N, int[N][M], int[M][N]), char* desc) { func_list[func_counter].func_ptr = trans; func_list[func_counter].description = desc; func_list[func_counter].correct = 0; func_list[func_counter].num_hits = 0; func_list[func_counter].num_misses = 0; func_list[func_counter].num_evictions =0; func_counter++; }