AVX指令中用作源的寄存器在指令开始执行后何时可复用?
AVX指令源寄存器复用规则解答
核心结论
x86架构下所有指令的源操作数寄存器都不会在整个指令执行周期被占用,只要指令完成发射(issue)、进入调度队列前,CPU就已经完成了所有源寄存器值的读取,后续可以直接复用。
针对vgatherdps指令的具体说明
- 位移索引寄存器的内容会在
vgatherdps指令发射时就被完整读取快照存入内部缓冲区,哪怕后续gather因为数据局部性差、cache miss导致执行耗时高达几百个周期,也不会再去读原来的索引寄存器,更不会占用该寄存器阻止你改写。 - 你完全可以在
vgatherdps指令之后的下一条指令就直接覆写这个位移索引ymm寄存器,既不会导致流水线停顿,也不会影响vgatherdps的执行结果。
补充说明
现代x86乱序执行CPU采用寄存器重命名机制,逻辑寄存器在指令发射时会映射到对应的物理寄存器,已经发射的指令读取的是对应物理寄存器的快照,后续你改写逻辑寄存器本质是绑定了新的物理寄存器,和之前已经发射的指令完全隔离。唯一会导致流水线停顿的只有后续指令依赖vgatherdps的目标寄存器结果的场景,和源寄存器无关。
内容的提问来源于stack exchange,提问作者Yuriy
相关产品推荐
相关产品推荐

