6 个版本
使用旧的 Rust 2015
0.1.5 | 2019年4月17日 |
---|---|
0.1.4 | 2019年2月18日 |
0.1.3 | 2019年1月30日 |
#413 in 硬件支持
94KB
2K SLoC
std::detect
- Rust 标准库的运行时CPU功能检测
私有的 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
实现运行时功能检测。
许可证
本项目许可协议为以下之一:
- Apache许可证,版本2.0(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
您可选择。
贡献
除非您明确声明,否则您提交给std_detect
的任何贡献,根据Apache-2.0许可证的定义,应按上述方式双许可,不附加任何额外条款或条件。