我真的是Cortex A的新入门者,我知道ARM应用了弱排序的内存模型,并且有三种互斥的内存类型:
我粗略地了解Normal是什么以及强烈有序和设备意味着什么。然而强烈有序和设备之间的差异让我感到困惑。
根据Cortex-A系列程序员指南,唯一的区别是:
对强排序内存的写入只有在到达写入访问的外设或内存组件时才能完成。
允许写入器件存储器在到达写入访问的外设或存储器组件之前完成。
我不太确定这个的真正含义是什么。我猜测,使用强排序或设备键入的内存访问顺序应该与程序员的代码一致(没有无序访问)。但是,如果输入类型的设备,CPU在访问内存时可能会执行下一条指令,如果键入强排序,它将只是等待访问完成。
如果我错了,请纠正我,请告诉我这样做是什么意思。
提前致谢。
答案 0 :(得分:7)
要理解的一点是,内存类型对整个指令流有 no 保证效果 - 它们只影响内存访问的顺序。 (它们可能对使用特定互连以特定方式集成的特定处理器产生特定影响 - 但软件永远不会依赖它。)
另一个需要理解的重要事项是,即使是强排序内存也只能在访问同一外设时提供有序排序保证。任何比这更严格的订购要求都需要使用明确的屏障指令。
第三个要点是,由于内存类型而发生的任何隐式内存访问排序都不会影响对其他内存类型的访问顺序。同样,如果您的应用程序具有这样的依赖关系,则需要明确的屏障指令。
现在,在此背景下 - 描述设备和强排序内存之间差异的一种更简单的方法是可以缓冲设备内存访问 - 在处理器本身或互连中。不同之处在于,在终端完成(或甚至启动)之前,可以将缓冲的访问信号通知给处理器。 这样可以以丢失任何错误条件的同步报告为代价提供更好的性能。