6 个版本

使用旧的 Rust 2015

0.1.5 2019年4月17日
0.1.4 2019年2月18日
0.1.3 2019年1月30日

#413 in 硬件支持

MIT/Apache

94KB
2K SLoC

std::detect - Rust 标准库的运行时CPU功能检测

Travis-CI Status Appveyor Status std_detect_crate_badge std_detect_docs_badge

私有的 std::detect 模块实现了 Rust 标准库中的运行时功能检测。这允许检测运行二进制文件的 CPU 是否支持某些功能,如 SIMD 指令。

用法

std::detect API 作为 libstd 的一部分提供。建议通过标准库而不是此crate使用它。在 nightly Rust 中,std::detect 的不稳定功能可以通过 feature(stdsimd) 功能门获得。

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

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

特性

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

  • std_detect_file_io(默认启用,需要std):启用后,如果其他更高效的方法失败,可以使用文件API(例如/proc/cpuinfo等)执行运行时功能检测。此功能需要libstd作为依赖项,防止在不可用std的应用程序上运行。

平台支持

  • 所有x86/x86_64目标都通过查询硬件和操作系统支持的cpuid指令在所有平台上得到支持。std_detect假定二进制文件是一个用户空间应用程序。如果您需要查询cpuid的原始支持,请考虑使用cupid crate。

  • Linux

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

    • arm64:通过直接查询mrs实现运行时功能检测。

许可证

本项目许可协议为以下之一:

您可选择。

贡献

除非您明确声明,否则您提交给std_detect的任何贡献,根据Apache-2.0许可证的定义,应按上述方式双许可,不附加任何额外条款或条件。

依赖项