在Rust中将结构体对齐到缓存行

6
假设我想(滥用)缓存一致性来执行无锁读取,如FaRM,那么是否仅使用一个具有单个64字节数组的结构体就足以保证在具有64字节高速缓存行的架构上,每个结构体将占用正好一个高速缓存行?
1个回答

9

不,那并不能保证对齐方式是缓存行。

RFC 1358 引入了 #[repr(align)] 的概念,允许程序员指定对齐要求。该属性已在 Rust 1.25 中稳定下来。

对于您的特定情况,您可以这样使用:

#[repr(align(64))]
struct Foo {
    value: u8,
}

我混淆了数组的大小和类型的大小。我猜测没有64字节的SIMD类型。 - benjumanji
AVX512。不确定Rust是否已经支持它。 - Chris Emerson
@ChrisEmerson:Rust目前还没有SIMD类型。这是一个广泛讨论的重要话题,很多人都在等待它们(以及相关指令)的到来,但由于有许多不同的需求/期望/想法,所以需要很长时间才能达成共识... - Matthieu M.
@MatthieuM。是的,我正在关注这些讨论。 :-) 但据我所知,目前夜间版本中存在一些不稳定的#[repr(simd)]支持,详情请见链接:http://huonw.github.io/blog/2015/08/simd-in-rust/。 - Chris Emerson
@ChrisEmerson:说实话,我不太清楚应用#[repr(simd)]的确切效果。它是否以大小作为对齐方式? - Matthieu M.
@MatthieuM。我认为是这样,但这只是一个假设;我还没有检查过。 - Chris Emerson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接