gem5 prefetcher

本文记录了在gem5模拟器上添加并调试硬件流预取算法的过程,包括修改Caches.py开启预取、编写stream.hh和stream.cc、配置Prefetcher.py和Sconscript,以及解决版本不兼容和编译问题。
摘要由CSDN通过智能技术生成

最近在gem5上做预取实验,添加自己的预取算法,这里采用hardware stream prefetcher , 修改了几个bug才给实验调试通过,发文记录下实验过程。
gem5上添加自己的预取算法步骤:
(1)路径gem5-master/configs/common/Caches.py下,开启预取:

class L1Cache(Cache):
   assoc = 2
   tag_latency = 2
   data_latency = 2
   response_latency = 2
   mshrs = 4
   tgts_per_mshr = 20
   prefetcher = StridePrefetcher(degree=8, latency=1.0) #添加此行代码
   # prefetch_policy='tagged' #若是老版本, 添加此行代码
class L2Cache(Cache):
  assoc = 8
  tag_latency = 20
  data_latency = 20
  response_latency = 20
  mshrs = 20
  tgts_per_mshr = 12
  write_buffers = 8
  prefetcher = StridePrefetcher(degree=8, latency=1.0) #添加此行代码
  # prefetch_policy='tagged'  #若是老版本, 添加此行代码

(2)在路径gem5-master/src/mem/cache/prefetch/下,添加自己的预取算法:主要是stream.hh和stream.cc文件。
(3)在路径gem5-master/src/mem/cache/prefetch/下的Prefetcher.py中配置:

class StreamPrefetcher(QueuedPrefetcher):
    type = 'StreamPrefetcher'
    cxx_class = 'StreamPrefetcher'
    cxx_header = "mem/cache/prefetch/stream.hh"
    table_sets = Param.Int(16, "Number of sets in PC lookup table")
    table_assoc = Param.Int(4, "Associativity of PC lookup table")
    tableSize = Param.Int(8, "Number of sets in PC lookup table")
    distance = Param.Int(5, "Associativity of PC lookup table")
    use_master_id = Param.Bool(True, "Use master id based history")
    degree = Param.Int(4, "Number of prefetches to generate")

(4)在路径gem5-master/src/mem/cache/prefetch/下的Sconscript中配置:

Import('*')

SimObject('Prefetcher.py')

Source('base.cc')
Source('queued.cc')
Source('stride.cc')
Source('tagged.cc')
Source('stream.cc') #添加此行代码

注意:在这里若没有配置,在编译的时候会报错:

> build/X86/python/_m5/param_StreamPrefetcher_wrap.o: In function > `_wrap_StreamPrefetcherParams_create': > /home/jyf/download/gem_nvmain/gem5-master/build/X86/python/_m5/param_StreamPrefetcher_wrap.cc:4549: > undefined reference to `StreamPrefetcherParams::create()' collect2: > error: ld returned 1 exit status scons: *** [build/X86/gem5.opt] Error > 1 scons: building terminated because of errors.

原因是由于缺少以上配置,stream.cc没有生成stream.o文件,文件无法连接。

在编译的过程中会生成stream.o , sreamPrefetcher.hh(gem5-master/build/ARM/params/下),
param_StreamPrefetcher_wrap.cc(build/ARM/python/_m5/下)。这些文件里面都有StreamPrefetcher * create()相关联。
(5)由于我找的hardware stream预取算法比较老,版本不匹配,这里还需要修改 stream.cc ,stream.hh源码,:

stream.cc 中:
Addr 改为 AddrPriority

StreamPrefetcher::calculatePrefetch(const PacketPtr &pkt,
                                    std::vector<AddrPriority> &addresses) {
    uint32_t core_id = pkt->req->hasContextId() ? pkt->req->contextId() : -1;
    //uint32_t core_id = pkt->req->contextId();
    //if (core_id < 0) {
   
    if (!pkt->req->contextId()) {
        DPRINTF(HWPrefetch, "ignoring request with no core ID");
        return;
    }
    .......


    for
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值