【发布时间】:2011-11-09 01:11:13
【问题描述】:
为了防止错误共享,我想将数组的每个元素与缓存行对齐。所以首先我需要知道缓存行的大小,所以我为每个元素分配了相应的字节数。其次,我希望数组的开头与缓存行对齐。
我使用的是 Linux 和 8 核 x86 平台。首先我如何找到缓存线的大小。其次,如何与 C 中的缓存行对齐。我使用的是 gcc 编译器。
因此结构将如下所示,假设高速缓存行大小为 64。
element[0] occupies bytes 0-63
element[1] occupies bytes 64-127
element[2] occupies bytes 128-191
等等,当然假设 0-63 与缓存行对齐。
【问题讨论】:
-
也许这会有所帮助:stackoverflow.com/questions/794632/…
-
但它没有显示如何使用 gcc 对齐缓存。
-
使用 64 字节的编译时常量作为高速缓存行大小并不是一个坏主意,因此编译器可以将其烘焙到关心它的函数中。让编译器为运行时可变的缓存行大小生成代码可能会消耗对齐事物的一些好处,特别是在自动矢量化的情况下,如果它知道指针与缓存行对齐,它可以帮助编译器生成更好的代码宽度(比 SIMD 向量宽度更宽)。
标签: c linux caching computer-architecture memory-alignment