14次发布
0.7.4 | 2024年3月15日 |
---|---|
0.7.3 | 2023年8月10日 |
0.7.2 | 2023年5月10日 |
0.7.1 | 2022年12月23日 |
0.2.0 | 2019年11月11日 |
#27 在 硬件支持
每月178,248次下载
在 307 个包中使用 (16 直接)
19KB
139 行
多版本
Rust的函数多版本化属性宏。
什么是函数多版本化?
许多CPU架构都有各种指令集扩展,提供额外的功能。常见的例子是在x86/x86-64上的SSE和AVX以及ARM/AArch64上的NEON这样的单指令多数据(SIMD)扩展。当可用时,这些扩展功能可以为某些函数提供显著的性能提升。这些可选功能不能随意编译到程序中--执行不支持的指令将导致崩溃。
函数多版本化 是编译函数的多个版本,每个版本启用不同的功能,并在运行时安全地检测使用哪个版本的实践。
示例
multiversion
宏编译一个函数以针对多个可能的目标,并在运行时选择最佳版本
use multiversion::multiversion;
#[multiversion(targets("x86_64+avx", "aarch64+neon"))]
fn square(x: &mut [f32]) {
for v in x {
*v *= *v;
}
}
许可协议
多版本在MIT许可协议和Apache许可(版本2.0)的条款下分发。
有关详细信息,请参阅LICENSE-APACHE 和 LICENSE-MIT。
依赖关系
~1.5MB
~36K SLoC