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硬件支持

Download history 33660/week @ 2024-04-20 27847/week @ 2024-04-27 30799/week @ 2024-05-04 31770/week @ 2024-05-11 30548/week @ 2024-05-18 35080/week @ 2024-05-25 33834/week @ 2024-06-01 33167/week @ 2024-06-08 39275/week @ 2024-06-15 39074/week @ 2024-06-22 39321/week @ 2024-06-29 37764/week @ 2024-07-06 37547/week @ 2024-07-13 44448/week @ 2024-07-20 49651/week @ 2024-07-27 41546/week @ 2024-08-03

每月178,248次下载
307 个包中使用 (16 直接)

MIT/Apache

19KB
139

多版本

Crates.io Rust Documentation Rustc Version 1.61+ License

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-APACHELICENSE-MIT

依赖关系

~1.5MB
~36K SLoC