#缓存 #优化 #架构 #无std #缓存优化

无std cuneiform-fields

为 Rust 提供字段级别的 [无 std] 缓存优化

3 个不稳定版本

0.1.1 2021 年 2 月 3 日
0.1.0 2019 年 12 月 31 日
0.0.0 2019 年 12 月 29 日

#440并发

Download history 45/week @ 2024-03-11 16/week @ 2024-03-18 19/week @ 2024-03-25 61/week @ 2024-04-01 18/week @ 2024-04-08 41/week @ 2024-04-15 52/week @ 2024-04-22 71/week @ 2024-04-29 37/week @ 2024-05-06 37/week @ 2024-05-13 30/week @ 2024-05-20 22/week @ 2024-05-27 36/week @ 2024-06-03 29/week @ 2024-06-10 23/week @ 2024-06-17 20/week @ 2024-06-24

每月 110 次下载
4 个 Crates 中使用 (3 直接)

Apache-2.0/MIT

12KB
169

为 Rust 提供字段级别的缓存优化 (无 std)

Build Status Latest Version Rust Documentation

该包为结构体中的字段提供缓存行大小匹配优化。

该包通过使用 #[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