Cache

可参考 计算机原理与嵌入式系统笔记:第六篇

直写与回写

Write-Through(直写) 和 Write-Back (回写)是两种 Cache 写策略,用来决定当 CPU 写数据时,数据如何更新到主存的。

  • 当 CPU 对 cache 写数据时,同时也把数据写入主存,称为直写:
    • 数据一致性好(cache 和 主存内容始终同步)
    • 对系统可靠性高
    • 简单易实现
    • 写操作慢,写操作频繁时会增加总线带宽占用
  • 当 CPU 写 cache 时,只更新 cache 中的数据,不立即写入主存,只有当该 cache block 被替换时,才将其写回主存,称为回写:
    • 写操作快,节省总线带宽
    • 数据一致性较差
    • 实现复杂,需要 dirty 位标记
    • 系统崩溃时可能丢失尚未写回的数据

写缓冲区可以解决直写写内存慢、回写替换时大量写回的问题,因此均需要写缓冲区。

性能例子

假设:

  • I-Cache命中缺失率2%
  • D-Cahce命中缺失率4%
  • 未命中惩罚为100周期
  • 基础CPI为2
  • 数据存取类指令占总共的36%

则可计算每次指令的缺失周期数:

  • I-Cache: 0.02 x 100 = 2
  • D-Cache: 0.36 x 0.04 x 100 = 1.44
  • 实际CPI为 2 + 2 + 1.44 = 5.44

平均访问时间

AMAT(Average Memory Access Time,平均内存访问时间)用于衡量 CPU 访问内存系统的平均时间性能。

如果命中时间是 1ns,未命中率 5%,未命中惩罚 20ns,则 AMAT = 1 + 0.05×20 = 2ns。

一致性

Cache 一致性是指在多核或多处理器系统中,多个缓存副本之间的数据保持一致的特性或机制。它保证无论处理器在哪个缓存中读取数据,得到的都是最新的、正确的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Core 0
la t0, x
li t1, 1
sw t1, 0(t0) # x = 1

fence w, w # 确保之前的写(x)对外可见后,后续写才对外可见
la t2, flag
sw t1, 0(t2) # flag = 1(作为发布动作)
==============================================================================
# Core 1
spin:
la t2, flag
lw t3, 0(t2)
beqz t3, spin # 等 flag = 1

fence r, rw # 获取屏障:确保之后的读不会“越过”对 flag 的读取
la t0, x
lw t4, 0(t0) # 现在能可靠读到 x = 1

并行计算:冲刺♿冲

我们想要连接多台计算机以获得更高的性能,有以下几种办法:

  • 任务级(进程级)并行:独立作业的高吞吐量
  • 并行处理程序:在多个处理器上运行单个程序
  • 多核微处理器:有多个处理器(内核)的芯片

参考之前的Amdahl定律:

  • 单处理器:Time = (10 + 100) × tadd
  • 10处理器:Time = 10 x tadd + 100/10 x tadd = 20 x tadd
    • Speedup = 110/20 = 5.5 (55% of potential)
  • 100处理器:Time = 10 x tadd + 100/100 x tadd = 11 x tadd
    • Speedup = 110/11 = 10 (10% of potential)

对于大矩阵来说,加速效果更明显。

强可扩展性与弱可扩展性

测试时问题规模是否随处理器数变化是区分可扩展性强弱的依据。

  • 问题规模固定不变时,随着处理器数量增加,程序的加速比(Speedup) 仍能保持较高,这种能力称为强可扩展性
  • 每个处理器的工作量保持不变(即问题规模随处理器数线性增长)时,程序的性能(例如运行时间)仍能保持近似不变,这种能力称为弱可扩展性