I-Cache 和 D-Cache

文章介绍了CPU缓存中的ICache(指令高速缓存)和DCache(数据高速缓存),以及它们在性能和容量上的差异。CPU与主存间的多级缓存结构通常包括L1,L2,L3,L1Cache被分为指令和数据两部分。区分指令和数据是为了提高性能和硬件设计的效率。文章还讨论了iCache和dCache的一致性问题,特别是self-modifyingcode场景下,如何通过硬件或软件方法来维护两者间的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

ICache和DCache是一种内存,虽然目前接触了好几种内存,寄存器,DDR等,它们在物理上的工作原理虽然不同,但是访问属性却很像。

  1. 在速度上

CPU > 寄存器 > Cache > SRAM >PSRAM

  1. 在容量上

CPU < 寄存器 < Cache < DDR

CPU和主存之间也存在多级高速缓存,一般分为3级,分别是L1, L2和L3。另外,我们的代码都是由2部分组成:指令和数据。L1 Cache比较特殊,每个CPU会有2个L1 Cache。分别为:

指令高速缓存(Instruction Cache,简称iCache)

数据高速缓存(Data Cache,简称dCache)

L2和L3一般不区分指令和数据&

### I-Cache D-Cache 在多级缓存体系中的位置 在计算机架构中,为了提高性能并减少处理器等待内存数据的时间,通常采用多层次的缓存结构。I-Cache(指令缓存)D-Cache(数据缓存)位于这一层次结构的不同部分。 #### 多级缓存概述 现代CPU往往配备有多个级别的缓存来存储最近使用的数据或指令副本。这些级别按照距离核心远近分为L1、L2甚至更高级别的L3缓存。越靠近处理单元的一级缓存具有更快的速度但是容量较小;随着等级增加,虽然速度有所下降但其大小显著增大[^1]。 #### L1 缓存内的划分 对于大多数微处理器而言,最接近执行引擎的第一层(L1)会被细分成两个独立的部分: - **I-Cache (Instruction Cache)**:专门用于保存即将被执行的操作码序列。由于程序计数器(PC)总是顺序读取下一条要执行的命令,因此这种设计有助于预测性的预取机制工作得更好。 - **D-Cache (Data Cache)**:负责暂存由应用程序产生的变量值或其他形式的数据对象。当遇到随机访问模式时尤为有用,因为它能够快速响应来自不同地址空间的需求。 这两个子系统共同构成了所谓的“分离式”(split) L1 cache 架构,它允许同时进行指令获取与加载/存储操作而不互相干扰[^2]。 ```cpp // C++伪代码展示如何区分ICacheDCache的作用范围 void execute_instruction() { // 假设这里是从ICache中取出指令并解析成机器码 auto instruction = fetch_from_ICache(); switch(instruction.opcode){ case LOAD: // 当需要加载数据时,则会涉及到DCache value = load_data_from_DCache(address); break; case STORE: store_data_to_DCache(value, address); break; default: perform_operation(instruction); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值