我正在编写一些旨在以 32 位模式在 x86 上运行的代码。在那种模式下,我知道我只有 8 个 SIMD/AVX2-Registers (YMM0-7) 可以自由使用。然而,我的一些向量子例程有时会同时使用超过这个数量的寄存器(这意味着它们仍然需要在路上的某个地方——大多数情况下不会那么远)。
我的理解是,编译器在找不到未使用的寄存器时会将旧寄存器导出到堆栈内存。但这对性能有多大影响?(例如,以后每次导出/导入的周期)。我是否可以信任主要位于 L1-D-Cache 中的堆栈内存(在 Haswell 中有 2 个周期延迟),或者避免这种寄存器到内存(反之亦然)传输是否会对性能产生重大影响?
到目前为止,我无法找到该主题的答案,特别是因为寄存器越来越大(即将推出的 Skylake 平台,每个寄存器 1 个缓存线)。如果您能提供消息来源以防您回答,那就太好了。