Skip to content

InfiniTensor/digit-layout

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

digit-layout

CI Latest version Documentation license codecov GitHub repo size GitHub code size in bytes

GitHub Issues GitHub Pull Requests GitHub contributors GitHub commit activity

这个库提供了一个统一的数据类型定义,可以高效地编码类型信息,避免重复定义数据类型。

特性

  • 支持无符号整数类型;
  • 支持浮点数类型;
  • 支持自定义命名类型;
  • 紧凑的内存布局;
  • 无标准库依赖(no_std);
  • 可选的 half 浮点数支持;

使用示例

基本用法

use digit_layout::{DigitLayout, LayoutContent};

// 创建无符号整数类型布局
let u8_layout = DigitLayout::unsigned(8, 1);
assert_eq!(u8_layout.to_string(), "u8");

// 创建浮点数类型布局
let f32_layout = DigitLayout::real(8, 23, 1);
assert_eq!(f32_layout.to_string(), "f32_e8m23");

// 创建自定义类型布局
let custom_layout = DigitLayout::named("custom", 1, 4);
assert_eq!(custom_layout.to_string(), "custom");

数组类型

use digit_layout::DigitLayout;

// 创建无符号整数数组布局
let u8_array = DigitLayout::unsigned(8, 4);
assert_eq!(u8_array.to_string(), "[u8; 4]");

// 创建浮点数数组布局
let f32_array = DigitLayout::real(8, 23, 4);
assert_eq!(f32_array.to_string(), "[f32_e8m23; 4]");

解码布局

use digit_layout::{DigitLayout, LayoutContent};

// 解码无符号整数布局
let u8_layout = DigitLayout::unsigned(8, 1);
match u8_layout.decode() {
    LayoutContent::Unsigned { width } => {
        assert_eq!(width, 8);
    }
    _ => panic!("Expected unsigned layout"),
}

// 解码浮点数布局
let f32_layout = DigitLayout::real(8, 23, 1);
match f32_layout.decode() {
    LayoutContent::Real { exponent, mantissa } => {
        assert_eq!(exponent, 8);
        assert_eq!(mantissa, 23);
    }
    _ => panic!("Expected real layout"),
}

性能测试

项目包含一个性能测试示例,可以测量各种操作的执行时间。运行性能测试:

cargo run --example benchmark

性能测试会测量以下操作的执行时间:

  1. 创建布局

    • 创建无符号整数布局;
    • 创建浮点数布局;
    • 创建自定义布局;
  2. 解码布局

    • 解码无符号整数布局;
    • 解码浮点数布局;
    • 解码自定义布局;

测试结果会显示每个操作的平均执行时间。

文档

完整的 API 文档可以在 docs.rs 上找到。

贡献

欢迎提交 Issue 和 Pull Request!

许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。

About

Define memory layout of digital types as `[sign|exponent|mantissa; N]`

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages