【发布时间】:2011-03-16 12:53:49
【问题描述】:
VC 中的结构成员对齐是否会带来性能优势?如果这是使用它的最佳性能含义以及哪种尺寸最适合当前的 cpu 架构(x86_64、SSE2+、..)
【问题讨论】:
标签: c++ visual-studio compiler-construction cpu alignment
VC 中的结构成员对齐是否会带来性能优势?如果这是使用它的最佳性能含义以及哪种尺寸最适合当前的 cpu 架构(x86_64、SSE2+、..)
【问题讨论】:
标签: c++ visual-studio compiler-construction cpu alignment
编译器使用的默认对齐方式应适用于一般数据的目标平台(32 位或 64 位 Intel/AMD)。要利用 SIMD,您可能必须对这些数组使用更严格的对齐方式,但这通常使用 #pragma 或仅适用于您将在 SIMD 指令中使用的数据的特殊数据类型。
【讨论】:
当成员跨越高速缓存行边界时,性能在 x86 和 x64 内核上急剧下降。常见的编译器默认为 8 字节打包,确保您可以处理 long long、double 和 64 位指针成员。
SSE2 指令需要 16 位对齐,如果关闭,代码会爆炸。您无法从打包杂注中得到它,例如堆分配器将仅提供 8 字节对齐保证。找出您的编译器和 CRT 支持什么。像 __declspec(align(16)) 和像 _aligned_malloc() 这样的自定义分配器。或者过度分配内存并自己调整指针。
【讨论】: