300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 计算机体系结构——指令系统——屏障指令

计算机体系结构——指令系统——屏障指令

时间:2022-12-29 11:28:07

相关推荐

计算机体系结构——指令系统——屏障指令

根据内存一致性模型,多核多线程的程序无约束执行的结果是不可确定的,因此为限制指令的执行顺序,便引入了特殊的存储器屏障指令(memory fence)。

FENCE指令用于屏障“数据”存储器访问的执行顺序。如果在程序中添加一条FENCE指令,则该FENCE能够保证“在FENCE前所有指令的数据访存结果”必须比“在FENCE后所有指令数据访存结果”先被观测到,即FENCE前的访存指令必须比FENCE后的访存指令先执行。

1. 不同存储模型下的用法

由于各个存储模型限制条件不同(各种内存一致性模型参见:计算机体系结构——多核处理器——存储一致性模型_KGback的博客-CSDN博客_松散一致性模型),fence的用法是不同的。

在TSO模型中

内存屏障只需要在store-load时需要(写内存屏障)在PSO模型中

内存屏障需要在store-load,store-store时需要(写内存屏障)。对于PSO、TSO模型,最简单的一种方式是保证store buffer被清空时才继续往后执行。这样就能保证,与SC模型执行顺序一样。在RMO模型中

四种乱序情况都存在。此时读内存屏障就要保证前面的load指令要比后面的load/store指令先执行,不允许将对存储器的访存提前进行。

举例说明:

在这个例子中,C1执行S1和S2时,在S1和S2间加入一个写fence指令,要求C1按照SC模型执行store指令;同理C2执行L1和L2时,在L1和L2间加入一个读fence指令,要求C2按照SC模型执行load指令。这样就可以实现内存数据的一致性,最终的执行顺序为S1 S2 L1 L2。

2. RISC-V指令集中实现

以RISC-V指令集RV32I指令格式为例。

FENCE指令

fence指令用于顺序话其他RISC-V线程,外部设备或者协处理器看到的设备I/O和存储器访问,即屏蔽"数据"存储器执行的顺序。

如图,在所有前续集合(predecessor)执行到FENCE指令前的任何操作前,处于FENCE指令后的后续集合(successor)中的任何操作,都不能被其他任何RISC-V线程或者外部设备看到。即FENCE就像一个栅栏,FENCE之前所有的存储器操作、IO操作必须完成后,在FENCE指令之后的指令才能看到结果。

FENCE.I指令

fence.i指令用于同步指令和数据流。RSIC-V并不能确保在同一条线程中,取指看得到前面对指令存储器的store,直到执行一条FENCE.I指令

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。