ACE学习系列博客目录
ACE学习系列-01-从AXI到ACE:多核系统一致性的必然选择 - George Lin’s Blog
ACE学习系列-02-ACE缓存一致性模型:五状态机的设计哲学 - George Lin’s Blog
ACE学习系列-03-ACE事务类型体系:从信号到语义的映射 - George Lin’s Blog
ACE学习系列-04-Snoop机制:ACE一致性的核心引擎 - George Lin’s Blog
ACE学习系列-05-ACE互联设计:事务排序与一致性保证 - George Lin’s Blog
ACE学习系列-06-缓存维护与Barrier:系统级一致性的协调机制 - George Lin’s Blog
ACE学习系列-07-ACE事务流程:典型场景的完整解析 - George Lin’s Blog
ACE学习系列-08-ACE设计实践:优化策略与常见陷阱 - George Lin’s Blog
ACE学习系列-09-ACE-Lite:简化的一致性接口及其应用 - George Lin’s Blog
ACE学习系列-补充-缓存一致性与内存一致性概念辨析 - George Lin’s Blog
Coherence和Consistency的区别
Coherence(相干性)一般称作Cache Coherence,关注的是单个内存地址(单个缓存行)的数据视图。确保对于任何一个内存位置,所有的处理器在读取时都能看到最新的写入值。
假设内存地址 $A$ 的初始值为 0。
- 核心 P1 将 $A$ 写入 1。
- 核心 P2 随后读取 $A$。
- 如果 Coherence 成立: P2 必须看到 1。如果 P2 缓存了旧值 0,Coherence 协议(通过窥探/作废机制)会确保 P2 丢弃旧值并获取最新的 1。
Consistency(一致性)一般称作Memory Consistency,关注的是跨越多个内存地址的操作顺序,定义了在一个多核系统中,内存操作(读/写)的顺序必须以何种方式被所有处理器观察到。
例子:
假设内存地址 $A=0$ 和 $B=0$。
| 核心 P1 | 核心 P2 |
|---|---|
1. A = 1; |
3. while (B == 0) {} |
2. B = 1; |
4. print(A); |
如果采用顺序一致性 (SC): P1 的操作 $A=1$ 和 $B=1$ 必须被 P2 以写入的顺序观察到。所以 P2 看到 $B=1$ 后,读取 $A$ 保证是 $1$。
如果采用弱一致性: 处理器 P1 可能会为了性能而交换 A=1 和 B=1 的顺序。如果 P2 在 P1 执行 B=1 但尚未执行 A=1 时跳出循环,P2 读到的 $A$ 可能还是 $0$。因此,程序员必须插入内存屏障 (Memory Barrier) 来强制保持 A=1 在 B=1 之前完成。
Coherence Protocol (相干性协议)的分类
可分为两种:A. 一致性无关的相干性。B. 一致性导向的相干性
一致性无关的相干性
将缓存一致性从内存一致性中清晰地分离出来。即:协议提供原子性,流水线负责排序
关键特征
- 同步传播 (Synchronous Propagation): 当一个核心执行写操作时,在写操作返回(return)给核心之前,协议会确保这个写入操作已经对所有其他核心可见。
- 原子内存错觉 (Illusion of Atomic Memory): 由于写入是同步传播的,从核心的角度看,它就像在直接操作一个没有缓存的原子内存系统一样。这意味着,一旦核心完成了写操作,所有其他核心都能立即(在逻辑上)看到最新的值。
- 职责分离 (Separation of Concerns):
- 缓存相干性协议 (Coherence Protocol): 负责抽象掉缓存的细节,确保数据是正确的(提供原子内存的错觉)。
- 处理器核心流水线 (Processor Core Pipeline): 负责根据程序的要求和内存一致性模型(如顺序一致性或弱一致性)来执行和重排指令,从而保证操作的顺序性。
优点:
设计简化,因为核心流水线只需要关注 Consistency 模型,而不需要担心 Coherence 协议是如何工作的。
对于 AMBA ACE 协议而言,它属于一致性无关 (Consistency-Agnostic) 的范畴。ACE 协议通过复杂的窥探(Snoop)机制确保写入操作能够快速且正确地传播,为核心提供了接近原子性的内存视图。核心则通过屏障事务 (Barrier Transactions) 来强制 Consistency 模型的排序。
一致性导向的相干性
这种协议设计将缓存相干性与内存一致性紧密地结合在一起。这种设计通常出现在对吞吐量要求极高的架构中,例如通用图形处理器 (GP-GPUs)。异步传播可以减少写操作的延迟,提高并行度。即:协议本身就必须参与排序的逻辑。
关键特征
- 异步传播 (Asynchronous Propagation): 一个核心执行写操作后,写操作可以立即返回(return),而不需要等待其写入结果对所有其他核心都可见。
- 允许观察到旧值 (Stale Values): 由于写入是异步的,在写入返回到核心和最终对所有核心可见之间的实时时间段内,其他核心理论上可能会观察到旧的(Stale)值。
- 双重职责 (Dual Enforcement):
- Coherence Protocol: 不仅要确保数据的正确性,还必须确保写入操作最终对所有核心可见的顺序,要严格遵循 Consistency 模型所要求的排序规则。
- Pipeline 和 Coherence Protocol: 两者共同工作来确保 Consistency 模型的要求得到满足。
这种设计之所以在 GP-GPU (通用图形处理器) 中流行,是因为:GPU 运行数千个线程,如果每个写操作都必须等待全局同步,性能会急剧下降。因此,GPU 往往采用较弱的内存一致性模型。这允许硬件更自由地重排序操作,从而隐藏延迟,提高吞吐量。
一致性导向的相干性 是一种面向性能的协议设计:它通过异步传播写操作来最小化处理器停顿时间,提高吞吐量。作为代价,它使得 Coherence 协议本身更为复杂,必须承担起保证写入顺序的额外责任,从而共同实现内存一致性模型的要求。