Прикреплённый файл «VarCacheCheck.py»
Загрузка 1 #!/usr/bin/env python3
2 '''
3 Check for direct and associative cache efficiency
4 '''
5 import sys
6
7
8 def dircache(nblocks, bsize, addresses, verbose=False):
9 cache = [-1] * nblocks
10 hit, miss = 0, 0
11 for addr in addresses:
12 tag = addr // (bsize * 4)
13 if cache[tag % nblocks] == tag:
14 hit += 1
15 else:
16 cache[tag % nblocks] = tag
17 miss += 1
18 return hit, miss
19
20
21 def a2dcache(nblocks, ssize, bsize, addresses, verbose=False):
22 nbanks = nblocks // ssize
23 banks = [[] for c in range(nbanks)]
24 hit, miss = 0, 0
25 for addr in addresses:
26 tag = addr // (bsize * 4)
27 cache = banks[tag % nbanks]
28 if tag in cache:
29 c = cache.pop(0)
30 cache.append(c)
31 hit += 1
32 else:
33 if len(cache) >= ssize:
34 cache.pop(0)
35 cache.append(tag)
36 miss += 1
37 return hit, miss
38
39
40 def asscache(nblocks, bsize, addresses, verbose=False):
41 cache = []
42 hit, miss = 0, 0
43 for addr in addresses:
44 tag = addr // (bsize * 4)
45 if tag in cache:
46 c = cache.pop(0)
47 cache.append(c)
48 hit += 1
49 else:
50 if len(cache) >= nblocks:
51 cache.pop(0)
52 cache.append(tag)
53 miss += 1
54 return hit, miss
55
56
57 if __name__ == "__main__":
58 import os
59 global verbose
60 nblocks = int(os.environ.get("NBLOCKS", 8))
61 bsize = int(os.environ.get("BSIZE", 4))
62 ssize = int(os.environ.get("SSIZE", 2))
63 verbose = bool(os.environ.get("VERBOSE", False))
64
65 with open(sys.argv[1]) as f:
66 f.readline()
67 idx = int(f.readline()) + 1
68 data = [int(n, 16) for n in open(sys.argv[2])]
69 hdir, mdir = dircache(nblocks, bsize, data, verbose)
70 hass, mass = asscache(nblocks, bsize, data, verbose)
71 ha2d, ma2d = a2dcache(nblocks, ssize, bsize, data, verbose)
72 print(f"Dir: {hdir}/{mdir}; Ass: {hass}/{mass}; AssDir; {ha2d}/{ma2d}")
73 R = hdir / (hdir + mdir), ha2d / (ha2d + ma2d), hass / (hass + mass)
74 if R.index(max(R)) == idx:
75 sys.exit(0)
76 else:
77 sys.exit(5)
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.Вам нельзя прикреплять файлы к этой странице.
