#f16 #arithmetic-operations #no-std #bfloat16

no-std half

为Rust实现IEEE 754-2008标准的binary16和bfloat16类型的半精度浮点数f16和bf16类型

24个稳定版本

2.4.1 2024年4月6日
2.4.0 2024年2月26日
2.3.1 2023年6月26日
2.2.1 2023年1月9日
0.1.0 2016年3月18日

#5数据结构 类别中

Download history 932907/week @ 2024-04-30 935081/week @ 2024-05-07 1003203/week @ 2024-05-14 995316/week @ 2024-05-21 1091467/week @ 2024-05-28 1149631/week @ 2024-06-04 1155547/week @ 2024-06-11 1084000/week @ 2024-06-18 1162614/week @ 2024-06-25 1056886/week @ 2024-07-02 1177411/week @ 2024-07-09 1203521/week @ 2024-07-16 1197594/week @ 2024-07-23 1217167/week @ 2024-07-30 1199709/week @ 2024-08-06 1308434/week @ 2024-08-13

5,143,756 每月下载量
用于 8,348 个crates (273 直接使用)

MIT/Apache

255KB
5.5K SLoC

f16bf16 浮点类型用于Rust

Crates.io Documentation Crates.io Build status CircleCI

此crate实现了Rust的半精度浮点数f16类型,用于实现IEEE 754-2008标准的binary16,也称为"half"格式,以及实现bfloat16格式的bf16类型。

用法

f16bf16类型尽可能匹配现有的Rust浮点类型功能,并提供转换操作(如到/从f32f64)以及基本算术运算。当硬件支持这些操作时,将使用硬件支持——通过内联函数或定向汇编——尽管某些硬件可能需要nightly Rust工具链。

此crate提供no_std支持,因此可以轻松地用于嵌入式代码,在嵌入式代码中,较小的浮点格式最有用。

需要Rust 1.70或更高版本。 如果您需要支持较旧的Rust版本,请使用此crate的1.x版本。

有关更多详细信息,请参阅crate文档

可选功能

  • alloc —— 当不使用std库时,启用使用alloc crate。

    这启用了 vec 模块,它包含对 Vec 类型的零拷贝转换。这使得在原始 Vec<u16> 比特和 Vec<f16>Vec<bf16> 数组之间进行快速转换,反之亦然。

  • std — 启用依赖于 Rust std 库的功能,包括 alloc 功能中的所有内容。

    启用 std 功能将启用对硬件支持的运行时 CPU 特性检测。没有此功能检测,硬件仅在编译器目标支持时使用。

  • serde - 为 f16bf16 实现 SerializeDeserialize 特性。这添加了对 serde crate 的依赖。

  • num-traits — 启用来自 num-traits crate 的 ToPrimitiveFromPrimitiveNumFloatFloatCoreBounded 特性实现。

  • bytemuck — 启用来自 bytemuck crate 的 ZeroablePod 特性实现。

  • zerocopy — 启用来自 zerocopy crate 的 AsBytesFromBytes 特性实现。

  • rand_distr — 启用从 rand_distr crate 的分布(如 UniformNormal)中进行抽样。

  • rkyv -- 使用 rkyv crate 启用零拷贝反序列化。

硬件支持

以下列表详细说明了此 crate 中浮点类型的硬件支持。当使用 std 库时,将使用运行时 CPU 目标检测。为了获得最佳性能,针对特定 CPU 特性进行编译,这样可以避免运行时开销,并在 no_std 环境中工作。

架构 CPU 目标特性 注释
x86/x86_64 f16c 这仅支持转换到/从 f16(包括向量 SIMD),而不支持任何 bf16 或算术运算。
aarch64 fp16 这仅支持所有 f16 操作。

更多文档

许可

本库根据您的选择,以下任一许可进行分发:

任选其一。

本项目遵循REUSE规范。版权归其贡献者所有。一些文件可能包含明确的版权声明和/或SPDX标识符。完整的作者信息请参阅版本控制历史。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交以包含在工作中的任何贡献,将双重许可如上所述,没有任何附加条款或条件。

依赖

~0–0.9MB
~16K SLoC