博客
关于我
DMB DSB ISB 简介
阅读量:333 次
发布时间:2019-03-04

本文共 1200 字,大约阅读时间需要 4 分钟。

DMB: Data memory barrier
理解DMB指令,先看下面例子,在core 0和core1上同时跑两个不同的指令(如下表所示)

core 0 core 1
Write A; Load B;
Write B; Load B;

这里core0在执行两个指令,写A B两个值的时候,可能会发生乱序也可能Write A时发生Cache Miss,那么就会导致在cache中 A的最新值更新慢于B的最新值。于是在core1中的指令Load B就会拿到新值,而Load A 就会拿到旧值。如果A与B有相互关系的话,便可能产生死锁等问题。这里有一个典型的例子:https://lkml.org/lkml/2012/7/13/123

于是,就有了下面的解决方法:

core 0 core 1
Write A Load B
DMB; Load A
Write B

在core0所执行的两条指令之间加入一个DMB. 这样,若core1在Load B时,拿到了最新值。那么Load A 也一定拿到了最新值。这就是DMB的作用:DMB前面的LOAD/STORE读写的最新值的acknowledgement在时间上一定先于DMB之后的指令。

SB 和DMB容易混淆。他们的区别在于:DMB可以继续执行之后的指令,只要这条指令不是内存访问指令。而DSB不管它后面的什么指令,都会强迫CPU等待它之前的指令执行完毕。其实在很多处理器设计的时候,DMB和DSB没有区别(DMB完成和DSB同样的功能)。他们以及ISB在arm reference中的解释如下[1]:

A Data Synchronization Barrier (DSB) completes when all instructions before this instruction complete.
A Data Memory Barrier (DMB) ensures that all explicit memory accesses before the DMB instruction complete before any explicit memory accesses after the DMB instruction start.
An Instruction Synchronization Barrier (ISB) flushes the pipeline in the processor, so that all instructions following the ISB are fetched from cache or memory, after the ISB has been completed.
ISB不仅做了DSB所做的事情,还将流水线清空[2]。于是他们的重量级排序可以是:ISB>DSB>DMB

转载地址:http://tdve.baihongyu.com/

你可能感兴趣的文章
理解DSL||AST||query clauses||X-Pack||JDBC||ODBC
查看>>
将DataFrame作为邮件正文HTML发送 in Python
查看>>
理解Library of Congress Cataloging-in-Publication Data
查看>>
理解Python系统下的时间格式
查看>>
《经济机器是怎样运行的》笔记(三)
查看>>
Python提升回测速度concurrnet.futures模块详解
查看>>
Python语言'类'概念再理解
查看>>
(2019.6.27)Anaconda清华镜像已恢复使用
查看>>
Robomongo使用教程:踩着前辈的路
查看>>
Python中Class类与def函数的区别
查看>>
OpenAI Gym简介及初级实例
查看>>
用Matplotlib和Gym优雅地呈现股票交易智体
查看>>
Github上量化交易相关项目汇总
查看>>
JS取出两个数组中的不同或相同元素
查看>>
Ubuntu 18.04 zip压缩文件及其文件 夹中的所以 内容
查看>>
int 转 CString
查看>>
Edit编辑框自动换行与长度
查看>>
STMF4 : error: #928: incorrect use of va_start
查看>>
如何在Windows上搭建NFS服务器实现开发板与Windows之间的文件共享
查看>>
英语02_单词词性
查看>>