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
库时,启用使用alloc
crate。这启用了
vec
模块,它包含对Vec
类型的零拷贝转换。这使得在原始Vec<u16>
比特和Vec<f16>
或Vec<bf16>
数组之间进行快速转换,反之亦然。 -
std
— 启用依赖于 Ruststd
库的功能,包括alloc
功能中的所有内容。启用
std
功能将启用对硬件支持的运行时 CPU 特性检测。没有此功能检测,硬件仅在编译器目标支持时使用。 -
serde
- 为f16
和bf16
实现Serialize
和Deserialize
特性。这添加了对serde
crate 的依赖。 -
num-traits
— 启用来自num-traits
crate 的ToPrimitive
、FromPrimitive
、Num
、Float
、FloatCore
和Bounded
特性实现。 -
bytemuck
— 启用来自bytemuck
crate 的Zeroable
和Pod
特性实现。 -
zerocopy
— 启用来自zerocopy
crate 的AsBytes
和FromBytes
特性实现。 -
rand_distr
— 启用从rand_distr
crate 的分布(如Uniform
和Normal
)中进行抽样。 -
rkyv
-- 使用rkyv
crate 启用零拷贝反序列化。
硬件支持
以下列表详细说明了此 crate 中浮点类型的硬件支持。当使用 std
库时,将使用运行时 CPU 目标检测。为了获得最佳性能,针对特定 CPU 特性进行编译,这样可以避免运行时开销,并在 no_std
环境中工作。
架构 | CPU 目标特性 | 注释 |
---|---|---|
x86 /x86_64 |
f16c |
这仅支持转换到/从 f16 (包括向量 SIMD),而不支持任何 bf16 或算术运算。 |
aarch64 |
fp16 |
这仅支持所有 f16 操作。 |
更多文档
许可
本库根据您的选择,以下任一许可进行分发:
- MIT 许可证 (http://opensource.org/licenses/MIT)
- Apache 许可证,版本 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
任选其一。
本项目遵循REUSE规范。版权归其贡献者所有。一些文件可能包含明确的版权声明和/或SPDX标识符。完整的作者信息请参阅版本控制历史。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交以包含在工作中的任何贡献,将双重许可如上所述,没有任何附加条款或条件。
依赖
~0–0.9MB
~16K SLoC