#检测 #运行时 #特性 #检测 #std #平台无关

nightly notstd_detect

std_detect 的分支 - Rust 标准库的运行时 CPU 特性检测

3 个版本 (破坏性更新)

新版本 0.4.0 2024 年 8 月 11 日
0.3.0 2024 年 2 月 17 日
0.2.0 2023 年 11 月 2 日

165硬件支持

Download history 10/week @ 2024-04-22 2/week @ 2024-05-13 15/week @ 2024-05-20 14/week @ 2024-05-27 21/week @ 2024-06-03 31/week @ 2024-06-10 25/week @ 2024-06-17 13/week @ 2024-06-24 8/week @ 2024-07-01 10/week @ 2024-07-08 19/week @ 2024-07-15 31/week @ 2024-07-22 2/week @ 2024-07-29 34/week @ 2024-08-05

每月 86 次下载
用于 multivers-runner

MIT/Apache

170KB
2.5K SLoC

notstd::detect - Rust 标准库的运行时 CPU 特性检测的分支

私有的 std::detect 模块实现了 Rust 标准库中的运行时特性检测。这允许检测运行程序的 CPU 是否支持某些特性,如 SIMD 指令。

使用方法

std::detect API 作为 libstd 的一部分提供。建议通过标准库而不是通过此 crate 使用它。 std::detect 中的不稳定特性在 nightly Rust 后面通过各种功能门提供。

如果你需要在 #[no_std] 环境中进行运行时特性检测,Rust core 库无法帮助你。按照设计,Rust core 是平台无关的,但进行运行时特性检测需要平台的一定程度的合作。

然后你可以手动将 std_detect 作为依赖项包含,以获得与 Rust 标准库提供的类似运行时特性检测支持。我们打算使 std_detect 在此方面更加灵活和可配置,以更好地满足 #[no_std] 目标的需求。

特性

  • std_detect_dlsym_getauxval(默认启用,需要 libc):启用后,可以使用 libc::dlsym 来查询是否将 getauxval 链接到二进制文件中。如果未这样做,该功能允许其他回退方法执行运行时功能检测。当此功能禁用时,std_detect 假定 getauxval 已链接到二进制文件。如果不是这样,则行为未定义。

    注意:此功能在 *-linux-gnu**-android* 目标上被忽略,因为我们可以安全地假设 getauxval 已链接到二进制文件。

    • *-linux-gnu* 目标(自 Rust 1.64以来)具有比 glibc 2.16 更高的 glibc 要求,后者添加了 getauxval
    • *-android* 目标(自 Rust 1.68以来)具有比 Android 4.3(API 级别 18) 更高的最低支持 API 级别,后者添加了 getauxval
  • std_detect_file_io(默认启用,需要 std):如果其他更高效的方法失败,则启用使用文件 API(例如 /proc/cpuinfo 等)执行运行时功能检测。此功能需要 libstd 作为依赖项,防止包在 std 不可用的情况下运行。

平台支持

  • 所有 x86/x86_64 目标都通过直接查询 cpuid 指令来支持所有平台,以确定硬件和操作系统能够支持的功能。std_detect 假定二进制文件是用户空间应用程序。如果您需要查询 cpuid 的原始支持,请考虑使用 cupid 包。

  • Linux/Android

    • arm{32, 64}mips{32,64}{,el}powerpc{32,64}{,le}riscv{32,64}loongarch64:通过查询 ELF 辅助向量(如果可用,则使用 getauxval)来支持 Linux 上的这些目标,如果失败,则通过查询 /proc/cpuinfo
    • arm64:Linux >= 4.11已实现通过直接查询mrs进行运行时特性检测的部分支持,但默认未启用。
  • FreeBSD

    • arm32powerpc64:通过使用sysctl查询ELF辅助向量,std_detect在FreeBSD上支持这些。
    • arm64:通过直接查询mrs实现运行时特性检测。
  • OpenBSD

    • arm64:通过查询sysctl实现运行时特性检测。
  • Windows

    • arm64:通过查询IsProcessorFeaturePresent实现运行时特性检测。

许可证

此项目根据您的选择受以下任一许可证的许可:

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您提交给std_detect的任何有意贡献都应如上双许可,没有任何额外条款或条件。

依赖

~220KB