存储指令的故障退出

时间:2016-03-04 01:36:06

标签: caching cpu-architecture

假设我们有两条指令 商店A. 商店B 并且这两个映射到Cache中的两个不同的缓存行。 无论如何,Store(B上的存储B)的无序退出是否有助于在缓存中考虑写回写分配策略? 假设没有异常/中断,没有结构,控制,数据依赖或内存依赖,两个指令之间没有缓存冲突。

3 个答案:

答案 0 :(得分:0)

假设您使用的是宽松的一致性模型,并且两个商店之间没有围栏,那么非常简短的答案是商店可以“无序”执行,这可能有助于提高性能。存储通常在写入缓存之前写入写入队列(或存储队列)。写入队列可以物理地实现为队列,CAM,存储队列等。假设写入队列中应该写入A的存储区已满,则处理器可能能够在之前将B写入另一个存储区写A.另一个例子是当B的地址在A的地址之前很好地计算时。注意,如果需要,处理器应该总是能够反转这个动作(即,写入写入队列和高速缓存)(例如,当发生精确的异常时) )。但我想这很难逆转,所以我认为这不会在实践中完成。

尽管如此,请注意每个指令(加载,存储,ALU操作等)都按顺序提交(退役),但这并不意味着应该按顺序执行指令。

答案 1 :(得分:0)

商店的故障退出可以帮助放松一致性模型。考虑两个线程并行执行的情况,如果你在Store B之前退出Store A(乱序)并且线程2在A上等待,它可以继续而不必等待B在A之前写入。

也就是说,如果Store to B导致异常,则很难反转,因此我认为它在一般系统中没有多大用处。

答案 2 :(得分:0)

我的观点是回写和写入分配策略的情况,当存储指令未命中时,字节或字的新值必须等到从较低级别的存储器层次结构中取出数据块。因此,存储器访问由于高速缓存未命中而停止高速缓存当根本没有例外时,商店的乱序退出有助于实现内存级并行性。 (商店B必须等待,如果它按顺序退役并且存储A未命中)。 如果我们将未命中状态处理寄存器(MSHR)作为高速缓存架构的一部分引入以释放用于新访问的高速缓存,则即使在存储的按顺序退出的情况下也可以实现这一点。这样的高速缓存将是非阻塞高速缓存。 MSHR被分配用于高速缓存未命中以跟踪未命中的状态。这是软件预取和宽松一致性模型所必需的,以获得所需的性能优势。