#include "utility.h" // TODO: Uncomment the following lines and fill in the correct size //#define L1_SIZE [TODO] //#define L2_SIZE [TODO] //#define L3_SIZE [TODO] int main (int ac, char **av) { // create 4 arrays to store the latency numbers // the arrays are initialized to 0 uint64_t dram_latency[SAMPLES] = {0}; uint64_t l1_latency[SAMPLES] = {0}; uint64_t l2_latency[SAMPLES] = {0}; uint64_t l3_latency[SAMPLES] = {0}; // A temporary variable we can use to load addresses // The volatile keyword tells the compiler to not put this variable into a // register- it should always try to load from memory/ cache. volatile char tmp; // Allocate a buffer of 64 Bytes // the size of an unsigned integer (uint64_t) is 8 Bytes // Therefore, we request 8 * 8 Bytes uint64_t *target_buffer = (uint64_t *)malloc(8*sizeof(uint64_t)); if (NULL == target_buffer) { perror("Unable to malloc"); return EXIT_FAILURE; } // [1.2] TODO: Uncomment the following line to allocate a buffer of a size // of your chosing. This will help you measure the latencies at L2 and L3. //uint64_t *eviction_buffer = (uint64_t)malloc(TODO); // Example: Measure L1 access latency, store results in l1_latency array for (int i=0; i