#优化 #缓存 #架构 #proc-macro-attributes #回退 #缓存优化

无 std cuneiform

从苏美尔时期的石板中复兴的 Rust 缓存优化。

3 个不稳定版本

0.1.1 2020年2月22日
0.1.0 2019年12月29日
0.0.0 2019年12月27日

#6 in #优化

Download history 25/week @ 2024-03-25 76/week @ 2024-04-01 24/week @ 2024-04-08 49/week @ 2024-04-15 61/week @ 2024-04-22 74/week @ 2024-04-29 42/week @ 2024-05-06 42/week @ 2024-05-13 34/week @ 2024-05-20 23/week @ 2024-05-27 38/week @ 2024-06-03 31/week @ 2024-06-10 25/week @ 2024-06-17 22/week @ 2024-06-24 7/week @ 2024-07-01 25/week @ 2024-07-08

每月下载 86 次
5 个 crate 中使用 (通过 cuneiform-fields)

Apache-2.0/MIT

16KB
198

从苏美尔时期的石板中复兴的 Rust 内存优化。

Build Status Latest Version Rust Documentation

此 crate 提供进程宏属性,以改进内存数据访问时间。

Cuneiform 的主要宏可以在属性位置接受各种参数

  • hermetic = true|false (默认为 true#[cuneiform])
    • Hermetic 允许 cuneiform 从具有 API 以获取的系统检测缓存大小。
    • 目前,hermetic 参数仅适用于 Linux 内核 2.6.32 及以上版本。
    • 如果系统与支持的系统不同,则回退到 slab
  • slab = "board_or_architecture_name (例如 #[cuneiform(slab = "powerpc_mpc8xx")])
    • Slabs 是嵌入式系统板或其他特定架构。
    • Slab 检查有两个阶段
      • 首先,它会检查给定的板/架构是否存在。
      • 如果不存在,slab 将回退到 Rust 支持的架构。
      • 如果仍未检测到架构,它将回退到默认值。
  • force = u8 (例如 #[cuneiform(force = 16)])
    • 强制给定缓存对齐。覆盖上述所有其他系统。
[dependencies]
cuneiform = "0.1"

示例

基本使用可以

// Defaults to `hermetic = true`
#[cuneiform]
pub struct Varying {
    data: u8,
    data_2: u16,
}

针对特定架构

#[cuneiform(slab = "powerpc_mpc8xx")]
pub struct SlabBased {
    data: u8,
    data_2: u16,
}

覆盖默认缓存对齐

#[cuneiform(force = 16)]
pub struct Forced {
    data: u8,
    data_2: u16,
}

字段级缓存优化

查看cuneiform-fields以获取字段级别的优化。

设计选择

  • Cuneiform没有特定的指令或架构特定代码。
  • 与如#![no_std]这样的crates兼容。简化您的缓存优化痛苦。有了分配器,您还可以在板上编译。
  • 不基于假设。基于Linux树、操作系统检查、提供者手册和相关文档。

在提交PR之前

  • 如果是big.LITTLE架构,在slabs中将两部分分开。应用命名约定。
  • 在提交PR之前检查现有的slabs。请在添加时更新它。
  • 如果您提出了无指令检测的密封对齐。请确保包含测试且不会破坏现有平台。

现有Slabs

  • powerpc_mpc8xx
  • powerpc64bridge
  • powerpc_e500mc
  • power_7
  • power_8
  • power_9
  • exynos_big
  • exynos_LITTLE
  • krait
  • neoverse_n1

依赖项

~1.3–9MB
~78K SLoC