相关疑难解决方法(0)

为什么要刷新其他逻辑处理器引起的内存顺序违规的管道?

vTune文档Memory Order Machine Clear性能事件描述为:

当来自另一个处理器的侦听请求与管道中数据操作的源匹配时,将发生内存排序(MO)机器清除。在这种情况下,在撤消正在进行的装载和存储之前,应清理管道。

但是我不明白为什么会这样。在不同逻辑处理器上的加载和存储之间没有同步顺序。
处理器可以假装所有当前的机上数据操作都提交进行监听。

此问题也在此处描述

每当CPU内核检测到“内存排序冲突”时,就会触发内存排序机清除。基本上,这意味着一些当前待处理的指令试图访问我们刚刚发现同时写入了其他CPU内核的内存。由于这些指令仍被标记为待处理,而“此存储器刚刚被写入”事件则表示其他某个内核已成功完成写入,因此,待处理指令以及取决于结果的所有内容都是错误的:当我们开始执行这些指令时在说明中,我们使用的内存内容版本已过时。因此,我们需要把所有工作都扔掉,然后再做完。这很清楚。

但这对我来说没有任何意义,CPU不需要重新执行Load-Queue中的装载,因为没有针对非锁定装载/存储的总订单。

我可以看到一个问题,即允许对负载进行重新排序:

;foo is 0
mov eax, [foo]    ;inst 1
mov ebx, [foo]    ;inst 2
mov ecx, [foo]    ;inst 3
Run Code Online (Sandbox Code Playgroud)

如果执行顺序为1 3 2,则mov [foo], 13至2之间的存储会导致

eax = 0
ebx = 1
ecx = 0
Run Code Online (Sandbox Code Playgroud)

这确实违反了内存排序规则。

但是负载不能随负载重新排序,那么当来自另一个内核的监听请求与任何飞行负载的来源相匹配时,为什么英特尔的CPU会刷新管道?
此行为可以防止什么错误情况?

x86 assembly cpu-architecture memory-barriers

5
推荐指数
1
解决办法
118
查看次数

乱序执行会导致推测性内存访问吗?

当无序处理器遇到类似的东西时

LOAD R1, 0x1337
LOAD R2, $R1
LOAD R3, 0x42
Run Code Online (Sandbox Code Playgroud)

假设所有访问都会导致高速缓存未命中,处理器是否可以在询问内容$ R1甚至0x1337之前询问内存控制器0x42的内容?如果是这样,假设访问$ R1将导致异常(例如,分段错误),我们可以认为0x42是以推测方式加载的,对吗?

顺便说一句,当一个加载存储单元向内存控制器发送请求时,它是否可以在收到前一个请求之前发送第二个请求?

我的问题并不针对任何架构.欢迎与任何主流架构相关的答案.

architecture x86 arm powerpc sparc

4
推荐指数
1
解决办法
1674
查看次数

推测执行的 CPU 分支是否可以包含访问 RAM 的操作码?

据我了解,当 CPU 推测性地执行一段代码时,它会在切换到推测性分支之前“备份”寄存器状态,以便如果预测结果错误(使分支无用)——寄存器状态将是安全恢复,而不会破坏“状态”。

所以,我的问题是:推测执行的 CPU 分支是否可以包含访问 RAM 的操作码?

我的意思是,访问 RAM 不是“原子”操作——如果数据当前不在 CPU 缓存中,那么从内存中读取一个简单的操作码可能会导致实际的 RAM 访问,这可能会变成一个非常耗时的操作,从 CPU 的角度来看。

如果在推测分支中确实允许这种访问,它是否仅用于读取操作?因为,我只能假设,如果一个分支被丢弃并执行“回滚”,根据它的大小恢复写操作可能会变得非常缓慢和棘手。而且,可以肯定的是,至少在某种程度上支持读/写操作,因为寄存器本身,在某些 CPU 上,据我所知,物理上位于 CPU 缓存上。

所以,也许更精确的表述是:推测执行的一段代码有什么限制?

cpu cpu-architecture speculative-execution

4
推荐指数
1
解决办法
518
查看次数

是否需要内存屏障是因为CPU乱序执行还是因为缓存一致性问题?

我想知道为什么需要内存屏障,我已经阅读了一些关于这个主题的文章。
有人说这是因为cpu乱序执行,而另一些人说这是因为缓存一致性问题,存储缓冲区和无效队列导致。
那么,需要内存屏障的真正原因是什么?cpu乱序执行或者缓存一致性问题?或两者?cpu乱序执行和缓存一致性有关系吗?x86和arm有什么区别?

x86 arm cpu-architecture memory-barriers cpu-cache

1
推荐指数
1
解决办法
888
查看次数