为什么不使用AVX寄存器作为超快速缓存?

use*_*743 9 performance assembly sse cpu-registers avx

我一直想知道为什么AVX2提供的16x256位寄存器在AVX无法帮助时不会用于存储普通寄存器 - 在没有足够的寄存器的情况下最小化高速缓存的命中.您是否可以在1-2周期内设置和访问AVX寄存器?

如果你搞砸运行AVX的其他代码并将其从寄存器中删除,那么当然这一切都行不通.我还没有看到这种明显的方法被使用,这导致我提出这个问题.

gsg*_*gsg 7

有一段时间,英特尔确实建议在优化手册中将通用溢出到SSE寄存器.(这不完全是AVX,但它是相同的想法.)我没有查看最新的手册,所以建议可能会或可能不会过时.

溢出到xmm寄存器的缺点是这些寄存器不会在函数调用中保留.鉴于x86-64的是寄存器存储器机,在栈上访问溢出值也需要较少的指令和更少的寄存器(比较add rax, [rsp+k]movq rbx, xmm0/add rax, rbx).这可能会在一定程度上解释为什么对该技术没有太大兴趣.