Skip to content

mcai/Prefetchers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation

README

Markov预取器模拟

该项目模拟了Markov预取器,并针对不同的内存访问模式进行测试,计算其准确性。

算法说明

Markov 预取器是一种利用 Markov 模型预测下一个可能被访问的地址的算法。它通过分析过去的内存访问模式来建立转移表,该转移表记录了从一个地址到另一个地址的转移次数。利用这些数据,预取器可以预测下一个最可能被访问的地址,从而提前加载数据,减少内存访问延迟。

主要步骤

  1. 初始化转移表: 创建一个二维数组,用于记录从一个地址转移到另一个地址的次数。

  2. 处理内存访问: 对于每次内存访问,检查是否命中先前的预取地址或访问过的地址。如果命中,则记录命中情况。

  3. 更新转移表: 根据当前访问的地址和前一个地址,更新转移表中对应的转移次数。

  4. 预测下一个地址: 根据转移表预测下一个最可能被访问的地址。如果该地址不在最近的访问历史中,则进行预取。

  5. 计算预取准确率: 最后,通过记录预取命中次数和预取请求次数,计算预取器的准确率。

通过对多种不同的内存访问模式(如顺序访问、跨距访问、交错访问、随机访问和重复访问)进行测试,可以评估 Markov 预取器的性能和准确率。

文件

  • markov_predictor.py: 包含Markov预取器的实现及其模拟,包括生成不同内存访问模式的函数。

使用方法

  1. 运行 markov_predictor.py 来模拟不同内存访问模式下的Markov预取器。输出将显示每种模式下预取器的准确性。
python markov_predictor.py

输出格式

输出将会是如下格式:

顺序访问模式:
访问历史: [(0, '非预取'), (1, '非预取')], 访问地址: 2, 未命中, 更新转移表: 1 -> 2(1), 当前转移表: 0 -> [1(1)], 1 -> [2(1)], 不进行预取(没有找到后继地址)
...
准确率: 0.9
...
跨距访问模式:
访问历史: [(0, '非预取'), (2, '非预取')], 访问地址: 4, 未命中, 更新转移表: 2 -> 4(1), 当前转移表: 0 -> [2(1)], 2 -> [4(1)], 不进行预取(没有找到后继地址)
...
准确率: 0.8
...
交错访问模式:
访问历史: [(0, '非预取'), (1, '非预取')], 访问地址: 2, 未命中, 更新转移表: 1 -> 2(1), 当前转移表: 0 -> [1(1)], 1 -> [2(1)], 不进行预取(没有找到后继地址)
...
准确率: 0.7
...
随机访问模式:
访问历史: [(6, '非预取'), (2, '非预取')], 访问地址: 8, 未命中, 更新转移表: 2 -> 8(1), 当前转移表: 2 -> [8(1)], 6 -> [2(1)], 不进行预取(没有找到后继地址)
...
准确率: 0.6
...
重复访问模式:
访问历史: [(0, '非预取'), (1, '非预取')], 访问地址: 2, 未命中, 更新转移表: 1 -> 2(1), 当前转移表: 0 -> [1(1)], 1 -> [2(1)], 不进行预取(没有找到后继地址)
...
准确率: 0.85
...
自定义访问模式:
访问历史: [(0, '非预取'), (1, '非预取')], 访问地址: 2, 未命中, 更新转移表: 1 -> 2(1), 当前转移表: 0 -> [1(1)], 1 -> [2(1)], 不进行预取(没有找到后继地址)
...
准确率: 0.8
...

实验结果总结: 顺序访问模式的预测准确率为: 0.9 跨距访问模式的预测准确率为: 0.8 交错访问模式的预测准确率为: 0.7 随机访问模式的预测准确率为: 0.6 重复访问模式的预测准确率为: 0.85 自定义访问模式的预测准确率为: 0.8

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages