gem5——缓存

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

1 涉及到的相关文件

四个文件夹

compressors
prefetch
replacement_policies
tags

分别表示“缓存压缩”、“预取”、“替换算法”、“标志位”等相关结构
此外,还包括基本文件:

base.hh
base.cc
cache_blk.hh
cache_blk.cc
cache.hh
cache.cc
mshr_queue.hh
mshr_queue.cc
mshr.hh
mshr.cc
noncoherent_cache.hh
noncoherent_cache.cc
queue_entry.hh
queue.hh
write_queue_entry.hh
write_queue_entry.cc
write_queue.hh
write_queue.cc
Cache.py
SConscript

从这些文件中,可以观察到其中的文件包括三类:

  • SConscript:负责编译用 Scons
  • Cache.py:Python 提供接口
  • xx.hh/cc:c++ 实现具体的功能

2 SConscript

2.1 具体结构

Import('*')

SimObject('Cache.py', sim_objects=[
    'WriteAllocator', 'BaseCache', 'Cache', 'NoncoherentCache'],
    enums=['Clusivity'])
    
Source('base.cc')
Source('cache.cc')
Source('cache_blk.cc')
Source('mshr.cc')
Source('mshr_queue.cc')
Source('noncoherent_cache.cc')
Source('write_queue.cc')
Source('write_queue_entry.cc')

DebugFlag('Cache')
DebugFlag('CacheComp')
DebugFlag('CachePort')
DebugFlag('CacheRepl')
DebugFlag('CacheTags')
DebugFlag('CacheVerbose')
DebugFlag('HWPrefetch')
DebugFlag('MSHR')
DebugFlag('HWPrefetchQueue')

CompoundFlag('CacheAll', ['Cache', 'CacheComp', 'CachePort', 'CacheRepl',
                          'CacheVerbose', 'HWPrefetch', 'MSHR'])

2.2 SConscript 简介

SConscript 是 scons 默认自动寻找并执行的配置脚本,对环境进行基本的信息处理,然后创造环境对象,并调用 osconfig.py(硬件相关性较大的配置)build_tools.py(定义了各项公用的操作)
SConscript()方法,递归调用各级子目录中的SConscript,从而实现根据不同项目特点定义相应的代码组织、编译行为。

gem5 中,主要用 scons编译,并 SConscript 完成编译相关内容,主要用的语法有:

SimObject()
Source()
DebugFlag()
CompoundFlag()

gem5学习——The gem5 Memory System 本文是对gem5官方教程gem5: gem5_memory_syste 的学习:描述了gem5中的内存子系统,重点关注CPU简单内存事务(读或写)期间的程序流。 阅读详情

相关推荐

gem5学习(24):缓存一致性协议——Cache Coherence Protocols

缓存一致性协议——Cache Coherence Protocols

共同学习,共同进步。 1511

gem5中添加自定义硬件算法

最近在gem5上添加自己的算法

weixin_45520085的博客 927

GEM5缓存配置终极指南:经典缓存vs Ruby协议选择与两级缓存实战

本文深入解析GEM5模拟器中经典缓存与Ruby协议的核心差异与适用场景,提供X86两级缓存的完整配置教程。通过对比设计哲学、性能指标和实战案例,帮助研究者根据需求选择最优方案,并分享高级调试与统计分析方法,提升缓存模拟效率。

weixin_42552716的博客 348

gem5学习(23):经典缓存——Classic Caches

经典缓存

共同学习,共同进步。 1467

gem5验证数组的缓存优化

软件优化是提高cache命中率的十分有效的手段,cache的基本原理是利用程序局部性,而软件优化可以通过提高程序局部性,从而提高cache命中率。通过gem5仿真验证程序优化对提高cache命中率的影响。

leishangwen的专栏 2163

gem5中正确使用缓存的方法

本节博客参考官网和人间之清欢的博客 开始以为自己指定了缓存的大小,命令如下 build/X86/gem5.opt configs/example/se.py --cmd=tests/test-progs/hello/bin/x86/linux/hello --cpu-type=TimingSimpleCPU --l1d_size=64kB --l1i_size=16kB 然后grep一下发现结果...

skywf的博客 2257

Gem5-添加缓存(上)

我们将使用经典的缓存,而不是ruby-intro-chapter,因为我们正在为一个单CPU系统建模,而且我们并不关心缓存的一致性建模。现在,为了创建具有特定参数的缓存,我们首先要在simple.py的同一目录下创建一个新的文件,caches.py,configs/tutorial/part1。要看到所有可能的配置选项,并找到哪些是必须的,哪些是可选的,你必须看一下SimObject的源代码。接下来,我们必须为指令缓存和数据缓存定义一个单独的connectCPU函数,因为I缓存和D缓存的端口有不同的名字。

m0_63798832的博客 1247

Gem5经典缓存

