什么是计算机体系结构中基于软件的协议的设计空间?
基于软件的方法定义了一种良好且具有竞争力的方案,因为它们几乎不需要硬件支持,并且与基于硬件的协议相比,它们会导致同样数量有限的失效故障。所有基于软件的协议都依赖于编译器支持。基于软件的协议的设计空间如图所示。
最简单的方法是**无差别失效**,其中在每个编程方法结束时使整个缓存失效。此方案只需要一个硬件结构来传递或关闭并使缓存失效。
选择性失效方案可以根据程序方法的生成进行分类:
关键方法方案依赖于这样的假设:共享读写变量总是由软件同步工具保护的关键方法创建。当关键方法完成后,这些变量将被区分失效。它可以共享属于相同关键方法的变量位于同一页面上,并且每个页面都与一个一次性标识符相关联。加载缓存行也将定位缓存中相关的的一次性标识符。失效依赖于一次性标识符。
提出了三种并行的for循环选择性失效方案来消除无差别失效的缺点:
**快速选择性失效**方案依赖于直写缓存策略,并引入三个指令来控制缓存访问:内存读取、缓存读取和缓存失效。当确认变量已固定在缓存中时,使用缓存读取访问变量;否则,将应用内存读取命令。
一个额外的位,称为更改位,被插入到每个缓存行中。缓存失效命令将所有更改位设置为真。尝试读取更改位设置为真的变量将导致从内存读取。
**时间戳方案**为每个数据结构分配一个时钟,并为每个缓存行分配一个时间戳条目。当数据结构被刷新时,与数据结构相关的时钟在每个编程方法结束时刷新。当块在缓存中刷新时,缓存目录中的时间戳设置为相应时钟+1的值。
为了防止不必要的失效,提出了相同的方法,称为**版本控制方案**。此技术的核心思想是,程序方法中只有一个进程被允许写入变量,并且此写入会创建变量的新版本。当写入进程退出其程序方法时,新版本将成为可供其他处理器使用的当前版本。
首先,每个处理器为其可使用的每个变量维护一个称为当前版本号 (CVN) 的计数器。其次,每个缓存行都扩展了一个称为出生版本号 (BVN) 的标签。
CVN表示处理器必须使用的变量版本,而BVN表示缓存副本所属的特定版本。当 CVN 大于 BVN 时发生缓存未命中,否则可以从缓存访问变量。