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 在 数据结构 类别中
5,143,756 每月下载量
用于 8,348 个crates (273 直接使用)
255KB
5.5K SLoC
f16 和 bf16 浮点类型用于Rust
此crate实现了Rust的半精度浮点数f16类型,用于实现IEEE 754-2008标准的binary16,也称为"half"格式,以及实现bfloat16格式的bf16类型。
用法
f16和bf16类型尽可能匹配现有的Rust浮点类型功能,并提供转换操作(如到/从f32和f64)以及基本算术运算。当硬件支持这些操作时,将使用硬件支持——通过内联函数或定向汇编——尽管某些硬件可能需要nightly Rust工具链。
此crate提供no_std支持,因此可以轻松地用于嵌入式代码,在嵌入式代码中,较小的浮点格式最有用。
需要Rust 1.70或更高版本。 如果您需要支持较旧的Rust版本,请使用此crate的1.x版本。
有关更多详细信息,请参阅crate文档。
可选功能
-
alloc—— 当不使用std库时,启用使用alloccrate。这启用了
vec模块,它包含对Vec类型的零拷贝转换。这使得在原始Vec<u16>比特和Vec<f16>或Vec<bf16>数组之间进行快速转换,反之亦然。 -
std— 启用依赖于 Ruststd库的功能,包括alloc功能中的所有内容。启用
std功能将启用对硬件支持的运行时 CPU 特性检测。没有此功能检测,硬件仅在编译器目标支持时使用。 -
serde- 为f16和bf16实现Serialize和Deserialize特性。这添加了对serdecrate 的依赖。 -
num-traits— 启用来自num-traitscrate 的ToPrimitive、FromPrimitive、Num、Float、FloatCore和Bounded特性实现。 -
bytemuck— 启用来自bytemuckcrate 的Zeroable和Pod特性实现。 -
zerocopy— 启用来自zerocopycrate 的AsBytes和FromBytes特性实现。 -
rand_distr— 启用从rand_distrcrate 的分布(如Uniform和Normal)中进行抽样。 -
rkyv-- 使用rkyvcrate 启用零拷贝反序列化。
硬件支持
以下列表详细说明了此 crate 中浮点类型的硬件支持。当使用 std 库时,将使用运行时 CPU 目标检测。为了获得最佳性能,针对特定 CPU 特性进行编译,这样可以避免运行时开销,并在 no_std 环境中工作。
| 架构 | CPU 目标特性 | 注释 |
|---|---|---|
x86/x86_64 |
f16c |
这仅支持转换到/从 f16(包括向量 SIMD),而不支持任何 bf16 或算术运算。 |
aarch64 |
fp16 |
这仅支持所有 f16 操作。 |
更多文档
许可
本库根据您的选择,以下任一许可进行分发:
- MIT 许可证 (https://open-source.org.cn/licenses/MIT)
- Apache 许可证,版本 2.0 (https://apache.ac.cn/licenses/LICENSE-2.0)
任选其一。
本项目遵循REUSE规范。版权归其贡献者所有。一些文件可能包含明确的版权声明和/或SPDX标识符。完整的作者信息请参阅版本控制历史。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交以包含在工作中的任何贡献,将双重许可如上所述,没有任何附加条款或条件。
依赖
~0–0.9MB
~16K SLoC