根据我的理解,CPU改变了写在机器代码上的操作顺序,以便进行优化,并且被称为无序执行。
在“内存顺序”一词中,它定义了访问内存的顺序。例如,在放松的顺序中,它定义了非常弱的排序规则,并且执行重排序很容易发生。
有一些内存排序模型,如x86中的TSO。在这种内存排序模型中,定义了处理器对存储器访问顺序的语义。
我不明白的是他们之间的关系。内存顺序是一种无序执行吗? OoOe还有其他方法吗?
或者,是内存顺序--无序执行的实现,而处理器的所有重新排序都是基于语义的?
发布于 2022-01-18 01:42:23
一般的问题是,在现代多处理器系统中,加载和存储指令可能会以与程序顺序不同的顺序出现在其他内核中。无序执行是发生这种情况的一种方式,但也有其他的方式.
例如,您可以拥有一个CPU,它以严格的程序顺序执行和取消所有指令,但当它执行存储指令时,它不是立即将其提交到L1缓存,而是将其放在存储缓冲区中,以便稍后写入缓存。存储缓冲区可以设计为以与它们进入的顺序不同的顺序写出存储;例如,如果第一家商店错过了L1缓存,但第二家商店将命中,则可以在等待第一家商店的缓存线加载时写出第二家商店,从而节省时间。
或者,即使存储缓冲区没有重新排序,您也可能遇到这样的情况:当存储仍然在存储缓冲区中等待时,CPU执行稍后按程序顺序出现的加载指令。因此,其他核心将看到负载发生在存储之前。例如,这就是x86的情况。
内存排序模型以抽象的方式定义了程序员对其他内核(或硬件等)可以看到的加载和存储顺序的期望。它还通常指定程序员在需要时如何获得更强的保证(例如,通过执行屏障指令)。然后,CPU必须被设计成提供定义的行为,这可能会对它可以包含的特性施加约束。例如,如果体系结构承诺TSO,CPU可能不能包括一个能够重新排序的存储缓冲区,除非它们能够以一种聪明的方式进行排序,以至于其他内核永远不会注意到重新排序。
相关问题:
https://stackoverflow.com/questions/70749012
复制相似问题