From 1667f3744a4b90c90a636c9c61d68aed3f2d0dfc Mon Sep 17 00:00:00 2001 From: TuDatTr Date: Fri, 11 Dec 2020 15:48:42 +0100 Subject: [PATCH] Initial commit --- Makefile | 33 + README | 39 + cachelab.c | 83 + cachelab.h | 37 + csim-ref | Bin 0 -> 25384 bytes csim.c | 13 + driver.py | 137 + test-csim | Bin 0 -> 21240 bytes test-trans.c | 261 + tracegen.c | 107 + traces/dave.trace | 5 + traces/long.trace | 267988 ++++++++++++++++++++++++++++++++++++++++++ traces/trans.trace | 596 + traces/yi.trace | 7 + traces/yi2.trace | 16 + trans.c | 84 + 16 files changed, 269406 insertions(+) create mode 100644 Makefile create mode 100644 README create mode 100644 cachelab.c create mode 100644 cachelab.h create mode 100755 csim-ref create mode 100644 csim.c create mode 100755 driver.py create mode 100755 test-csim create mode 100644 test-trans.c create mode 100644 tracegen.c create mode 100644 traces/dave.trace create mode 100644 traces/long.trace create mode 100644 traces/trans.trace create mode 100644 traces/yi.trace create mode 100644 traces/yi2.trace create mode 100644 trans.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1712d8c --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +# +# Student makefile for Cache Lab +# Note: requires a 64-bit x86-64 system +# +CC = gcc +CFLAGS = -g -Wall -Werror -std=c99 -m64 + +all: csim test-trans tracegen + # Generate a handin tar file each time you compile + -tar -cvf ${USER}-handin.tar csim.c trans.c + +csim: csim.c cachelab.c cachelab.h + $(CC) $(CFLAGS) -o csim csim.c cachelab.c -lm + +test-trans: test-trans.c trans.o cachelab.c cachelab.h + $(CC) $(CFLAGS) -o test-trans test-trans.c cachelab.c trans.o + +tracegen: tracegen.c trans.o cachelab.c + $(CC) $(CFLAGS) -O0 -o tracegen tracegen.c trans.o cachelab.c + +trans.o: trans.c + $(CC) $(CFLAGS) -O0 -c trans.c + +# +# Clean the src dirctory +# +clean: + rm -rf *.o + rm -f *.tar + rm -f csim + rm -f test-trans tracegen + rm -f trace.all trace.f* + rm -f .csim_results .marker diff --git a/README b/README new file mode 100644 index 0000000..5af6f01 --- /dev/null +++ b/README @@ -0,0 +1,39 @@ +This is the handout directory for the CS:APP Cache Lab. + +************************ +Running the autograders: +************************ + +Before running the autograders, compile your code: + linux> make + +Check the correctness of your simulator: + linux> ./test-csim + +Check the correctness and performance of your transpose functions: + linux> ./test-trans -M 32 -N 32 + linux> ./test-trans -M 64 -N 64 + linux> ./test-trans -M 61 -N 67 + +Check everything at once (this is the program that your instructor runs): + linux> ./driver.py + +****** +Files: +****** + +# You will modifying and handing in these two files +csim.c Your cache simulator +trans.c Your transpose function + +# Tools for evaluating your simulator and transpose function +Makefile Builds the simulator and tools +README This file +driver.py* The driver program, runs test-csim and test-trans +cachelab.c Required helper functions +cachelab.h Required header file +csim-ref* The executable reference cache simulator +test-csim* Tests your cache simulator +test-trans.c Tests your transpose function +tracegen.c Helper program used by test-trans +traces/ Trace files used by test-csim.c diff --git a/cachelab.c b/cachelab.c new file mode 100644 index 0000000..85ac5e4 --- /dev/null +++ b/cachelab.c @@ -0,0 +1,83 @@ +/* + * 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++; +} diff --git a/cachelab.h b/cachelab.h new file mode 100644 index 0000000..02f7730 --- /dev/null +++ b/cachelab.h @@ -0,0 +1,37 @@ +/* + * cachelab.h - Prototypes for Cache Lab helper functions + */ + +#ifndef CACHELAB_TOOLS_H +#define CACHELAB_TOOLS_H + +#define MAX_TRANS_FUNCS 100 + +typedef struct trans_func{ + void (*func_ptr)(int M,int N,int[N][M],int[M][N]); + char* description; + char correct; + unsigned int num_hits; + unsigned int num_misses; + unsigned int num_evictions; +} trans_func_t; + +/* + * printSummary - This function provides a standard way for your cache + * simulator * to display its final hit and miss statistics + */ +void printSummary(int hits, /* number of hits */ + int misses, /* number of misses */ + int evictions); /* number of evictions */ + +/* Fill the matrix with data */ +void initMatrix(int M, int N, int A[N][M], int B[M][N]); + +/* The baseline trans function that produces correct results. */ +void correctTrans(int M, int N, int A[N][M], int B[M][N]); + +/* Add the given function to the function list */ +void registerTransFunction( + void (*trans)(int M,int N,int[N][M],int[M][N]), char* desc); + +#endif /* CACHELAB_TOOLS_H */ diff --git a/csim-ref b/csim-ref new file mode 100755 index 0000000000000000000000000000000000000000..ef7cb79b0ce42c9684d7f57d1b3d28b99f1243c3 GIT binary patch literal 25384 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