ARM and POWER Relaxed Memory Models

preview
需积分: 0 0 下载量 14 浏览量 更新于2018-06-09 收藏 557KB PDF 举报
ARM和POWER架构下的内存模型是在多处理器计算领域中的重要知识点。由于这两种架构的处理器广泛应用于移动设备和服务器中,理解它们的内存模型对于编写高效且正确的并发程序至关重要。ARM和POWER的内存模型都是相对放宽的,这意味着它们在执行程序时引入了各种硬件优化,这些优化在顺序代码中不会影响程序的可观测行为,但是在并发程序中,如果没有适当的同步机制,程序可能不会按照程序员的意图来执行。同步机制主要包含屏障指令(barriers)、依赖关系以及加载预留/条件存储(load-reserve/store-conditional pairs)。 放宽内存模型的主要目的是允许处理器进行各种内存访问的重新排序,从而提升执行速度。然而,这也带来了编程上的挑战,因为程序员必须明确了解这些优化带来的潜在影响,并在编程时确保它们不会破坏程序的正确性。 在本教程中,通过实例向程序员展示了这些内存模型的主要问题,并基于大量的实验测试、与设计者的讨论以及旨在捕捉架构意图的正式模型来解释它们。为使本教程尽可能易于理解,作者引用了先前的工作来提供详细信息。 本教程的内容围绕以下几个主题展开: 1. 从顺序一致性到放宽内存模型:这一部分介绍了在讨论ARM和POWER的内存模型之前,需要理解的顺序一致性概念。顺序一致性是指程序的每个操作都好像是严格顺序执行的,但是在多核处理器上,为了性能考虑,会引入一些看似不相关操作的重新排序。 2. 引入小测验(litmus tests)和简单消息传递(MP):在这部分,介绍了小测验是如何帮助理解内存模型的。同时,通过在消息传递中不使用屏障和依赖关系来展示并发程序执行时可能出现的问题,说明了在并发程序中使用屏障指令来强制排序的必要性。 3. 强制排序的屏障指令:介绍了ARM和POWER中实现内存屏障的不同指令,比如ARM中的dmb/sync指令以及POWER的lwsync指令,以及它们在强制程序按照特定顺序执行时的作用和影响。 4. 强制排序的依赖关系:这一部分解释了地址依赖、控制依赖和数据依赖。这些依赖关系是程序员在编写并发代码时必须理解和应用的关键概念,用来确保程序执行的正确性和期望的顺序性。 5. 在多线程上进行迭代消息传递和累积性(WRC和ISA2):本部分讨论了累积屏障在多线程环境下的作用,以及它们是如何保证特定类型操作的顺序性的。 6. 存储缓冲(SB)或者Dekker的例子:这部分通过Dekker算法的变体来展示存储缓冲带来的问题和挑战。这里涉及到处理器执行存储操作时使用一个缓冲区,可能会导致其他处理器观察到的数据与实际情况不同。 在上述内容中,观察到的行为(Observed Behaviour)是一个核心主题,它描述了在放宽内存模型下,程序在实际运行时可能出现的各种情况。这对于程序员来说是非常重要的,因为只有正确预测和理解了这些行为,才能编写出不会因内存模型的优化而产生错误的并发程序。 在撰写有关ARM和POWER放松内存模型的文档时,必须清楚地了解并发程序设计中的关键概念,并且要能够利用同步机制来控制不同处理器或核心上操作的执行顺序。通过理解这些知识点,程序员可以更好地掌握如何在现代多处理器架构上编写出稳定和高效的软件。
whbttst
  • 粉丝: 33
  • 资源: 19
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