gpt4 book ai didi

assembly - ARM 指令 ldrex/strex 是否必须对缓存对齐的数据进行操作?

转载 作者:行者123 更新时间:2023-12-02 19:19:13 28 4
gpt4 key购买 nike

在 Intel 上,CMPXCHG 的参数必须与缓存行对齐(因为 Intel 使用 MESI 来实现 CAS)。

在 ARM 上,ldrex 和 strex 在独占保留粒度上运行。

需要明确的是,这是否意味着在 ARM 上操作的数据不必进行缓存行对齐?

最佳答案

独占访问限制

以下限制适用于独占访问:

• 给定 ID 的独占写入的大小和长度必须与 前一个相同ID的独占读的大小和长度。

• 独占访问的地址必须与字节总数对齐 在交易中。

• 独占读取和独占写入的地址必须相同。

• 独占访问的读取部分的 ARID 字段必须与 AWID 匹配 写入部分。

• 独占访问的读取和写入部分的控制信号必须是 相同。

• 在独占访问突发中传输的字节数必须是 2 个,即 1、2、4、8、16、32、64 或 128 字节。

• 在独占突发中可以传输的最大字节数为 128.

• ARCACHE[3:0] 或 AWCACHE[3:0] 信号的值必须保证 正在监视独占访问的从设备看到该事务。为了 例如,由从属设备监视的独占访问不得具有 ARCACHE[3:0] 或 AWCACHE[3:0] 值指示事务正在执行可缓存。

不遵守这些限制会导致不可预测的行为。

以上内容来自 AMBA/AXI 规范。您会发现某些供应商忽略了 AWLOCK/ARLOCK(这意味着 ldrex/strex 无法在核心之外工作)。我有一些代码可以演示这一点,或者至少在您发现不支持独占访问的系统时会演示这一点。

https://github.com/dwelch67/raspberrypi/tree/master/extest

根据任务和您想要的可移植性,您可能需要提供 ifdef 包围的 swp 和 ldrex/strex 解决方案和/或使用大量可用寄存器(运行时)来告诉您支持或不支持哪些指令由您正在运行的核心决定。 (您可能会发现至少在一种情况下 swp 和 ldrex/strex 均不受支持)。

关于assembly - ARM 指令 ldrex/strex 是否必须对缓存对齐的数据进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383125/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com