Intel Core & Enhanced Core微架构(13)

版权声明:转载必须保留原出处,没有书面许可不可用于商用目的, https://blog.csdn.net/qq_43401808/article/details/85706573

Store forwarding

如果一个读存操作紧跟着写存操作且这两条指令操作同一个内存地址,Intel Core微架构可以直接将写存操作的数据转发给读存操作指令。这个过程被称为存储到读取转发机制,简称为存储转发,可以节省读存操作的周期数(即延迟),因为读操作直接从写操作获得数据而不用等待写操作完成再从存储器中获取数据。

要想利用存储转发机制,必须要满足以下条件:

  • 写存操作必须是最后一条到目的地址存储指令。

注: 第二条MOV指令才会被转发。

MOV [5000H], 1234H ; no store-forwarding

MOV [5000H], 5678H ; store-forwarding

MOV AX, [5000H] ; AX = 5678H

  • 存储的数据宽度必须要大于等于读取的数据宽度。

MOV [5000H], 12345678H ; store-forwarding

MOV AX, [5000H] ; AX = 5678H

  • 读存操作不能跨越缓存行边界。
  • 读存操作不能跨越8字节边界。16字节的读存操作是例外(即读取16字节必须要跨越8字节边界)。
  • 读操作地址必须与写操作的地址对齐,除非满足如下的例外条件:
    •  64位对齐的写存操作可以转发它的任一32位半操作数(halves)。
    • 128位对齐的写存操作可以转发它的任一32位四分之一操作数(quarters)。
    • 128位对齐的写存操作可以转发它的任一64位半操作数(halves)。

对于复杂的结构体,软件可以利用最后一条规则的例外情况适当的移动其存储地址,从而不失去结构体中某些域的转发能力。

在Enhanced Intel Core微架构中,允许做存储转发的对齐限制被放宽了,在某些读存地址未对齐的情况下也允许做转发了。下图示出了额外了6种在Enhanced Core微架构中允许转发的情况(但是在Core微架构中不允许转发) 。红色框表示不允许转发,黄色框(6个)表示仅在Enhanced Intel Core微架构中允许转发,绿色框表示在Intel Core与Enhanced Intel Core微架构中都允许转发

Memory disambiguation

某个读存操作可能会依赖前面的某个写存操作(即可能操作同一个存储器地址,但是不确定,或许是因为写存操作的地址尚未计算出结果)。在这种情况下,许多微架构实现只能阻塞读存操作,直到读存操作前面所有的写存操作地址都可获知。

访存消歧机制可以推测哪个读存操作不依赖前面的任何写存操作。当消歧器预测到这样的读存操作时,读操作可以从一级缓存中获取数据。(TODO: 如果一级缓存未命中,会投机式地读内存么? 我觉得不会。)

最终,消歧器的预测结果会比校验。如果发生冲突(即预测失败,的确依赖前面某个写存操作),读存操作以及随后的指令都会被重新执行。

猜你喜欢

转载自blog.csdn.net/qq_43401808/article/details/85706573