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

计算机体系结构——指令系统——屏障指令根据内存一致性模型 多核多线程的程序无约束执行的结果是不可确定的 因此为限制指令的执行顺序 便引入了特殊的存储器屏障指令 memoryfence

大家好,欢迎来到IT知识分享网。

根据内存一致性模型,多核多线程的程序无约束执行的结果是不可确定的,因此为限制指令的执行顺序,便引入了特殊的存储器屏障指令(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指令先执行,不允许将对存储器的访存提前进行。

2. RISC-V指令集中实现

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

  1. FENCE指令
    fence指令用于顺序话其他RISC-V线程,外部设备或者协处理器看到的设备I/O和存储器访问,即屏蔽”数据”存储器执行的顺序。
    如图,在所有前续集合(predecessor)执行到FENCE指令前的任何操作前,处于FENCE指令后的后续集合(successor)中的任何操作,都不能被其他任何RISC-V线程或者外部设备看到。即FENCE就像一个栅栏,FENCE之前所有的存储器操作、IO操作必须完成后,在FENCE指令之后的指令才能看到结果。
    计算机体系结构——指令系统——屏障指令


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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137058.html

(0)
上一篇 2025-06-23 14:26
下一篇 2025-06-23 14:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信