【发布时间】:2016-03-16 12:28:26
【问题描述】:
我在C 中动态声明一个array of doubles,目标是Intel Sandy Bridge E5-2670 处理器,它有一个cache line size of 64 bytes,使用_mm_malloc()。
我的问题是:
- 数组应该是
8 byte aligned(即双精度的大小)吗? - 由于缓存行大小为 64 字节,数组应该为
64 byte aligned吗? - 数组应该是
32 byte aligned(在Saini et. al. 的一篇关于 AVX 指令的论文中提到)?
【问题讨论】:
-
除非您有一些特殊要求(例如使用 SIMD,或者您需要所有可用性能的最后百分比),否则默认的 8 字节对齐就可以了。
-
@PaulR :是的,我想使用 SIMD 矢量化,最大限度地提高性能,非常重要的是了解数据对齐。感谢您的回复。
-
好的,那么 SSE 使用 16 字节对齐,AVX、AVX2 使用 32 字节对齐(不是必需的,但它让生活更轻松,并且可以在性能上产生微小的差异)。
-
@PaulR:这意味着对齐总是由处理器决定的。谢谢!
-
或多或少 - 我会说它更多地取决于整体架构,假设您正在考虑性能以及绝对要求。
标签: c caching double memory-alignment