|
1
1
存储缓冲区不会被来自其他核心的负载窥探;它们是私人的。当存储从存储缓冲区提交到L1d缓存时,它们将全局可见。(核心必须获得MESI对该线路的独家所有权 之前 它可以做到这一点,E或M状态。) 这必须等到存储指令毕业后,也就是从ROB(ReOrder Buffer)中退休,所以它是非推测性的。A. store buffer is necessary to allow speculative execution of stores ,包含到该核心的推测状态,如果检测到错误推测(例如分支预测错误或早期指令中的错误),则可能需要回滚该推测状态。 在全局可见(对任何其他核心)之前,核心可以看到自己的存储(通过存储转发)。 这种“重新排序”与存储缓冲区在以后加载到不同地址时引入的通常的StoreLoad重新排序有些不同。 另请参阅 Globally Invisible load instructions 进行一些讨论 部分 与一家商店看到的价值相重叠,这是其他核心无法看到的。) x86的TSO内存模型是带有存储缓冲区的程序顺序+存储转发 1. 用于每个核心对一致共享缓存的访问。(参见Preshing的类比, Memory Barriers Are Like Source Control Operations .)提到存储转发很重要,因为如果“命中”存储缓冲区中已有地址的加载在存储缓冲区提交到缓存之前刚刚停止,它可能会产生你看不到的效果。 必须以独占方式拥有缓存行,存储才能 犯罪 到L1d(并变得全局可见),但如果没有这一点,则可以将存储转发到该核心自己的负载。 (在大多数体系结构上,提交L1d和MESI一致性是存储在当前核心之外变得可见的唯一途径。但PowerPC允许将“分级”存储转发到其他逻辑SMT核心, making IRIW reordering possible ) 脚注1 :这就是486或P5 Pentium“自然”所做的,在x86内存模型真正被记录下来之前,它有有序的管道和存储缓冲区。P6尽量不引入任何新的内存重新排序,以避免破坏现有的多线程代码。它 推测地 提前加载,但如果检测到缓存线在实际加载和体系结构允许加载之间已无效,则会使用内存顺序错误推测管道nuke回滚。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |