【问题标题】:Is memory alignment processor dependent or data dependent or cache line length dependent?是内存对齐处理器依赖还是数据依赖或高速缓存行长度依赖?
【发布时间】:2016-03-16 12:28:26
【问题描述】:

我在C 中动态声明一个array of doubles,目标是Intel Sandy Bridge E5-2670 处理器,它有一个cache line size of 64 bytes,使用_mm_malloc()

我的问题是:

  1. 数组应该是8 byte aligned(即双精度的大小)吗?
  2. 由于缓存行大小为 64 字节,数组应该为 64 byte aligned 吗?
  3. 数组应该是32 byte aligned(在Saini et. al. 的一篇关于 AVX 指令的论文中提到)?

【问题讨论】:

  • 除非您有一些特殊要求(例如使用 SIMD,或者您需要所有可用性能的最后百分比),否则默认的 8 字节对齐就可以了。
  • @PaulR :是的,我想使用 SIMD 矢量化,最大限度地提高性能,非常重要的是了解数据对齐。感谢您的回复。
  • 好的,那么 SSE 使用 16 字节对齐,AVX、AVX2 使用 32 字节对齐(不是必需的,但它让生活更轻松,并且可以在性能上产生微小的差异)。
  • @PaulR:这意味着对齐总是由处理器决定的。谢谢!
  • 或多或少 - 我会说它更多地取决于整体架构,假设您正在考虑性能以及绝对要求。

标签: c caching double memory-alignment


【解决方案1】:

好的,那么 SSE 的 16 字节对齐,AVX、AVX2 的 32 字节对齐(不是必需的,但它让生活更轻松,并且可以在性能上产生很小的差异)。 – 保罗 R

【讨论】:

    猜你喜欢
    • 2020-03-24
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多