【问题标题】:Does modern x86-64 cpu still benefit from memory data alignment?现代 x86-64 cpu 是否仍然受益于内存数据对齐?
【发布时间】:2022-01-10 14:06:27
【问题描述】:

如题,

我在网上搜索了很多关于内存数据对齐的旧文章,但我不确定它们现在是否仍然有用。那么,问题是关于现代 x86-64 CPU,内存数据对齐是否仍然有利于高效的数据访问?还是只是所有编译器为了向后兼容而采用的旧约定?

【问题讨论】:

    标签: performance memory x86 x86-64 memory-alignment


    【解决方案1】:

    对于数组是,因为这意味着您将避免缓存行和页面拆分。请参阅How can I accurately benchmark unaligned access speed on x86_64? 了解有关各种处罚的详细信息以及如何衡量它们。

    这对于使用 AVX-512 的向量化尤其重要,其中循环使用 512 位向量的未对齐数组意味着每次加载都是缓存行拆分。即使对于来自 L3 或 DRAM 的数据,而不是 L2 或 L1d 命中的数据,在同一 CPU 上使用 AVX 256 位向量的损失可能约为 20%。

    对于现代 AMD 和 Intel 微架构上的整数和 SIMD 加载/存储,对于单个高速缓存行内的未对齐情况不适用。 (除了传统的 SSE,其中只有对齐的负载可以折叠到像 addps xmm0, [rdi] 这样的内存源操作数中,而不是单独的 movups。与 AVX 不同,vaddps xmm0, xmm0, [rdi] 不需要对齐。)

    是的,可以间接地将所有结构的成员保持在同一缓存行中,从而提高空间局部性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 2014-03-15
      • 2014-11-26
      • 2015-05-26
      • 1970-01-01
      相关资源
      最近更新 更多