CHI - Transaction介绍 - 其他类型介绍
之前介绍了CHI的transaction类型,包括read/dataless/write/snp等各类型的transaction,本小节介绍Exclusive和Cache Stashing类型的描述
1. Exclusive Access
exclusive传输的目的是确保读写操作之间的行为是原子的,没有被其他人所修改的,基本的流程如下:
a. 读 exclusive address
b. 执行计算
c. 写exclusive address
如果在写之前有别的写发生了,那么这笔exclusive失效,对应的地址监测会有硬件的monitor来实现;
term | comment | |||
exclusive load | LP执行适当程序指令的动作,例如LDREX,要求: •从想要执行排他序列的位置获取数据。 •表示开始一个exclusive序列。 | |||
exclusive load transaction | 如果数据在LP的缓存中不可用,则在接口上发出的事务,以获取Exclusive Load的数据。 并不是每个Exclusive Load都需要一个Exclusive Load事务 | |||
exclusive store | LP执行适当程序指令的动作,例如STREX,要求: 1. 确定排他序列是否通过或失败。 2. 如果合适,更新现场数据。 可以通过或失败,执行处理器知道这个结果。当独占存储传递时,将更新地址位置的数据值。 当排他性存储失败时,这表明地址位置的数据值尚未更新,并且必须重新启动排他性序列。 | |||
exclusive store transaction | 在接口上发出的事务,该事务可能需要完成exclusive store。并非每个Exclusive Store都需要Exclusive Store事务。Exclusive Store事务可以通过也可以失败,并且使用事务响应将此结果告知LP. |
2. Cache Stashing
a.缓存存储是一种在系统中特定缓存中安装数据的机制。缓存存储确保数据位于其使用点附近,从而提高系统性能;
b.仅对snpable memory
c. 主要支持两种stash
WriteUniqueStash: 用隐藏<hint>的提示写。当应该分配数据的缓存在写入数据的时间点是已知的时,使用这种方法.
StashOnce: 独立存储请求。
当将数据存储到特定缓存中的请求与数据写入分离时,使用这种方法。
独立的Stash事务可以通过使用StashOnceUnique或StashOnceSepUnique,或stashoncesshared或StashOnceSepShared事务,这对应于缓存行的下一个预期使用是用于存储还是用于读取。
WriteUniquePtlStash | SnpUniqueStash | ReadUnique 其他备份都被INVLD | 其他备份都被INVLD | |
WriteUniqueFullStash | SnpMakeInvalidStash | ReadUnique | 其他备份都被INVLD | |
StashOnceUnique StashOnceSepUnique | SnpStashUnique | ReadUnique | 其他备份都被INVLD | |
StashOnceShared StashOnceSepShared | SnpStashShared | ReadNotSharedDirty | 之后只会是SC/UC/UD |