3 个不稳定版本
0.1.1 | 2021 年 2 月 3 日 |
---|---|
0.1.0 | 2019 年 12 月 31 日 |
0.0.0 | 2019 年 12 月 29 日 |
#440 在 并发 中
每月 110 次下载
在 4 个 Crates 中使用 (3 直接)
12KB
169 行
该包为结构体中的字段提供缓存行大小匹配优化。
该包通过使用 #[repr(align(COHERENCE_LINE_SIZE))]
对字段进行对齐,以减少数据预取信号之间的时间。 COHERENCE_LINE_SIZE
可以通过 cuneiform
根据架构自动检测或决定。
[dependencies]
cuneiform-fields = "0.1"
示例
不可变的对齐字段
通过 cuneiform 读取说明 中提到的不可变缓存行大小检测进行对齐
use cuneiform_fields::prelude::*;
pub struct Hermetic {
data: HermeticPadding<u8>,
data_2: u16,
}
在上面的示例中,data
将通过不可变对齐进行对齐,但字段 data_2
不会进行对齐优化。
架构对齐字段
通过当前 Rust 编译器架构检测到的缓存行大小进行对齐。如果在已知的架构中没有检测到架构,它将回退到默认对齐
use cuneiform_fields::prelude::*;
pub struct ArchSpecific {
data: ArchPadding<u8>,
data_2: u16,
}
在上面的示例中,data
将通过架构对齐进行对齐,但字段 data_2
不会进行对齐优化。
注意:对齐值不是随机选择的或直接包含的。值是在防止伪共享或创建较少的波点以进行独占缓存的心态下考虑并包含在内的。
有关设计选择、架构和板级系统等更多信息,请访问 Cuneiform GitHub。
依赖项
~1.3–8.5MB
~75K SLoC