默认的缓存是带有MSHR(未命中状态保持寄存器)和WB(写缓冲区)的非阻塞缓存,用于处理读写未命中。缓存也可以启用(通常在最后一级缓存中)。Gem5中实现了多种和。这些策略分别定义了在给定地址的情况下可以用于块替换的块,以及如何使用地址信息找到块的位置。默认情况下,缓存行使用策略进行替换,并使用策略进行索引。

f601323135的博客 334

Gem5-添加缓存(下)

现在的最小Python版本是3.6,所以当编写不需要与当前gem5脚本交互的新脚本时,Python的argparse是一个更好的选择。从我们的基础 L1 缓存开始,我们只需添加一个空的构造函数,因为我们没有任何适用于基础 L1 缓存的参数。要做到这一点,我们只需修改two_level_opts.py,将选项作为参数传入缓存的构造器,并添加一个适当的构造器,接下来。为了给我们的两级缓存配置添加选项,在导入我们的缓存后,让我们添加一些选项。现在,让我们把刚刚创建的缓存添加到我们在上一章创建的配置脚本中。

m0_63798832的博客 534

gem5——向简单脚本中添加缓存

本文章是我学习如何向一个简单的gem5脚本添加缓存时的代码和注释,与https://blog.csdn.net/luzi0206/article/details/117629255?spm=1001.2014.3001.5501。 我是根据

luzi0206的博客 857

Gem5中利用se.py创建L3缓存的方法

system.tol3bus = L2XBar(clk_domain=system.cpu_clk_domain) # 连接 L2 和 L3。system.l3.mem_side = system.membus.cpu_side_ports # L3 连接到内存总线。system.membus.cpu_side_ports, # 没有 L3 时直接连到 membus。system.tol3bus.cpu_side_ports, # 连接到 L3。

m0_74380067的博客 1749

gem5三级缓存配置,其中L1和L2为cpu独享

参考: discussion on modeling shared L3 cache hierarchy三级缓存实现效果图: 缓存架构参数配置: cpu: four core private L1 dcache: 32KB/8-way; icache: 32KB/8-way private L2 cache: 256KB/8-way shared L3 cahce: 4MB/16-way实

AI系统、缓存 7431

learning_gem5 part2_06 创建一个简单的缓存对象

由于我们确保在缓存缺失逻辑中,如果数据包小于缓存块,则会创建一个新数据包,因此这些数据的大小保证是缓存块的大小。在这里,无论数据包是读请求还是写请求,我们都向内存发送读请求,以将缓存块的数据加载到缓存中。接下来,我们包含了一个系统参数,它是一个指向该缓存所连接的主系统的指针。如果数据包是对齐的并且请求的大小等于缓存块的大小,那么我们可以像在 SimpleMemobj 中那样简单地将请求转发到内存。由于 SimpleCache 是阻塞的,并且一次只允许一个未完成的请求,我们只需要保存一个端口 id。

eloudy的专栏 917

gem5-gpu教程04 高速缓存一致性协议和缓存拓扑

gem5-gpu 的一大贡献是允许用户灵活地定义 GPU 和 GPU-CPU 间的缓存一致性协议。此功能由 gem5 的 Ruby 模块实现,该模块使用 SLICC 语言定义一致性协议。更多信息请访问。

qq_20388971的博客 711

gem5缓存系统完全指南:从L1到L3缓存配置与性能优化

gem5是一款功能强大的计算机系统架构模拟器,广泛应用于学术研究和工业界的处理器设计与评估。本文将详细介绍如何在gem5中配置从L1到L3的多级缓存系统,并提供实用的性能优化技巧,帮助您构建更真实、高效的系统仿真环境。 ## 缓存系统基础:为什么多级缓存至关重要? 现代处理器通常采用多级缓存层次结构,从靠近CPU的L1缓存到共享的L2和L3缓存,每一级都在速度和容量之间进行权衡。L1缓存速度最

gitblog_00637的博客 681

gem5中查看缓存配置后的体系结构pydot

参考: Architecture of your configuration问题来源: 当使用gem5模拟缓存结构时,通常我们修改或配置好缓存后,并不太清楚CPU,缓存及主存之间的连接关系,特别是配置的核心多,缓存层次多时,整个体系结构并不明晰,并且不知道自己是否配置正确。解决方法: 1. gem5运行后在m5out/下会有一个config.dot.svg,它即为运行后生成的体系架构。(通常情况

AI系统、缓存 3941

gem5学习(8):创建一个简单的缓存对象--Creating a simple cache object

创建一个简单的缓存对象

共同学习,共同进步。 2194

Gem5运行时更改缓存替换算法的传参方法

from m5.objects import LRURP, RandomRP, TreePLRURP, RRIPRP, DRRIPRP # 导入替换策略。3. 在运行的脚本中加--l2_replacement_policy=Random 参数,可自行修改。# 将解析到的命令行参数传递给 options。

m0_74380067的博客 1708
上一篇: gem5——代码结构
下一篇: Flutter 基础:状态管理
w_1_12
博客等级 码龄10年 15粉丝 · 23原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值