实际上谁在 MPCore 中乱序访问内存?

问题描述 投票:0回答:1

根据我目前对 ARM Cortex A57 和 A78 TRM 的理解,微操作可以乱序发送到多个执行管道中的一个。

据我所知,这是独立教学的指令重新排序。

内存访问重新排序意味着系统中的观察者和奴隶可能会观察到与程序序列相比不同顺序的内存访问。这可能意味着以下之一 -

1 - CPU 重新排序内存访问微操作并发布到加载和存储管道。互连(ACE/CHI)没有做任何重新排序

2 - CPU 按程序顺序发出微操作,但互连(ACE/CHI)对其重新排序

我的理解对吗? 如果是,那么屏障指令是否会通过停止进一步的指令发出来停止 CPU 流水线,或者互连会限制 CPU 主接口直到收到屏障指令响应?

我在 ARM 博客中询问,但截至目前没有回复。

https://community.arm.com/support-forums/f/architectures-and-processors-forum/54529/who-actually-does-out-of-ordering-of-the-memory-accesses- in-mpcore

cpu-architecture arm64 memory-barriers instruction-reordering
1个回答
0
投票

内存重新排序(访问全局可见的缓存状态)发生在 CPU 内核内部,而不是互连。屏障指令不会向其他核心发送任何消息。

(至少不是

dmb ish
。我不知道外部可共享/非缓存一致的东西,但这些障碍可能只是订购东西 wrt。在这些情况下你也需要的缓存控制指令。A32/ T32A64 文档对我来说听起来像是更强大的订单,它仍然只是等待完成由于其他指令(包括加载或存储)而已经发生的事情。某处可能有更详细的文档,但是如果这个答案遗漏了任何重要的东西,也许 ARM 专家可以用另一个答案来阐明这个问题。)


向执行单元发出加载微操作会尝试立即从缓存中读取。但是发布存储只是将数据+地址复制到存储缓冲区。内存重新排序(它们访问一致的共享缓存)发生在每个核心内部,通过各种机制,包括存储缓冲区和命中未命中非阻塞缓存。

乱序执行是 LoadLoad 重新排序的一种重要机制(如果加载地址以不同的顺序准备就绪),但是由于缓存未加载和存储,所有主要类型的内存重新排序都可能发生在有序管道上缓冲。 (如果存储缓冲区允许乱序提交存储,ARM 通常会这样做,因为它的内存模型不能保证 StoreStore 的顺序。)

我的理解是互连通常不会自行引入重新排序。所以内存屏障只需要让这个核心内部的东西等到早期的加载完成和/或存储缓冲区耗尽。

另见:

© www.soinside.com 2019 - 2024. All rights reserved.