gpt4 book ai didi

python - 在 I/O 跟踪文件中查找缓存未命中、命中率

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:24 26 4
gpt4 key购买 nike

我有一个 I/O 跟踪文件,其中包含以下字段('asu'、'block_address'、'size'、'opcode'、'time_stamp')。数据看起来像这样。 (超过 500 万行)

0,20941264,8192,W,0.551706
0,20939840,8192,W,0.554041
0,20939808,8192,W,0.556202
1,3436288,15872,W,1.250720
1,3435888,512,W,1.609859
1,3435889,512,W,1.634761
0,7695360,4096,R,2.346628
1,10274472,4096,R,2.436645
2,30862016,4096,W,2 448003
2,30845544,4096,W,2.449733
1,10356592,4096,W,2.449733

我想在我的项目中添加一个缓存层,并想计算未命中和命中。我正在使用 @functools.lru_cache(maxsize = None)查找 block_address 的缓存命中和未命中。关注tutorial我试着计算未命中/命中。 blk_trace 是 block_address 的跟踪数组。

@functools.lru_cache(maxsize = None)
def blk_iter():
blk_len = len(blk_trace)
for i in range(0,blk_len):
print(blk_trace[i])

在查看缓存信息 blk_iter.cache_info() 时,我得到了 CacheInfo(hits=0, misses=1, maxsize=None, currsize=1) 。这是不对的。我对 python 和缓存概念还很陌生。我不知道我做错了什么。我如何找到 block 地址的未命中/命中?

最佳答案

缓存用于函数 blk_iter -- 您只调用了一次 blk_iter,因此您的缓存大小为 1,并且有 1 次未命中。

考虑以下带有lru_cache的函数

@lru_cache(maxsize=None)
def myfunc(x):
print('Cache miss: ', x)
return x + 1

当用 x 的特定值调用时,该函数将运行并且结果将存储在缓存中。如果使用相同的参数再次调用,该函数将根本不会运行,并返回缓存的值。

>>> for i in range(3):
... print(myfunc(i))
...
Cache miss: 0
1
Cache miss: 1
2
Cache miss: 2
3
>>> myfunc(0) # this will be a cache hit
1
>>> myfunc(3) # this will be another miss
Cache miss: 3
4
>>> myfunc.cache_info()
CacheInfo(hits=1, misses=4, maxsize=None, currsize=4)

在你的例子中,即使缓存设置正确,你也会有所有未命中和没有命中 for i in range(0,blk_len): 每次迭代都会调用一个新参数,因此缓存永远不会命中。

关于python - 在 I/O 跟踪文件中查找缓存未命中、命中率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49457809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com