我是Cortex A的新启动者,我知道ARM应用了弱有序内存模型,并且有三种相互排斥的内存类型:
我大致理解正常是什么,强有序和设备意味着什么。然而,强有序和设备之间的差异让我感到困惑。
根据Cortex-A系列程序员指南,唯一的区别是:
对强有序内存的写入只有在到达写入所访问的外围设备或内存组件时才能完成。 在写入设备存储器到达被写设备访问的外围设备或存储器组件之前,允许写入设备存储器。
我不太清楚这究竟意味着什么。我猜想,使用强有序或设备输入的内存的访问顺序应该与程序员的代码相一致(没有无序访问)。但是CPU可能会在访问内存时执行下一条指令,如果类型是强排序的,它只需等待访问就可以完成。
如果我错了,请告诉我做这件事的意义是什么。
提前谢谢。
发布于 2013-09-08 14:49:52
需要理解的重要一点是,内存类型对整个指令流没有保证的影响--它们只影响内存访问的顺序。(它们可能对以特定方式与特定互连集成的特定处理器产生特定影响,但软件绝不能依赖这一点。)
另一件需要理解的重要事情是,即使是强有序的记忆也提供了隐式保证,即只在访问同一外围设备时才能排序。任何比这更严格的订购要求都需要使用明确的屏障指令。
第三个要点是,由于内存类型而发生的任何隐式内存访问排序都不会影响对其他内存类型的访问排序。同样,如果应用程序有类似于此的依赖项,则需要显式的屏障指令。
现在,在这种背景下,一种描述设备和强有序内存之间区别的更简单的方法是,设备内存访问可以在处理器本身中或在互连中被缓冲。不同之处在于,缓冲访问可以在结束点完成(甚至启动)之前向处理器发出完全信号。这提供了更好的性能,而代价是丢失了任何错误条件的同步报告。
https://stackoverflow.com/questions/18676562
复制相似问题