在gem5中添加自定义硬件预取算法

最近在gem5上添加自己的预取算法,因为gem5的版本更新,因此网上的代码,大多都难以直接使用,通过借鉴大佬的文章和对gem5中带有的硬件预取算法的模仿,成功添加了一个自定义算法。
以下是在gem5上添加自定义预取算法的步骤:

(1)在路径gem5/src/mem/cache/prefetch/下,添加自己的预取算法:主要是simple.hh和simple.cc文件。

simple.hh文件代码如下:

#ifndef __MEM_CACHE_PREFETCH_SIMPLE_HH__
#define __MEM_CACHE_PREFETCH_SIMPLE_HH__

#include "mem/cache/prefetch/queued.hh"
#include "mem/packet.hh"

namespace gem5
{

struct SimplePrefetcherParams;

GEM5_DEPRECATED_NAMESPACE(Prefetcher, prefetch);
namespace prefetch
{
class Simple : public Queued 
{
  public:
    Simple(const SimplePrefetcherParams &p);
    ~Simple() = default;
    
        void calculatePrefetch(const PrefetchInfo &pfi,
                           std::vector<AddrPriority> &addresses) override;
};

} // namespace prefetch
} // namespace gem5


#endif // __SIMPLE_PREFETCHER_HH__

simple.cc文件代码如下:

#include "mem/cache/prefetch/simple.hh"
#include "params/SimplePrefetcher.hh"

namespace gem5
{

GEM5_DEPRECATED_NAMESPACE(Prefetcher, prefetch);
namespace prefetch
{

Simple::Simple(const SimplePrefetcherParams &p)
    : Queued(p)
{

}

void
Simple::calculatePrefetch(const PrefetchInfo &pfi,
    std::vector<AddrPriority> &addresses)
{
    // 获取当前访问的地址
    Addr current_addr = blockAddress(pfi.getAddr());

    // 计算预取地址,并将它们添加到addresses向量中
    for (int i = 1; i <= 3; i++) {
        Addr prefetch_addr = current_addr + i*64;
        addresses.emplace_back(AddrPriority(prefetch_addr, 0));
    }
}

} // namespace prefetch
} // namespace gem5

(3)在路径gem5/src/mem/cache/prefetch/下的Prefetcher.py中配置:

class SimplePrefetcher(QueuedPrefetcher):
    type = 'SimplePrefetcher'
    cxx_class = 'gem5::prefetch::Simple'
    cxx_header = "mem/cache/prefetch/simple.hh"

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

SimObject('Prefetcher.py', sim_objects=[
    'BasePrefetcher', 'MultiPrefetcher', 'QueuedPrefetcher',
    'StridePrefetcherHashedSetAssociative', 'StridePrefetcher',
    'Tagged1Prefetcher', 'IndirectMemoryPrefetcher', 'SignaturePathPrefetcher',
    'SignaturePathPrefetcherV2', 'AccessMapPatternMatching', 'AMPMPrefetcher',
    'DeltaCorrelatingPredictionTables', 'DCPTPrefetcher',
    'IrregularStreamBufferPrefetcher', 'SlimAMPMPrefetcher',
    'BOPPrefetcher', 'SBOOEPrefetcher', 'STeMSPrefetcher', 'PIFPrefetcher', 'MyprefetctPrefetcher', 'SimplePrefetcher'])
   # 其中添加了'SimplePrefetcher'
 
# 并且在下边添加代码:
Source('simple.cc')

然后重新编译gem5即可,感谢大佬的文章:

https://blog.csdn.net/qqq_11101/article/details/73436699

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值