elif model == 3: l3 = Cache("L3", 20, 4, 64, "LRU") mem.load_to(l3) mem.store_from(l3) l2 = Cache("L2", 2, 1, 64, "LRU", store_to=l3, load_from=l3) l1 = Cache("L1", 1, 1, 64, "LRU", store_to=l2, load_from=l2) cs = CacheSimulator(l1, mem) infile = open("cachesim_output.out", "rb") while True: chunk = infile.read(9) if len(chunk) < 9: break t = chunk[0] a = int.from_bytes(chunk[1:8], byteorder='little', signed=False) if t == 0: if verbose == True: print('load ' + str(a)) cs.load(a, length=8) if t == 1: if verbose == True: print('store ' + str(a)) cs.store(a, length=8) cs.force_write_back() cs.print_stats()
mem = MainMemory() #l3 = Cache("L3", 20480, 16, 64, "LRU") # 20MB: 20480 sets, 16-ways with cacheline size of 64 bytes #l2 = Cache("L2", 256, 4, 64, "LRU", store_to=l3, load_from=l3) # 256KB #l1 = Cache("L1", 64, 8, 64, "LRU", store_to=l2, load_from=l2) # 32KB # Cascade Lake l3 = Cache("L3", 28672, 11, 64, "LRU") # 28MB: 11-ways with cacheline size of 64 bytes l2 = Cache("L2", 1024, 16, 64, "LRU", store_to=l3, load_from=l3) # 1MB l1 = Cache("L1", 32, 8, 64, "LRU", store_to=l2, load_from=l2) # 32KB mem.load_to(l3) mem.store_from(l3) cs = CacheSimulator(l1, mem) with open(filename, 'r') as fp: for line in fp.readlines(): op, addr = line.split(": ") op = op[0] addr = int(addr, 16) if op == 'W': cs.store(addr, length=8) elif op == 'R': cs.load(addr, length=8) else: sys.exit("Invalid operation: {}".format(op)) cs.force_write_back() cs.print_stats()