Intel Core & Enhanced Core微架构(11)

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

Loads and Stores

Intel Core微架构在每个周期可以同时执行最多1条128位读存操作和1条128位写存操作,这两条操作需要访问不同的存储器地址。Core微架构的乱序访存操作允许与其他微指令以及其他的访存操作一起执行。

读存操作可以:

  • 如果已知读存地址与写存地址不冲突(即不相同),则读存操作可以在写存操作之前发射
  • 推测写存操作与读操作不冲突,投机式地发射读操作(注:如果后来实际发生冲突,则重读)
  • 在分支指令实际决断之前,投机式地执行
  • 以相互重叠的方式乱序处理缓存未命中事件

读存操作不可以:

  • 投机读不能引发任何类型的处理器陷入(trap)或故障(fault)。注:若发生则不投机读
  • 投机读不会访问非缓存存储类型的数据

处理器故障(faulting)或者非缓存性读存操作会被处理器侦测到,一直等待直到这些指令退役,即当它们更新处理器架构状态时才会执行。x87与浮点SIMD读存操作会有一个周期的额外延迟(前节已经讲述)。

写存操作的处理过程分成两个阶段:

  • 执行阶段 – 分配store缓冲区,在缓冲区中保存地址和数据,为存储转发做准备。这个阶段使用发射口3和4。
  • 完成阶段 – 存储指令退役,数据更新到程序员可见的存储器中。可能会与读存操作竞争缓存的存储体(bank)。写存操作的退役由访存排序缓冲区MOB作为一个后台任务来维护,即将数据从store缓冲区移到一级缓存中。

猜你喜欢

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