11

我真的是 Cortex A 的新手,我知道 ARM 采用弱序内存模型,并且存在三种互斥内存类型:

  • 强序
  • 设备
  • 普通的

我大致了解 Normal 的含义以及 Strongly-ordered 和 Device 的含义。然而,强排序和设备之间的差异让我感到困惑。

根据 Cortex-A 系列程序员指南,唯一的区别是:

对强序内存的写入只有在到达写入访问的外围设备或内存组件时才能完成。

允许在设备内存到达写入访问的外围设备或内存组件之前完成对设备内存的写入。

我不太确定这的真正含义是什么。我猜想,使用 Strongly-ordered 或 Device 键入的内存的访问顺序应该与程序员的代码一致(没有乱序访问)。但是,如果键入的是 Device,CPU 可能会在访问内存时执行下一条指令,如果键入的是 Strongly-ordered,它只会等到访问完成。

如果我错了,请纠正我,请告诉我这样做的含义是什么。

提前致谢。

4

1 回答 1

10

要理解的重要一点是,内存类型对整个指令流没有保证的影响——它们只影响内存访问的顺序。(它们可能会对以特定方式与特定互连集成的特定处理器产生特定影响 - 但软件永远不能依赖它。)

要理解的另一件重要的事情是,即使是强排序的内存也提供隐含的排序保证,仅涉及对同一外围设备的访问。任何比这更严格的排序要求都需要使用明确的屏障指令。

第三个重要的一点是,由于内存类型而发生的任何隐式内存访问顺序都不会影响对其他内存类型的访问顺序。同样,如果您的应用程序具有这样的依赖项,则需要明确的屏障指令。

现在,在这种背景下——描述设备和强序内存之间区别的一种更简单的方法是设备内存访问可以被缓冲——在处理器本身或互连中。不同之处在于缓冲访问可以在结束点完成(或什至启动)之前向处理器发送完成信号。这以丢失任何错误情况的同步报告为代价提供了更好的性能。

于 2013-09-08T14:49:52.090 回答