标签: rfo

为什么退休后 RFO 不会打破记忆排序?

我以为我了解L1D写未命中是如何处理的,但仔细想想却让我感到困惑。

这是一个汇编语言片段:

;rdi contains some valid 64-bytes aligned pointer
;rsi contains some data
mov [rdi], rsi
mov [rdi + 0x40], rsi        
mov [rdi + 0x20], rsi
Run Code Online (Sandbox Code Playgroud)

假设[rdi][rdi + 0x40]行在 l1d 中不处于 Exclusive 或 Modified 状态。然后我可以想象以下动作序列:

  1. mov [rdi], rsi 退休。
  2. mov [rdi], rsi尝试将数据写入 l1d。RFO 启动,数据放入 WC 缓冲区。
  3. mov [rdi + 0x40], rsi退休mov [rdi], rsi已经退休,所以有可能)
  4. mov [rdi + 0x40], rsi 为连续的缓存行启动 RFO,数据被放入 WC 缓冲区。
  5. mov [rdi + 0x20], rsi退休mov [rdi …

assembly x86-64 cpu-architecture cpu-cache rfo

5
推荐指数
1
解决办法
211
查看次数

标签 统计

assembly ×1

cpu-architecture ×1

cpu-cache ×1

rfo ×1

x86-64 ×1