Прикреплённый файл «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 из ссылки «[получить]», так как он чисто внутренний и может измениться.
 Все файлы | Выбранные файлы: удалить переместить на страницу скопировать на страницу

Вам нельзя прикреплять файлы к этой странице.