gpt4 book ai didi

memory - CPU乱序执行和内存顺序有什么关系?

转载 作者:行者123 更新时间:2023-12-05 02:34:35 26 4
gpt4 key购买 nike

在我的理解中,CPU改变写在机器代码上的操作顺序以进行优化,称为乱序执行。

在术语“内存顺序”中,它定义了访问内存的顺序。比如在relaxed order中,它定义了非常弱的排序规则,很容易发生执行重排序。
x86 中有一些内存排序模型,如 TSO。在这种内存排序模型中,定义了处理器访问内存顺序的语义。

我不明白的是他们之间的关系。内存顺序是一种乱序执行吗,OoOe有没有其他的方法?
或者,内存排序是乱序执行的实现,处理器的所有重新排序都是基于语义的?

最佳答案

普遍的问题是,在现代多处理器系统上,加载和存储指令可能以不同于程序顺序的顺序对其他内核可见。乱序执行是可能发生这种情况的一种方式,但还有其他方式。

例如,您可以有一个 CPU 以严格的程序顺序执行和退出所有指令,但是当它执行存储指令时,它不会立即将其提交到 L1 缓存,而是将其放入存储缓冲区中以供写入稍后缓存。可以将存储缓冲区设计为以与输入存储不同的顺序写出存储;例如,如果第一个存储未命中 L1 缓存但第二个会命中,您可以通过在等待第一个缓存行加载时写出第二个来节省时间。

或者,即使存储缓冲区没有重新排序,您也可能会遇到这样的情况:当存储仍在存储缓冲区中等待时,CPU 会执行程序顺序中稍后出现的加载指令。因此,其他核心将在存储之前看到负载发生。例如,x86 就是这种情况。

内存排序模型以抽象的方式定义了程序员有权期望加载和存储对其他内核(或硬件等)可见的顺序。它还通常指定程序员如何在需要时获得更强的保证(例如,通过执行屏障指令)。然后必须设计 CPU 以提供定义的行为,这可能会限制它可以包含的功能。例如,如果架构 promise TSO,则 CPU 可能无法包含能够重新排序的存储缓冲区,除非他们设法以一种巧妙的方式做到这一点,以至于其他内核永远不会注意到重新排序。

相关问题:

关于memory - CPU乱序执行和内存顺序有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70749012/

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