我有fast newline-counting routine的两个版本。一个运行在旧硬件上,而另一个运行速度更快,使用POPCNT指令,该指令可用于较新的硬件(例如第六代Intel CPU)。
现在我想为每个CPU使用最好的版本 - 我怎样才能知道它是否具有高性能的POPCNT实现?
答案 0 :(得分:8)
你可以做like @kobrien said,或者你可以采取更文明的方法 - cpuid
crate。
为此,请将其添加到Cargo.toml
,然后检查POPCNT的可用性
extern crate cpuid;
fn have_popcnt() -> Option<bool> {
cpuid::identify().ok().map(|ci| ci.has_feature(cpuid::CpuFeature::POPCNT))
}
如果CPU不支持CPUID指令,have_popcnt()
函数将返回None
或Some(hp)
,其中hp
确定POPCNT的可用性
答案 1 :(得分:1)
执行cpuid指令。检查ecx的第23位。