首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CPU无序执行和内存顺序之间有什么关系?

CPU无序执行和内存顺序之间有什么关系?
EN

Stack Overflow用户
提问于 2022-01-18 00:27:03
回答 1查看 469关注 0票数 3

根据我的理解,CPU改变了写在机器代码上的操作顺序,以便进行优化,并且被称为无序执行。

在“内存顺序”一词中,它定义了访问内存的顺序。例如,在放松的顺序中,它定义了非常弱的排序规则,并且执行重排序很容易发生。

有一些内存排序模型,如x86中的TSO。在这种内存排序模型中,定义了处理器对存储器访问顺序的语义。

我不明白的是他们之间的关系。内存顺序是一种无序执行吗? OoOe还有其他方法吗?

或者,内存顺序--无序执行的实现,而处理器的所有重新排序都是基于语义的?

EN

回答 1

Stack Overflow用户

发布于 2022-01-18 01:42:23

一般的问题是,在现代多处理器系统中,加载和存储指令可能会以与程序顺序不同的顺序出现在其他内核中。无序执行是发生这种情况的一种方式,但也有其他的方式.

例如,您可以拥有一个CPU,它以严格的程序顺序执行和取消所有指令,但当它执行存储指令时,它不是立即将其提交到L1缓存,而是将其放在存储缓冲区中,以便稍后写入缓存。存储缓冲区可以设计为以与它们进入的顺序不同的顺序写出存储;例如,如果第一家商店错过了L1缓存,但第二家商店将命中,则可以在等待第一家商店的缓存线加载时写出第二家商店,从而节省时间。

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

内存排序模型以抽象的方式定义了程序员对其他内核(或硬件等)可以看到的加载和存储顺序的期望。它还通常指定程序员在需要时如何获得更强的保证(例如,通过执行屏障指令)。然后,CPU必须被设计成提供定义的行为,这可能会对它可以包含的特性施加约束。例如,如果体系结构承诺TSO,CPU可能不能包括一个能够重新排序的存储缓冲区,除非它们能够以一种聪明的方式进行排序,以至于其他内核永远不会注意到重新排序。

相关问题:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70749012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档