我读了ARM架构参考手册中的内存屏障,我看到了数据内存屏障(DMB)指令。
我的问题是DMB指令(尤其是'dmb ish')会阻止内核吗?
例如,四核架构(核0-3),核0执行DMB指令,然后其他核阻塞直到某种障碍执行流(控制流如核-缓存控制器-内存控制器)?
或者dmb指令与这些部分完全无关?
在ARM参考手册(https://developer.arm.com/documentation/dui0802/a/A32-and-T32-Instructions/DMB--DSB--and-ISB)中,DMB指令不影响除内存访问(ld,st)外的其他指令执行。但我对这部分很好奇。
很明显,'dmb ish'不会影响其他核心的执行?
2条答案
按热度按时间ajsxfq5m1#
它对指令执行没有明显的影响;但是对由这些指令从存储器子系统读取或写入到存储器子系统的数据有巨大的影响。以及对这些指令执行速度的非常明显的影响
正如Nate Eldridge指出的那样,架构手册描述了这些指令的效果,但没有描述实现,不同的ARM芯片之间可能会有很大的差异。
您可能期望从特定实现中获得的内容:
在具有多个CPU芯片的系统上,其中同步必须同步芯片之间的L2高速缓存,结果将相应地更昂贵。
6rqinv9w2#
DMB仅影响当前运行线程中的指令顺序。对于任何跨线程和跨核同步的事情,您需要一些更高级别的原语,如信号量或互斥体(通常还有一些操作系统支持以有效地处理它)。